▼同じコードを繰り返し書くこと
以下は『2-数式を数値に修正』で作成したVBAのコードです。
Sub 通し番号をつける()
Cells(2,1).Resize(100,1) = "=ROW(A2)-1" '2行目
Cells(2,1).Resize(100,1).Value = Cells(2,1).Resize(100,1).Value '3行目
End Sub
1つのマクロの中に、同じコード「Cells(2,1).Resize(100,1)」が3つも入っています。
このような同じコードの繰り返しは好ましくありません。
例えば「.Resize(100,1)」の部分は「たて100,よこ1に範囲を広げる」を意味しています。
生徒の人数が100人としているので、.Resizeの1つ目の引数が"100"です。
仮に転入生が入ってきて、1人増加する場合には、"100"を"101"に書き換えます。
Sub 通し番号をつける()
Cells(2,1).Resize(101,1) = "=ROW(A2)-1" '2行目
Cells(2,1).Resize(101,1).Value = Cells(2,1).Resize(101,1).Value '3行目
End Sub
しかし、このように同じコードが3つある場合には、3カ所で「100→101」の書き換えなければならないので、面倒です。
後々、書き換える必要が生じたときに、最低限の作業で済むように事前に対策をしておくことが望ましいです。
ですので、同じコードがある場合には、With構文を活用して1つにまとめることが多いです。
今回は『同じコードをまとめる』ことについて、解説します。
▼With構文を使って同じコードをまとめる
次のコードについて、同じコードの部分を1つにまとめます。
Sub 通し番号をつける()
Cells(2,1).Resize(100,1) = "=ROW(A2)-1" '2行目
Cells(2,1).Resize(100,1).Value = Cells(2,1).Resize(100,1).Value '3行目
End Sub
1-方針
これまで作成してきたファイルを開き、コードを編集していきます。
1-作業
- 【Alt,F11】でVBEを起動します。
- 【Windows,→】【Windows,←】で左右に並べて表示します。
1-結果
[Sheet1]と[VBE]が左右に並んで表示されます。
なお、VBEは最後に保存した状態になるので、Module1が表示されます。
画像
2-方針
コードを以下の手順で書き換えていきます。
2-作業(VBEにて)
まとめたいコード Cells(2,1).Resize(100,1) の直前に "With "を打つ
Sub 通し番号をつける()
With Cells(2,1).Resize(100,1) = "=ROW(A2)-1" '2行目
Cells(2,1).Resize(100,1).Value = Cells(2,1).Resize(100,1).Value '3行目
End Sub
Withの直後の Cells(2,1).Resize(100,1) の終わりで改行する
Sub 通し番号をつける()
With Cells(2,1).Resize(100,1) '2行目
= "=ROW(A2)-1" '3行目
Cells(2,1).Resize(100,1).Value = Cells(2,1).Resize(100,1).Value '4行目
End Sub
3行目の頭で[Tab]を押し字下げする
左辺にコード " .Value "を打つ ※.(ドット)を忘れずに
Sub 通し番号をつける()
With Cells(2,1).Resize(100,1) '2行目
.value = "=ROW(A2)-1" '3行目
Cells(2,1).Resize(100,1).Value = Cells(2,1).Resize(100,1).Value '4行目
End Sub
4行目で左辺のコード " Cells(2,1).Resize(100,1) " を削除する
※コード " .Value " は残しておく!
3行目と4行目の頭をそろえる
Sub 通し番号をつける()
With Cells(2,1).Resize(100,1) '2行目
.Value = "=ROW(A2)-1" '3行目
.Value = Cells(2,1).Resize(100,1).Value '4行目
End Sub
同様にして、右辺のコード " Cells(2,1).Resize(100,1) " を削除する
※コード " .Value " は残しておく!
Sub 通し番号をつける()
With Cells(2,1).Resize(100,1) '2行目
.Value = "=ROW(A2)-1" '3行目
.Value = .Value '4行目
End Sub
5行目をつくり、コード " end with " を打つ
2行目と5行目の頭をそろえる
Sub 通し番号をつける()
With Cells(2,1).Resize(100,1) '2行目
.Value = "=ROW(A2)-1" '3行目
.Value = .Value '4行目
end with '5行目
End Sub
2-結果
完成したコードは以下の通りです。
Sub 通し番号をつける()
With Cells(2,1).Resize(100,1) '2行目
.Value = "=ROW(A2)-1" '3行目
.Value = .Value '4行目
End With '5行目
End Sub
▼コードの解説
WithとEnd Withの間のみ有効
共通する.(ドット)の前が省略している
▼次回
今回はWith-End With構文を使ってコードをまとめる方法を解説しました。
With-End With構文を使ってコードをまとめることで得られる成果の1つとして次のことを挙げます。
「コードのコピペが簡単になる」
次回は「コードをコピペして増やす」ことについて解説します。