
以下コードは動くのですが、受けとりで動きます
【受取】
Sub あいうえお(wb1 As Workbook, ws1 As Worksheet)
【実行】
ws1.Cells(1, 1) = "あいうえお"
しかし
受取の変数をa、bに変えると、動かなくなります
参照渡しについて、ネットで調べると、ほとんどの事例が
受取時には変数の名前を変えています
ゆえに、受取時の変数の名前を変更しても動くとは思います
なぜ、受取時の変数の名前を変えて動かなくなるのでしょうか?
【参考、リンク】
http://officetanaka.net/excel/vba/tips/tips94.htm
【受取】
Sub あいうえお(a As Workbook, b As Worksheet)
【変数】
Workbook(マクロブック以外の別のブックが変数として格納)
Worksheet)(別シートが格納)
【コード】
Sub 別ブックへ転記()
Dim filepath1 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")
Dim buf As String
Call あいうえお(wb1, ws1)
End Sub
Sub あいうえお(wb1 As Workbook, ws1 As Worksheet)
ws1.Cells(1, 1) = "あいうえお"
End Sub
No.2ベストアンサー
- 回答日時:
> ちなみに、変数の名前を変更しないで、同じ変数名にて
> 受け取ってもいいのですか???
参照の話は置いといて。
関数の引数として受け取った変数は、関数の中のみ有効です。
関数の外に影響を与えないので、同じ変数でもOKです。
変数のスコープ、有効な範囲とかって考え方です。
webとかで
「vba 変数 スコープ」
「vb 変数 スコープ」
とかで解説記事探して読んでみるとか。
VBAより、プログラミングに突っ込んだ話なので、VBのキーワードで調べるのが良いかも。
ちゃんとした解説はMicrosoft Learnだけど、基本英文からの自動翻訳だし、用語とかも含めて分かりにくい。自分もよう読まん。
ぱっと見分かりやすそうな記事は探せなかった。
--
差し当たりの問題は、
Option Explicit
で解決すると思う。
というか、これ書いてないソースは信頼できないし、これ追記してエラーが出るようになるならそもそもダメだ。
No.1
- 回答日時:
> しかし
> 受取の変数をa、bに変えると、動かなくなります
Sub あいうえお(wb1 As Workbook, ws1 As Worksheet)
ws1.Cells(1, 1) = "あいうえお"
End Sub
↓
Sub あいうえお(a As Workbook, b As Worksheet)
ws1.Cells(1, 1) = "あいうえお"
End Sub
こうするってこと?
そりゃ、a, bを受け取った後、a, bに対して何もしないんだから、a, bや参照先の内容変わらないのが正しい動作。
関数の引数を変更したいのなら、
Sub あいうえお(a As Workbook, b As Worksheet)
a.Cells(1, 1) = "あいうえお" ' ←ws1でなくてaを処理する
End Sub
とすべき。
関数外部でグローバル変数としてaを使ってるとかだとややこしいけど。
--
VB、VBAではデフォルトだと変数を宣言しなくても使えるから、上の場合関数に渡されていないws1も「ああ、新しい変数のws1ね」って解釈されて、エラーにならずに処理される。
お気軽な仕様。
モジュールの先頭に、
Option Explicit
書くと、変数の宣言を強制してくれて、そういうのはエラー扱いしてくれる。
まさに、↓の記事で言う所の「間違い」してる。
Excel VBA 環境によるグラフィックス機能を活用したプログラミング入門 - 変数の宣言を強制する
https://katakago.sakura.ne.jp/pgm/vba/pgm01/expl …
| VBAでは、変数は宣言せずに使用することができます。しかし、変数名を宣言せずに使用すると間違いに気づきにくくなります。
以下、理解しました。ありがとうございます
ちなみに、変数の名前を変更しないで、同じ変数名にて
受け取ってもいいのですか???
NETで調べる、変数、受け渡しは全て違う名前に変数をしているので
変数を渡す 受け取る時は あえて、違う名前にするのが
お作法なのかなぁと思ってしまいます
【同じ変数の名前にて受け取る】
Sub あいうえお(wb1 As Workbook, ws1 As Worksheet)
>お返事ありがとうございますそりゃ、a, bを受け取った後、a, bに対して何>もしないんだから、a, bや参照先の内容変わらないのが正しい動作。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【マクロ】Call関数で呼び出した場合、共通の変数宣言は、省略できますか?
Excel(エクセル)
-
【マクロ】Withステートメント2つを簡略する為には?
Excel(エクセル)
-
Excel 関数での質問です
Excel(エクセル)
-
-
4
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
5
【マクロ】参照渡しとモジュールレベル変数 どっちが よく使うものですか?
Excel(エクセル)
-
6
日付がバラバラ
Excel(エクセル)
-
7
【マクロ】データ移動について代替案(コード)or助言を下さい
Excel(エクセル)
-
8
【マクロ】コードを少しでも、減らする為には
Excel(エクセル)
-
9
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
10
別のシートの指定列の最終行を返す関数の式を教えて下さい。
Excel(エクセル)
-
11
Excel関数の解決方法
Excel(エクセル)
-
12
Excelのデーターバーについて
Excel(エクセル)
-
13
【マクロ】Formulaプロパティにて、3行全てに、数式を入れるためには?
Excel(エクセル)
-
14
エクスプローラーで見ることはできますか
Excel(エクセル)
-
15
【マクロ】データ移動について代替案(コード)or助言を下さい
Excel(エクセル)
-
16
役所でもらった書類をエクセル化するには? 役所に申請する用紙があります。A4で表になっていて枠内に文
その他(Microsoft Office)
-
17
システムファイルについて
Excel(エクセル)
-
18
Excelの関数を教えて下さい。
Excel(エクセル)
-
19
VBAの「To」という語句について
Visual Basic(VBA)
-
20
Excelでの文字入力について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
表計算ソフトでの様式の呼称
-
vba テキストボックスとリフト...
-
エクセルのVBAで集計をしたい
-
【画像あり】【関数】指定した...
-
【マクロ】数式を入力したい。...
-
【マクロ】元データと同じお客...
-
【マクロ】実行時エラー '424':...
-
【画像あり】オートフィルター...
-
Office2021のエクセルで米国株...
-
【マクロ】左のブックと右のブ...
-
【マクロ】【相談】Excelブック...
-
他のシートの検索
-
【マクロ】【配列】3つのシー...
-
エクセルのライセンスが分かり...
-
エクセルでフィルターした値を...
-
エクセルに写真が貼れない(フ...
-
エクセルシートの見出しの文字...
-
【マクロ】【画像あり】❶ブック...
-
セルにぴったし写真を挿入
-
エクセルのリストについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】元データと同じお客...
-
エクセルの関数について
-
【画像あり】オートフィルター...
-
エクセルのVBAで集計をしたい
-
エクセルのリストについて
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
エクセルの複雑なシフト表から...
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
【マクロ】左のブックと右のブ...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
【関数】同じ関数なのに、エラ...
-
Amazonでマイクロソフトオフィ...
-
ページが変なふうに切れる
おすすめ情報