●ExcelVBAで、プロシージャを分割して処理するとき、どのようにオブジェクトを定義するのが一般的なのでしょうか?
実務で他の人が書いたコードを見たことがないので、読みやすく書き直しやすいコードのために参考にしたいです。
以下の3つを今まで使ってきたのですが、どうも自身が持てません。よろしくお願いします。
①プロシージャごとに変数を宣言する
(宣言がモジュール内で重複するのでコード全体が冗長になる)
Sub main ()
Call a
Call b
End Sub
Sub a ()
Dim ws As Worksheet
set ws=Workbooks("sample.xlsx").Sheets(1)
ws.Cells(1,1)="処理1"
End Sub
Sub b ()
Dim ws As Worksheet
set ws=Workbooks("sample.xlsx").Sheets(1)
ws.Cells(2,1)="処理2"
End Sub
②Functionを使う
(F8で1行ずつ実行したときに上下に移動しまくるのでデバッグのとき混乱する)
Function ws () As Worksheet
set ws=Workbooks("sample.xlsx").sheets(1)
End Function
Sub main ()
Call a
Call b
End Sub
Sub a ()
ws.Cells(1,1)="処理1"
End Sub
Sub b ()
ws.Cells(2,1)="処理2"
③プロシージャに引数を入れてプロシージャ間で変数を受け渡す
(メインのプロシージャでCallしないプロシージャについてはそのプロシージャで再度宣言しなければいけない。例:Sub c)
Sub main ()
Dim ws As Worksheet
set ws=Workbooks("sample.xlsx").Sheets(1)
Call a (ws)
Call b (ws)
End Sub
Sub a (ws As Worksheet)
ws.Cells(1,1)="処理1"
End Sub
Sub b (ws As Worksheet)
ws.Cells(2,1)="処理2"
End Sub
Sub c ()
Dim ws As Worksheet
set ws=Workbooks("sample".xlsx).Sheets(1)
ws.Cells(3,1)="処理3"
End Sub
回答2件
あなたの回答
tips
プレビュー