Excel でワークシートに任意のヘッダーを設定する。
この記事は自分用の覚書です。
(Windows 8.1 Pro 64ビット + Excel2013 Home & Business)
K.M さん。
ワークシートに任意のヘッダーを設定するための VBA のコードです。
私にできる範囲でつくってみました。
最初にシート名を取得して、それらを見ながら、どのシートにはどんなヘッダーを付けるかを検討できるようにしてみました。
作業の流れは次のようです。
- シート「ワークシート名取得」を一番右端に作っておく。(シート名は変えない。)
- マクロの「ワークシート名取得」を実行。
- シート「ワークシート名取得」のA列にワークシート名が入るので、各シートのヘッダーに入れたい文字列などをB列に入力。
- 同じくマクロから「ヘッダーへの文字列の挿入」を選んで実行。
- B列に入れた内容が各ワークシートのヘッダーとして入る。
※入れたヘッダーを消したければ、B列に入れた値を削除してセルを空欄にしたら手順4をもう一度実行。
まず最初に、ヘッダーを入れたいブックを拡張子.xlsm で保存してから、シート「ワークシート名取得」を一番右端につくっておいてください。(シート名は変えないで。)
シートをつくったら、ワークシート名を取得するコードを実行してください。
ワークシートごとに任意のヘッダーを指定するということでしたので、ワークシート名を取得することから始めてみました。
そうやって、ブックのなかにいまあるワークシート名をすべて取得したら、ワークシートごとにヘッダーに入れたい値を手入力してください。
それから、いま手入力した値をヘッダーへ挿入するコードを実行するという流れにしてみました。
ヘッダーは「左側」に入れるようにしました。
「開発」タブの Visual Basic をクリックして、VBE (Visual Basic Edtor) を起動したら、標準モジュールを挿入して、以下のコードをコピー貼り付けしてください。(Sub から End Sub まで。)
■ワークシート名を取得するコード
Sub ワークシート名取得()
Dim i As Long
Dim Sheet_Name As Variant
Worksheets("ワークシート名取得").Select
For i = 1 To Worksheets.Count - 1
Sheet_Name = Worksheets(i).Name
Cells(i + 1, "A").Value = Sheet_Name
Next i
MsgBox ("ワークシート名の取得ができました。")
'
'
'このプロシージャーを使う前には、シート「ワークシート名取得」を一番右端に作っておく。シート名は変えない。
'
'ブックのなかの左端のワークシートを 1 として右端のワークシートまでの枚数を
'Worksheets.Count で数えている。
'-1 しているのは、シート「ワークシート名取得」の一つ手前までを指定するため。
'
'変数 Sheet_Name にワークシート名を代入する。
'さらに、その変数 Sheet_Name をA列のセルに入れていく。
'変数 Sheet_Name の型を Variant にしているのは、ワークシート名が文字列でも数字だけでも何であっても変数に格納できるように。
'
'ワークシートの1行目に列見出しが入る場合を想定して、
'A列で、一つずつ下にセルをずらしてワークシート名を入れている。
'Cells(i + 1, "A").Value
'のコードで、変数 i に 1 を足している。
'Cells(行,列)なので、変数 i が 1 のときは、Cells(2, "A")となってセルA2を、
'変数 i が 2 のときはさらに一つ下の A3 を、変数 Sheet_Name の代入先に指定したことになる。
'
'ワークシート名の取得が終わったら、その旨のメッセージを表示する。
'
End Sub
■ヘッダーへ文字列を挿入するコード
先に「ワークシート名取得」のコードを実行しておく。次に、ヘッダーに入れたい文字列をシート「ワークシート名取得」のB列に入力しておく。
Sub ヘッダーへの文字列の挿入()
Dim i As Long, j As Long
Dim Flag As Long
Worksheets("ワークシート名取得").Select
For i = 1 To Worksheets.Count - 1
For j = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Worksheets(i).Name = Cells(j, "A").Value Then
Flag = 1
Worksheets(i).PageSetup.LeftHeader = Cells(j, "B").Value
Cells(j, "C") = "ヘッダー設定済み"
End If
Next j
If Flag = 0 Then
MsgBox ("ワークシート名がありません")
End If
Next i
Worksheets("ワークシート名取得").Select
MsgBox ("ヘッダーの設定が終わりました。" & vbCrLf & "C列のセルが空白のものはA列のワークシート名が間違っています。 ")
'
'
'シート「ワークシート名取得」を選択。
'
'左端のワークシートを 1 として右端のワークシートまでの枚数を
'Worksheets.Count で数えている。
'それを変数iに代入。
'-1しているのは、シート「ワークシート名取得」の一つ手前までを指定するため。
'(シート「ワークシート名取得」が一番右端にある場合)
'
'ワークシート名とA列に入った文字列が同じの場合、変数 Flag に 1 を代入する。
'ワークシート名を取得した後でワークシート名をうっかり変更すると、
'A列の値とワークシート名が異なっていることになる。
'そういう場合を想定して、A列の値とワークシート名を比較して異なっていないかを確認している。
'ワークシートのヘッダーの左側 ( LeftHeader ) にB列の値を入れていく。
'Cells(j, "C") = "ヘッダー設定済み"
'の式で、C列に「ヘッダー設定済み」という文字列を入れて、
'ヘッダーの記入が済んだことがわかるようにしている。
'
'変数 Flag が 0 の場合、メッセージボックスを表示する。
'変数 Flag が 0 であるということは、A列の値と実際のワークシート名が合っていない。
' "ワークシート名がありません" のメッセージが表示されたら、A列の値とワークシート名を確認する。
'
'シート「ワークシート名取得」を選択。
'メッセージボックスを表示する。
'
'
End Sub
| 固定リンク
コメント