« 頑張ってくれ! 日立製作所! | トップページ | Excel で2つのシートでセルの値を比較して検算する。 »

Excel でワークシートのヘッダーやフッターを一括で置換する。

この記事は自分用の覚書です。
(Windows 10 Pro 64ビット + Excel2016 Office365 Business サブスクリプション  バージョン1804(ビルド9226.2156)

■ブック内の全てのワークシートのヘッダーやフッターを、一括で全く同じ(表記も、入れる位置も全部同じ)にする。

VBA を使わないで可能。

1.シート名の上で右クリックして「すべてのシートを選択」をクリック
2.「ページレイアウト」タブからヘッダーとフッターを任意に設定

これで、全てのワークシートのヘッダーやフッターが同じになる。

■VBAで処理する。

ワークシート関数の SUBSTITUE 関数を使うプロシージャーの例

Sub ヘッダーとフッターの置換_1()
'ワークシート関数の SUBSTITUTE 関数を呼び出して使う。
    Dim i As Long
    Dim 置換前 As String, 置換後 As String '■1

    置換前 = Application.InputBox(Prompt:="置換前の文字列", Default:="置換前の文字列を入力", Type:=2) '■2
    If 置換前 = "False" Then Exit Sub '■3

    置換後 = Application.InputBox(Prompt:="置換後の文字列", Default:="置換後の文字列を入力", Type:=2) '■2
    If 置換後 = "False" Then Exit Sub '■3

    For i = 1 To Worksheets.Count '■4
        With Worksheets(i).PageSetup
            '■5
            If .LeftHeader <> "" Then .LeftHeader = WorksheetFunction.Substitute(.LeftHeader, 置換前, 置換後)

            If .CenterHeader <> "" Then .CenterHeader = WorksheetFunction.Substitute(.CenterHeader, 置換前, 置換後)

            If .RightHeader <> "" Then .RightHeader = WorksheetFunction.Substitute(.RightHeader, 置換前, 置換後)

            If .LeftFooter <> "" Then .LeftFooter = WorksheetFunction.Substitute(.LeftFooter, 置換前, 置換後)

            If .CenterFooter <> "" Then .CenterFooter = WorksheetFunction.Substitute(.CenterFooter, 置換前, 置換後)

            If .RightFooter <> "" Then .RightFooter = WorksheetFunction.Substitute(.RightFooter, 置換前, 置換後)

        End With
    Next
'
'■1
'変数「置換前」と「置換後」を String(文字列型)として宣言。
'
'■2
'Excel VBAで使える InputBox には、InputBoxメソッドとInpuBox関数がある。
'ここでは、ApplicationオブジェクトのInputBoxメソッドを使っている。
'InputBoxメソッドでは引数Typeを使える。InputBox関数では引数Typeを指定できない。
'Type:=2 の指定で、文字列のみを受け取り、返すことができる。
'ヘッダーやフッターの値を置換するので、置換の対象は常に文字列。
'(そういう意味で、変数の宣言でも、変数「置換前」と「置換後」を文字列型(Strings)として宣言している。)
'
'InputBox で受け取る値を使って数学的な計算をするわけではないので、Type:=2 の指定で文字列を受け取る指定をしておけば、
' 第4期全体会合 といったような、文字と数字が混ざっている値でも受け取れるし、
' 2018 といった純粋な数字の場合でも、どちらでも受け取れる。
'
'■3
'InputBoxメソッドの「キャンセル」がクリックされたら、このプロシージャ―を抜ける。
'InputBoxメソッドは、「キャンセル」がクリックされたら、 False(論理値) を返す。
'文字列を受け取れるように、引数Typeに「2」を指定しているので、InputBoxメソッドが返してくる False も文字列型になる。
'そこで、IFステートメントでは、FALSE をダブルコーテーションで囲んで、文字列として扱っている。
'このコードで、False をダブルコーテーションで囲っていなくて、InputoBoxメソッドの入力欄に文字列(純粋な数字ではないもの)を入力すると、
'「型が一致しません」というエラーになる。
'
'■4
'Worksheets.Count で、ブック内にワークシートが何枚あるかを取得。
'ワークシートが何枚あっても、左端から右端まで全ワークシートを対象に処理を行うために使う。
'
'■5
'ワークシート関数の SUBSTITUE 関数を呼び出して使っている。
'If ステートメントで、ヘッダー(左・中央・右)やフッター(左・中央・右)に何か入っていれば、(空欄でなければ)置換を行うようにしている。
'ヘッダーやフッターに何も入っていなければ、(空欄なら)置換の処理を始めない。
'
'同様の処理を行うコードで、With ステートメントだけを使った下記のような書き方がある。
'
'For i = 1 To Worksheets.Count
'   With Worksheets(i).PageSetup
'       .LeftHeader = WorksheetFunction.Substitute(.LeftHeader, 置換前, 置換後)
'       .CenterHeader = WorksheetFunction.Substitute(.CenterHeader, 置換前, 置換後)
'       .RightHeader = WorksheetFunction.Substitute(.RightHeader, 置換前, 置換後)
'       .LeftFooter = WorksheetFunction.Substitute(.LeftFooter, 置換前, 置換後)
'       .CenterFooter = WorksheetFunction.Substitute(.CenterFooter, 置換前, 置換後)
'       .RightFooter = WorksheetFunction.Substitute(.RightFooter, 置換前, 置換後)
'   End With
'Next
'
'上記のコードの場合、ヘッダー(左・中央・右)とフッター(左・中央・右)に
'何か値が入っていても、入ってなくても、一つのシートにつき6か所で置換を行おうとする。
'値が入っていない場合、しなくてもよい作業をしていることになる。
'
'If .LeftHeader <> "" Then .LeftHeader = WorksheetFunction.Substitute(.LeftHeader, 置換前, 置換後)
'
'のように書くことで、左・中央・右のヘッダーやフッターに何か入っている(空欄ではない)場合にだけ置換を始める。
'これによって、処理にかかる時間を With ステートメントだけを使うより短くしている。
'
End Sub


全てのワークシート関数を呼び出せるわけではない。

|

« 頑張ってくれ! 日立製作所! | トップページ | Excel で2つのシートでセルの値を比較して検算する。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Excel でワークシートのヘッダーやフッターを一括で置換する。:

« 頑張ってくれ! 日立製作所! | トップページ | Excel で2つのシートでセルの値を比較して検算する。 »