電子書籍の厳選無料作品が豊富!

以下コードは、参照渡しorモジュールレベル変数にて記述したコードです
どちらも、同じように動きます

●●●では、どちらが、一般的には使われるのでしょうか?●●●
時分は、モジュールレベル変数の方が 分かりやすいと思いました

【参照渡しコード】
Sub 別ブックへ転記()

Dim filpath1 As String

Dim wb1 As Workbook

Dim ws1 As Worksheet




filepath1 = ThisWorkbook.Worksheets("Sheet1").Cells(141, 1)

Set wb1 = Workbooks.Open(filepath1)

Set ws1 = wb1.Worksheets("Sheet1")



Call あいうえお(wb1, ws1)

End Sub
Sub あいうえお(ByRef a As Workbook, b As Worksheet)

b.Cells(1, 1) = "あいうえお"


End Sub

【モジュールレベル変数 コード】

Dim filpath1 As String

Dim wb1 As Workbook

Dim ws1 As Worksheet
Sub 別ブックへ転記()

filepath1 = ThisWorkbook.Worksheets("Sheet1").Cells(141, 1)

Set wb1 = Workbooks.Open(filepath1)

Set ws1 = wb1.Worksheets("Sheet1")

Dim buf As String

Call あいうえお

End Sub
Sub あいうえお()

ws1.Cells(1, 1) = "あいうえお"


End Sub

  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

A 回答 (2件)

こんばんは



以下の「アンチパターン」の5番目に書かれていますね。
https://qiita.com/k_maki/items/c40c0eab5af4984f0 …


ご提示の例について言えば、必要のないものも多いです。
ThisWorkbookはブック内共通なので、どこからも参照できる関係から、グローバル変数にする意味はあまりありません。

「Sub あいうえお」は二つの引数を取っていますが、実際に使用しているのは一つだけなので、二つ取る意味がありません。
仮に、両方を使うにしてもシートオブジェクトからブックの参照ができるので、シートオブジェクトだけを渡せば済むはずです。
    • good
    • 1

原則は参照渡しになりますが、今回のようなケースならモジュールレベル変数を使用する方法で良いと思います。

    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報