Excel Tech-3 / マクロ
マクロを削除したのに警告が出る
マクロを削除したのに警告が出る
【問題】
マクロを自動記録で作成した後で、以下の手順でマクロを削除しました。
1.メニュー[ツール]-[マクロ]-[マクロ]
2.[マクロの保存先] ボックスの一覧で[作業中のブック]をクリック
3.[マクロ名]
ボックスで、削除するマクロの名前をクリック
4.[削除]をクリック
上書き保存してから、そのファイルを開くと「<ファイル名>はマクロを含んでいます。」というメッセージが出ます。
どうすれば、このメッセージを出なくすることができるでしょうか?
【回答】
1.Alt+F11(メニュー[ツール]-[マクロ]-[VBE])
→VBE(Visual
Basic
Editor)が開く
2.プロジェクトエクスプローラ(通常、左側にあります)で[標準モジュール]をダブルクリック
3.Module1などと表示されているものの上で右クリック-Moduleの解放
4.「エクスポートしますか?」と聞いてきますが、[いいえ]をクリック
5.Alt+F4(メニュー[ファイル]-[終了してMicrosoft
Excelへ戻る])
6.Ctrl+S
(メニュー[ファイル]-[上書き保存])
【解説】
上記手順3.でExcel97の場合には、右クリック-Moduleの削除になります。
上記手順を行った後でも、ファイルを開いた時に「マクロを含んでいます」というメッセージが出る場合には、VBEを開いて、ThisWorkbookやSheet1などのコードウィンドウを開いて、なにかコードが残っていたら、これも削除します。
また、名前定義が原因である場合もあります。
以下のページをご覧ください。
[XL97] 特定の名前が定義されているとマクロダイアログが表示される
http://support.microsoft.com/default.aspx?scid=kb;ja;409313&Product=excelJPN
もし、マクロを作成した覚えは無いのに「マクロを含んでいます」というメッセージが出る、という場合には、ウィルスチェックをされた方が良いと思います。
VBEのフォント
【問題】
Alt+F11(メニュー[ツール]-[マクロ]-[VBE])でVBE(Visual Basic Editor)を開くと、プロジェクトとプロパティのウインドウの中の文字が、へんな書体になっているのですが、どうすれば直るでしょうか?
Excel2000を使っています。
【回答】
以下のページから修正プログラムをダウンロードし、インストールすることで直ります。
Microsoft
Office 2000 Visual Basic Editor の表示の修正プログラム
http://www.microsoft.com/downloads/details.aspx?FamilyID=781FA2E1-205A-4310-9BE8-113A473F98C6&displaylang=JA
【解説】
修正プログラム
O9VBEupd.exe のファイルサイズは、848KBです。
Officeをアップデートすることでも、表示が正しく行われるようになります。
Office のアップデート
http://office.microsoft.com/OfficeUpdate/default.aspx
「このプロジェクトのマクロは無効に設定されています。」エラー
【問題】
これまで問題無く使っていたマクロを実行しようとしたところ、以下のエラーが出てマクロが使えなくなりました。
「このプロジェクトのマクロは無効に設定されています。マクロを有効にする方法についてはオンラインヘルプまたはホストアプリケーションのドキュメントを参照してください。」
どうしたら、マクロを実行できるようになるでしょうか?
【回答】
1.メニュー[ツール]-[マクロ]-[セキュリティ]
2.[セキュリティレベル]タブで[中]をクリック
3.[OK]ボタンをクリック
【解説】
セキュリティレベルが[高]に設定されていると、マクロは自動的に無効になってブックが開きます。
上記手順で、セキュリティレベルを[中]に変更してから、ファイルを開くと「<ファイル名>はマクロを含んでいます。」というメッセージが出ますので、ここで[マクロを有効にする]ボタンをクリックすると、作成したマクロを使用できるようになります。
詳しくは以下のページをご覧ください。
[XL2000] マクロのセキュリティ
レベルが「高」に変更される
http://support.microsoft.com/default.aspx?scid=kb;ja;262876&Product=excelJPN
空白行を行削除
【問題】
マクロで何もデータ、数式、コメントが入っていない行を削除するにはどうしたら良いでしょうか?
【回答】
Sub
DeleteBlankRows()
Application.ScreenUpdating = false
On Error Resume
Next
With Cells
.SpecialCells(xlCellTypeConstants).EntireRow.Hidden = true
.SpecialCells(xlCellTypeFormulas).EntireRow.Hidden = true
.SpecialCells(xlCellTypeComments).EntireRow.Hidden = true
.SpecialCells(xlCellTypeVisible).EntireRow.Delete
.EntireRow.Hidden =
False
End With
Application.ScreenUpdating = true
End
Sub
【解説】
上記マクロは以下のような流れになっています。
1.定数(数値、文字列など)、数式、コメントが入っているセルの行を非表示に
2.表示されている行を全て削除
3.全ての行を再表示
上記マクロを実行するには、以下の手順です。
1.上記マクロの
Sub から End Sub までを選択してCtrl+C
(コピー)
2.Alt+F11(メニュー[ツール]-[マクロ]-[VBE])
→VBE(Visual Basic
Editor)が開く
3.プロジェクトエクスプローラで、VBAProject(<当該ブック名>)を選択
4.メニュー[挿入]-[標準モジュール]
5.Ctrl+V
(貼り付け)
6.Alt+F4(メニュー[ファイル]-[終了してMicrosoft
Excelへ戻る])
7.Alt+F8(メニュー[ツール]-[マクロ]-[マクロ])
8.実行したいマクロ名(この場合、DeleteBlankRows)を選択
9.[実行]ボタンをクリック
特定列が未入力の場合その行を削除
【問題】
マクロで、C列D列のどちらにもデータ、数式、コメントが入っていない行を削除するにはどうしたら良いでしょうか?
【回答】
Sub
DeleteBlankRows2()
Application.ScreenUpdating = false
On Error
Resume Next
With Columns("C:D")
.SpecialCells(xlCellTypeConstants).EntireRow.Hidden = true
.SpecialCells(xlCellTypeFormulas).EntireRow.Hidden = true
.SpecialCells(xlCellTypeComments).EntireRow.Hidden = true
.SpecialCells(xlCellTypeVisible).EntireRow.Delete
.EntireRow.Hidden =
False
End With
Application.ScreenUpdating = true
End
Sub
【解説】
前回のコードの With Cells のところを With Columns("C:D") に変更しただけです。
「A列のセルにデータ、数式、コメントが入っていない行を削除」という場合には、
With Columns("C:D") のところを
With Columns("A")
または
With
Columns(1)
のようにします。
行の削除
【問題】
マクロで、A列に 2 が入力されていたらその行を削除するにはどうしたら良いでしょうか?
Data1 Data2 Data3
3 2 7
1 5
1
2 2 1 この行削除
2 6 3 この行削除
5 9 6
2 0 8 この行削除
【回答】
Sub
Test()
Const intCriteria As Integer = 2
With Cells(2,
1).CurrentRegion
On Error GoTo errhandler
.AutoFilter Field:=1,
Criteria1:=intCriteria
.Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
ActiveSheet.AutoFilterMode = false
Exit Sub
errhandler:
ActiveSheet.AutoFilterMode = false
MsgBox intCriteria &
"はありません。"
End
Sub
【解説】
上記マクロは以下のような流れになっています。
1.メニュー[データ]-[フィルタ]-[オートフィルタ]
2.A列のオートフィルタ矢印をクリックして、
2 を選択
3.列見出しを除く可視セルの行を削除
4.オートフィルタを解除
A列に 2 が入力されているセルがなければ、「2はありません。」というメッセージが表示されます。
For〜Nextでしたら、以下のような感じでしょうか。
Sub
Test2()
Dim lngRow As Long
Dim lngCount As Long
lngRow =
Cells(Rows.Count, 1).End(xlUp).Row
For lngCount = lngrow to 2 step
-1
If Cells(lngCount, 1).Value = 2 then rows(lngcount).delete
Next
End Sub
文字の色が赤のセルをイタリックに
【問題】
シート内に文字の色が赤に設定されているセルがいくつかあります。
そのセルの書式をイタリック(斜体)に設定するにはどうしたら良いでしょうか?
マクロで実現します。
【回答】
Sub
test()
Dim c As Range
Application.ScreenUpdating =
False
For Each c In ActiveSheet.UsedRange
With c.Font
If .Color = vbred then .italic = true
End With
Next
Application.ScreenUpdating = true
End
Sub
【解説】
色の定数には以下があります。
vbBlack 黒
vbRed
赤
vbGreen 緑
vbYellow 黄
vbBlue 青
vbMagenta
マゼンタ
vbCyan シアン
vbWhite 白
文字の色が赤の場合、その文字をイタリックに
【問題】
シート内にセル内の一部の文字の色が赤に設定されているセルがいくつかあります。
その赤字の文字の書式だけをイタリック(斜体)に設定するにはどうしたら良いでしょうか?
マクロで実現します。
【回答】
Sub
test2()
Dim c As Range
Dim i As Integer
Application.ScreenUpdating = false
For Each c In
ActiveSheet.UsedRange
For i = 1 to c.characters.count
With
c.Characters(i, 1).Font
If .Color = vbred then .italic =
True
End With
Next
Next
Application.ScreenUpdating = true
End
Sub
【解説】
ScreenUpdatingプロパティの値をFalseにすることで画面を更新しないようにします。これでマクロの実行速度が速くなります。
マクロ終了後、ScreenUpdatingプロパティの値をTrueに戻します。
イタリックではなく、太字にするには、 .Italic = true のところを .bold
= True とします|
複数の非表示のシートを一度に再表示
【問題】
ブック内に20前後のシートがあり、その内10シートを非表示にしています。
マクロで非表示になっているシートを全部再表示するには、どうしたら良いでしょうか?
【回答】
Sub
test()
Dim Sh As Object
Application.ScreenUpdating =
False
For Each Sh In Sheets
Sh.Visible = true
Next
Application.ScreenUpdating = true
End
Sub
【解説】
複数のシートを非表示にするには、以下の手順です。
1.Ctrlキーを押しながら非表示にしたいシートのシート見出しをクリックして複数シートを選択
2.メニュー[書式]-[シート]-[表示しない]
非表示になっているシートを再表示するには、以下の手順です。
1.メニュー[書式]-[シート]-[再表示]
2.再表示させたいシートを選択
3.Enter
回答で示したコードはグラフシートも対象にしています。
ワークシートだけを対象にする場合には以下のようになります。
Sub
test2()
Dim Sh As Worksheet
Application.ScreenUpdating =
False
For Each Sh In Worksheets
Sh.Visible = true
Next
Application.ScreenUpdating = true
End Sub
シート一覧の作成
【問題】
ブック内のシート名を一覧表示するにはどうすれば良いでしょうか?
【回答】
Sub
test()
Dim i As Integer
For i = 1 to sheets.count
ActiveCell.Offset(i - 1).Value = sheets(i).name
Next
ActiveCell.EntireColumn.AutoFit
End
Sub
【解説】
回答で示したコードはグラフシートも対象にしています。
ワークシートだけを対象にする場合には以下のようになります。
Sub
test2()
Dim i As Integer
For i = 1 to worksheets.count
ActiveCell.Offset(i - 1).Value = worksheets(i).name
Next
ActiveCell.EntireColumn.AutoFit
End Sub
セル内の一部の文字列を抽出
【問題】
セル内の "『" と "』" で挟まれた文字列をマクロを使って他のセルに書き出すにはどうしたら良いでしょうか?
例えば、セルA1に、
あいうえお『かき』くけこ
が入力されているとします。。
これを、
"『" と "』" で挟まれた文字列 "か" のみ抽出し、セルB1に、
かき
と表示させたいのです。
※ "『" と
"』"は、セル内にそれぞれ一つずつしか存在しません。
※ "『" と "』"の位置は固定されていません。何文字目か不明確です。
※ "『" と "』"に挟まれた文字数は一定ではありません。何も入っていないこともありますし、1文字以上入っていることもあります。
【回答】
範囲を選択して、以下のマクロを実行すると右隣のセルに"『" と
"』" で挟まれた文字列を抽出します。
Sub test()
Const Chr1 As String = "『"
Const Chr2 As String = "』"
Dim c As Range
Dim Srch As
String
Dim Btwn As String
For Each c In Selection
Srch =
c.Value & Chr1 & Chr2
Btwn = mid(srch, instr(srch, chr1) + 1,
_
InStr(Srch, Chr2) - InStr(Srch, Chr1) - 1)
c.Offset(, 1).Value =
Btwn
Next
End
Sub
【解説】
ワークシート関数だと、
=MID(A1,FIND("『",A1&"『』")+1,FIND("』",A1&"『』")-FIND("『",A1&"『』")-1)
といった感じになります。
セルに入力した数値で範囲選択
【問題】
セルA1に入力した任意の数だけ2行目以下の行を選択するにはどうしたら良いでしょうか?
例えばセルA1に
3 と入力したら、A2:A4を選択するようにしたいのです。
【回答】
Private Sub
Worksheet_Change(ByVal Target As Range)
Dim lngRows As Long
lngRows =
Cells(1, 1).Value
If Target.Address <> "$A$1" Then Exit Sub
If lngRows < 1 Or lngRows > Rows.Count - 1 Then Exit Sub
Cells(2,
1).Resize(lngRows).Select
End
Sub
【解説】
シートタブ上で右クリック-[コードの表示]で表示されるコードウィンドウに上記マクロを入力します。
ハイパーリンクをURL表示に
【問題】
セルに会社名を表記し、ハイパーリンクでURLを入力してあります。
それをURL表記に変更したいのですが、一件ずつやる方法ではなく、一度に変更する方法はないでしょうか?
【回答】
Sub
test()
Dim c As Range
For Each c In ActiveSheet.UsedRange
If
c.Hyperlinks.Count = 1 then
c.Value = c.hyperlinks(1).address
End
If
Next
End
Sub
【解説】
上記マクロを実行するには以下の手順です。
1.Alt+F11(メニュー[ツール]−[マクロ]−[VBE])
2.メニュー[挿入]-[標準モジュール]
3.上記マクロコードをコピーして、コードウィンドウ上でCtrl+V
(貼り付け)
4.Alt+Q(VBEを終了)
→ワークシートに戻る
5.Alt+F8(メニュー[ツール]-[マクロ]-[マクロ])
6.
test を選択して[実行]ボタンをクリック
数値を文字に置換
【問題】
シート内に1〜6までの数字が複数あり、この数字と一致した場合、A、B、C、D、E、Fにそれぞれ置き換えたいのですがどうすれば良いでしょうか?
マクロで実現します。
【回答】
Sub
Test()
Dim i As Integer
For i = 1 to 6
Cells.Replace
What:=i, replacement:=Chr(64 + i)
Next
End
Sub
【解説】
Ctrl+H (メニュー[編集]-[置換])で[検索する文字列]に 数字 を、[置換後の文字列]に
対応するアルファベット を入力、これを6回繰り返すことを上記マクロは実行しています。
アルファベット A のコード番号は 65 、Bのコード番号は66 ・・・とコード番号は1ずつ増えていきます。そこで、[置換後の文字列]として、Chr(64
+ i) としているわけです。
1を加算してコピー
【問題】
たとえばD1:D18に数値が入っています。
これに 1 を 加算した数値をB3:B20へコピーするにはどうしたら良いでしょうか?
マクロで実現します。
【回答】
Sub
test()
With Range("B3:B20")
.Formula = "=D1+1"
.Copy
.PasteSpecial Paste:=xlValues
End With
Application.CutCopyMode =
False
End
Sub
【解説】
上記マクロは以下を実行しています。
1.B3:B20を選択
→セルB3がアクティブでB3:B20を選択している状態
2.=D1+1
をCtrl+Enterで入力
3.Ctrl+C
(コピー)
4.メニュー[編集]-[形式を選択して貼り付け]
5.[値]にチェックしてEnter
複数セルの文字列を一つにまとめるには
【問題】
A2:A100に文字列が入っています。
例:あ、い、う、え、お、か、き、く、、、、100
セルA1に、それぞれの文字列の間に「・」を入れて、それらをまとめた
あ・い・う・え・お・、、、、・99・100
を表示させたいのですが、どうすれば良いでしょうか?
マクロで実現します。
【回答】
Sub
Moji_Chain2()
Dim MojiChain As String
Dim c As Range
For
Each c In Range("A2:A100")
If c.Value <> "" Then MojiChain =
MojiChain & c.Value & "・"
Next
Range("A1").Value =
Left(MojiChain, Len(MojiChain) - 1)
End
Sub
【解説】
ワークシート関数だったら、以下のような感じでしょうか?
=A2&"・"&A3&"・"&A4&"・"&A5
これが
&"・"&A100 まで続きます。長いですね ^^;
相対参照と絶対参照を混合して使う
【問題】
マクロで複数のセルに式を入力するには、以下のようなコードを使います。
Sub
test()
Range("B1:B10").Formula = "=C1+D1"
End Sub
これで、
セルB1には
=C1+D1
セルB2には
=C2+D2
のように数式が入力されます。
数式内に相対参照と絶対参照を混合して使うにはどういうコードを使えば良いでしょうか?
B1の内容=C1の内容+D1の内容*A1の内容
B2の内容=C2の内容+D2の内容*A1の内容
B3の内容=C3の内容+D3の内容*A1の内容
・
・
Bnの内容=Cnの内容+Dnの内容*A1の内容
といったことをしたいのです。
(A1は普遍で常に参照しています)
【回答】
Sub
test()
Range("B1:B10").Formula = "=C1+D1*$A$1"
End
Sub
【解説】
数式ではなく値にということでしたら、以下はいかがでしょう?
Sub test2()
With Range("B1:B10")
.Formula = "=C1+D1*$A$1"
.Copy
.PasteSpecial Paste:=xlValues
End With
Application.CutCopyMode =
False
End Sub
ロックしていないセルデータの削除
【問題】
ロックしていないセルのデータだけを削除したいのですが、どうすれば良いでしょうか?
マクロで実現します。
【回答】
Sub
test()
Dim c As Range
For Each c In ActiveSheet.UsedRange
If Not (c.Locked) Then c.ClearContents
Next
End
Sub
【解説】
セルのロック、シートの保護については以下のページをご覧ください。
【エクセル技道場】−シート−シートの保護
http://www2.odn.ne.jp/excel/waza/sheet.html#SEC9
ロックしていないセルデータの削除(結合セル)
【問題】
ロックしていないセルのデータだけを削除したいのですが、どうすれば良いでしょうか?
一部、結合セルがあります。
【回答】
Sub
test2()
Dim c As Range
With ActiveSheet
.Unprotect
For Each c In .UsedRange
If Not (c.Locked) Then
c.MergeArea.ClearContents
Next
.Protect
UserInterfaceOnly:=True
End With
End
Sub
【解説】
・シートの保護を解除
・処理(ロックしていないセルのデータだけを削除)
・シートの保護
を実行しています。
[記録終了]ツールバーの再表示
【問題】
メニュー[ツール]-[マクロ]-[新しいマクロの記録]で[OK]ボタンをクリックすると、[記録終了]ボタンと[相対参照]ボタンがある[記録終了]ツールバーが表示されますが、ある時からこの[記録終了]ツールバーが表示されなくなりました。
どうしたら、[記録終了]ツールバーを表示させるようにできるでしょうか?
【回答】
1.メニュー[ツール]-[マクロ]-[新しいマクロの記録]
2.[OK]ボタンをクリック
3.メニューバー/ツールバー上のどこかで右クリック
4.[記録終了]をクリック
【解説】
一度マクロの自動記録状態にしてから、ツールバー右クリックで[記録終了]が選択できるようになります。
相対参照でマクロの記録
【問題】
例えば、右隣のセルを選択するというマクロを作成したいのですが、
1.セルA1を選択
2.メニュー[ツール]-[マクロ]-[新しいマクロの記録]
3.[OK]ボタンをクリック
4.セルB1を選択
5.[記録終了]ボタンをクリック
という手順でマクロの自動記録をして、セルC1を選択してからAlt+F8で上記マクロを実行すると、セルB1が選択されます。
これをセルC1を選択してマクロを実行するとセルD1が選択、セルA2を選択してマクロを実行するとセルB2が選択されるように、マクロの自動記録をするにはどうしたら良いでしょうか?
【回答】
1.メニュー[ツール]-[マクロ]-[新しいマクロの記録]
2.[OK]ボタンをクリック
3.[記録終了]ツールバーの[相対参照]ボタンをクリック
4.記録したい操作を実行
5.[記録終了]ボタンをクリック
【解説】
[相対参照]ボタンをクリックしないで[新しいマクロの記録]とすると、
Sub
Macro1()
Range("B1").Select
End
Sub
のようなコードが作成されます。
[相対参照]ボタンをクリックして[新しいマクロの記録]とすると、
Sub
Macro2()
ActiveCell.Offset(0, 1).Range("A1").Select
End
Sub
のようなコードが作成されます。
通常は、.Range("A1")の部分は不要なので、自分でコードを作成する場合には、
Sub
test()
ActiveCell.Offset(0, 1).Select
End Sub
のようなコードになります。
相対参照から絶対参照に
【問題】
数式を絶対参照に一括で変換をする方法はあるでしょうか?
例えば =A1+B1 といった数式を =$A$1+$B$1 へとしたいのですが‖一箇所のホルだけではなく‖複数のホルの数式の絶対子照への変換を一括で行う方法はないでしょうか”
【回答】
Sub
test()
Dim c As Range
For Each c In Selection
If
c.HasFormula Then
c.Formula =
Application.ConvertFormula(Formula:=c.Formula, _
FromReferenceStyle:=xlA1, toabsolute:=xlAbsolute)
End If
Next
End
Sub
【解説】
ToAbsolute:= のところで、変換後の参照の種類を指定します。
xlAbsolute
行列とも絶対参照に
xlAbsRowRelColumn 行だけ絶対参照に
xlRelRowAbsColumn 列だけ絶対参照に
xlRelative
行列とも相対参照に
以下のページもご参考になるのでは?
[XL97] 数式の特定セルへの参照形式を変更する方法
http://support.microsoft.com/default.aspx?scid=kb;ja;408067&Product=excelJPN
数式が入力されているセルに色をつける
【問題】
シート内で数式が入力されているセルだけに色を付けるにはどうしたら良いでしょうか?
【回答】
1.Alt+F11
2.メニュー[挿入]-[標準モジュール]
3.コードウィンドウに以下を入力
Sub
test()
With Cells
.Interior.ColorIndex = xlnone
On Error
Resume Next
.SpecialCells(xlCellTypeFormulas).Interior.Color =
vbYellow
End With
End
Sub
4.Alt+F4(VBEを閉じる)
5.Alt+F8(メニュー[ツール]-[マクロ]-[マクロ]
6.マクロ test
を選択して[実行]ボタンをクリック
【解説】
上記マクロは以下を実行しています。
1.Ctrl+A(全セルを選択)
2.Ctrl+1
(メニュー[書式]-[セル])
3.[パターン]タブで 色なし をクリック
4.[OK]ボタンをクリック
5.Ctrl+G
(メニュー[編集]-[ジャンプ])
6.[セル選択]ボタンをクリック
7.[数式]にチェック
8.Enter
9.Ctrl+1
(メニュー[書式]-[セル])
10.[パターン]タブで 黄色 をクリック
図形の削除
【問題】
マクロでシートに貼り付けた図形(複数)を一度に全部削除させたいのですが、どうすればよいでしょうか?
【回答】
Sub
Test2()
ActiveSheet.DrawingObjects.Delete
End
Sub
【解説】
一般操作だと以下の手順になります。
1.Ctrl+G
(メニュー[編集]-[ジャンプ])
2.[セル選択]ボタンをクリック
3.[オブジェクト]にチェックを入れる
4.Enter
5.Deleteキー
数値や文字列だけをクリア
【問題】
マクロで、計算式が入っているセルはそのままにしておいて、数値や文字列などが入力されてるセルのデータをクリアするにはどうしたら良いでしょうか?
【回答】
Sub Test()
On Error Resume Next
Cells.SpecialCells(xlCellTypeConstants).ClearContents
End
Sub
【解説】
一般操作だと以下の手順になります。
1.Ctrl+G
(メニュー[編集]-[ジャンプ])
2.[セル選択]ボタンをクリック
3.[定数]にチェックを入れる
4.Enter
5.Deleteキー
日付の桁を揃える
【問題】
年月日を入力した時に前ゼロをスペースにし、桁を揃えたいのですがうまく出来ません。
平成9年9月14日
昭和60年10月4日
のようなデータを以下のように、月と日の位置をあわせたいのですが、どうすればよいでしょうか?
平成 9年 9月14日
昭和60年10月 4日
【回答】
○関数で桁を揃える。
A列にデータが入っているとします。
B列のフォントを MS ゴシック などの等幅フォントにします。
1.B列を選択
2.Ctrl+1 (メニュー[書式]-[セル])
3.[フォント]タブで MS ゴシック を選択
4.[OK]ボタンをクリック
セルB1に以下の数式を入力します。
=TEXT(A1,"ggg")&
RIGHT(TEXT(A1," e年"),3)&
TEXT(MONTH(A1),"??月")&
TEXT(DAY(A1),"??日")
○そのセルの表示形式を変更して年月日の桁を揃える。
1.セルを選択
2.Ctrl+1 (メニュー[書式]-[セル])
3.[表示形式]タブの[分類]を[ユーザー定義]に
4.[種類]に
年1桁、月1桁、日1桁 → ggg_1e"年"_1m"月"_1d"日"
年1桁、月1桁、日2桁 → ggg_1e"年"_1m"月"d"日"
年1桁、月2桁、日1桁 → ggg_1e"年"m"月"_1d"日"
年1桁、月2桁、日2桁 → ggg_1e"年"m"月"d"日"
年2桁、月1桁、日1桁 → ggge"年"_1m"月"_1d"日"
年2桁、月1桁、日2桁 → ggge"年"_1m"月"d"日"
年2桁、月2桁、日1桁 → ggge"年"m"月"_1d"日"
年2桁、月2桁、日2桁 → ggge"年"m"月"d"日"
を入力
5.[OK]ボタンをクリック
○マクロでA列に日付が入力されると年月日の桁を揃える。
シートタブ上で右クリック-[コードの表示]で表示されるコードウィンドウに下記マクロを入力。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tmp As Variant
With Target
If .Column <> 1 Then Exit Sub 'A列のみを対象
tmp = .value
If IsDate(tmp) Then
.NumberFormatLocal = "ggg" & _
IIf(Format(tmp, "e") > 9, "e年", "_0e年") & _
IIf(Month(tmp) > 9, "m月", "_1m月") & _
IIf(Day(tmp) > 9, "d日", "_1d日")
End If
End With
End Sub
○マクロで選択した範囲の日付の年月日の桁を揃える。
Sub test()
Dim c As Range
Dim tmp As Variant
Application.ScreenUpdating = false
For Each c In Intersect(Selection, ActiveSheet.UsedRange)
tmp = c.value
If IsDate(tmp) Then
c.NumberFormatLocal = "ggg" & _
IIf(Format(tmp, "e") > 9, "e年", "_1e年") & _
IIf(Month(tmp) > 9, "m月", "_1m月") & _
IIf(Day(tmp) > 9, "d日", "_1d日")
End If
Next
Application.ScreenUpdating = true
End Sub
1.上記マクロの Sub から End Sub までを選択してCtrl+C (コピー)
2.Alt+F11(メニュー[ツール]-[マクロ]-[VBE])
→VBE(Visual Basic Editor)が開く
3.プロジェクトエクスプローラで、VBAProject(<当該ブック名>)を選択
4.メニュー[挿入]-[標準モジュール]
5.Ctrl+V (貼り付け)
6.Alt+F4(メニュー[ファイル]-[終了してMicrosoft Excelへ戻る])
7.桁を揃えたいセル範囲を選択
8.Alt+F8(メニュー[ツール]-[マクロ]-[マクロ])
9.実行したいマクロ名(この場合、test)を選択
10.[実行]ボタンをクリック