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

以下コードは、参照渡し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

A 回答 (2件)

こんばんは



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


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

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

原則は参照レベルなんですね

また、本事例では、変数は1つしか利用しないので
2つ渡す意味はないですね

ご指導ありがとうございます

お礼日時:2025/02/22 08:36

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

    • good
    • 1
この回答へのお礼

回答ありがとうございます

当方、vbaだけしている素人なので、聞きました
原則は、参照渡しなのですね

ただ、絶対ではなく、ケースBYケースで、モジュールレベル
変数も使ってOKなんですね

お礼日時:2025/02/22 08:35

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A