
以下コードは動くのですが、受けとりで動きます
【受取】
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(エクセル)
-
Excel 関数での質問です
Excel(エクセル)
-
【マクロ】Withステートメント2つを簡略する為には?
Excel(エクセル)
-
-
4
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
5
日付がバラバラ
Excel(エクセル)
-
6
【マクロ】参照渡しとモジュールレベル変数 どっちが よく使うものですか?
Excel(エクセル)
-
7
【マクロ】データ移動について代替案(コード)or助言を下さい
Excel(エクセル)
-
8
【マクロ】コードを少しでも、減らする為には
Excel(エクセル)
-
9
(マクロ)参照渡しにて、違う変数でも 渡せるのはなぜですか?
Excel(エクセル)
-
10
エクスプローラーで見ることはできますか
Excel(エクセル)
-
11
システムファイルについて
Excel(エクセル)
-
12
別のシートの指定列の最終行を返す関数の式を教えて下さい。
Excel(エクセル)
-
13
Excel関数の解決方法
Excel(エクセル)
-
14
Excelの関数を教えて下さい。
Excel(エクセル)
-
15
Excelでの文字入力について
Excel(エクセル)
-
16
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
17
Excelのデーターバーについて
Excel(エクセル)
-
18
VBAの「To」という語句について
Visual Basic(VBA)
-
19
Excelの条件付書式について教えてください。
Excel(エクセル)
-
20
【マクロ】Formulaプロパティにて、3行全てに、数式を入れるためには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル
-
エクセルの循環参照、?
-
【マクロ】WEBシステムから保存...
-
【マクロ】A列にある、日付(本...
-
エクセルのdatedif関数を使って...
-
9月17日でサービス終了らし...
-
エクセル ドロップダウンリスト...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】別のブックから、フ...
-
Excelの新しい空白のブックを開...
-
特定のセルだけ結果がおかしい...
-
VBA チェックボックスをオーバ...
-
【マクロ】宣言は、何のために...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
Excelについての質問です 並べ...
-
スプレッドシートで複数のプル...
-
派遣会社とかハローワークとか...
-
【マクロ、画像あり】A表かB表...
-
【マクロ】アクティブセルの2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelファイルを開くと私だけVA...
-
エクセルについてどう関数を使...
-
マクロ・VBAで、当該ファイルの...
-
エクセルのセルに画像は埋め込...
-
エクセルで、一部のセルだけ固...
-
【マクロ、画像あり】A表かB表...
-
エクセルでカウントする
-
【マクロ】コードを少しでも、...
-
VBA_日時のソート
-
エクセルで教えてください。 例...
-
エクセル 月間シフト表で曜日ご...
-
セルの左に余白を付ける
-
エクセル
-
エクセルについて教えてください
-
2枚のエクセル表で数字をマッチ...
-
ExcelのIF関数との組み合わせの...
-
エクセルのファイルのコピーを...
-
エクセルで二つのブックの違い...
-
空白処理を空白に
-
Excelのチェックボックスについ...
おすすめ情報