dポイントプレゼントキャンペーン実施中!

【質問の質問】VBAにおける「&」の役割について


◾️以下のコードの「&」はなぜ必要なのでしょうか?
Selection.Consolidate Sorces:="'[" & ThisWorkbook.Name & "]貼り付け'!R5C2:R508C4", Function:=xlSum, TopRow:=False, LeftColumn:=True, CreateLinks:=False

[" & ThisWorkbook.Name & "]
↑この「」
&の役割がいまいちわかりません。。
なぜそのままThisWorkbook.Nameでエラーが返るのでしょうか??

VBAに詳しい方宜しくお願い致します。

※ 尚、この質問は私が別で行った質問において、解決した問題の更問いとなっております。
初心者であるため、更問をしたにも関わらず、質問を閉じてしまいました。
重複してる部分が存在し、申し訳ございません。

A 回答 (5件)

すみません、No.1の内容が間違ってました。


-----------------
たとえばマクロが書かれているbookの名前が「Book1」だとすると

【'[】  と  【Book1】  と  【]貼り付け'!R5C2:R508C4】

をつなげるってことになります。
なので、

"'[" & ThisWorkbook.Name & "]貼り付け'!R5C2:R508C4"

この部分は、↓のような文字列になります。

'[Book1]貼り付け'!R5C2:R508C4  ←ココ、まちがってました。
-----------------

> 【'[】
> ↑これはフォルダーを指定しているという意味なのでしょうか??

違います。
セルを指定する場合、

=A1

などと書くと思いますが、
別のブック(ファイル)のセルを指定する場合などは、
='[ブック名]シート名'!A1

のように書く必要があります。
これは、実際にExcelで2つのファイルを開いて、
Book1の任意のセルで「=」を入力し、Book2のSheet1のA1セルを選択すると、

=[Book2]Sheet1!A1

となるのが確認できると思います。
「Book2」 の 「Sheet1」 の A1
という意味です。

この時、ファイル名やシート名にスペース等が入っていると、正常に動作しないので
「’」で囲む必要が出てきます。

='[Book2]Sh eet1'!A1

という具合に。で
【'[】は、その最初に入れる文字です

'[ブック名]ファイル名'!セル

と書かなきゃならないので、
最初にブック名とファイル名を囲う → '  
次にブック名を囲う → [
次にブック名 → ThisWorkbook.Name
次にブック名を閉じる → ]
次にシート名 → 貼り付け
次にブック名とファイル名を閉じる → '
次にセルとの区切り → !
最後にセル範囲 → R5C2:R508C

質問のケースでは
シート名とセル範囲が確定していて、ブック名だけが関数で取得する形なので、

確定している書き出し → "'["
関数で取得となるブック名 → ThisWorkbook.Name
確定しているブック名以降 → "]貼り付け'!R5C2:R508C4"

これらを「&」でつなぐと・・・

"'[" & ThisWorkbook.Name & "]貼り付け'!R5C2:R508C4"

になる、ということです。

説明ベタなので長々としてしまいすみません。
うまく伝わるといいのですが・・・・
    • good
    • 0
この回答へのお礼

詳しい解説ありがとうございます。
Excel表記方法の根本から説明して頂き、やっと理解することができました。根本から勉強し直します。
皆様細かく説明して頂きまして、大変恐縮ですが、エクセルの構造から説明して頂いたzongai様にベストアンサーを贈りたいとおもいます。
当方、初歩的過ぎてご迷惑をお掛けしました。

お礼日時:2018/06/24 20:26

No.2です。



>前は何と繋いでいるのでしょうか?

Bookを指定するのには [ と ] で囲う事で『Bookである』と明確に指定できます。
なのでBook名(ThisWorkbook.Name)の前後に [ ] が必要だからです。
    • good
    • 0
この回答へのお礼

何度もご説明ありがとうございます。
当方、エクセルの表記方法根本的なところを把握していなかったようです。
また機会があればご教授願います。
ありがとうございました。

お礼日時:2018/06/24 20:27

文字列の連結です。


[" & ThisWorkbook.Name & "]で説明すると、
""で囲っているのが、そこに書いた文字列を意味します。
ThisWorkbook.Nameは変数名だから、その変数に格納されている文字が対象になります。

上の例は不完全で、正しく書くと
"[" & ThisWorkbook.Name & "]"。 上の例ではエラーです。

ThisWorkbook.Nameの中身がabcと言う値だったら
[abc]と言う文字列になります。

Aと言う変数にアリガトウという文字が格納されていたら
B="今日は" & A & "御座いました"
を実行すると、Bには、今日はアリガトウ御座いました と言う文字列が格納されます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2018/06/24 20:28

https://oshiete.goo.ne.jp/qa/10571360.html

>Sorces:="'[統合ファイル.xlsm]貼り付け'!R5C2:R508C4"

ここの事でしたよね?
質問が閉じられてしまったのでどうしようかと思いましたが。

簡単に言えば

Sorces:="'[ThisWorkbook.Name]貼り付け'!R5C2:R508C4"

[] の中はBookを表しますが、[ThisWorkbook.Name] なんてBookは存在しません。
そもそも .Nameと言う『拡張子』のファイル指定なんてのがおかしいからです。
1つの文字列として見た時に。

なので実際のBook名を表す ThisWorkbook.Name を前後の文字と

Sorces:="'[" & ThisWorkbook.Name & "]貼り付け'!R5C2:R508C4"

このようにする事で繋がった文字列に表せます。

と言う感じでは如何でしょう?
    • good
    • 0
この回答へのお礼

何度もご丁寧に説明して頂いただきまして、本当にありがとうございます。
MsgBox ThisWorkbook.Name
でファイル名が返ってきたので、適応出来ると思っていました。

前後の文字とのことですが、後はシートと繋いでいることが分かるのですが、前は何と繋いでいるのでしょうか?前に「&」を入れることで、フォルダと繋がっていることになるのでしょうか?

お礼日時:2018/06/24 19:04

[" & ThisWorkbook.Name & "]



ここの部分でピックアップしちゃダメ。
抜き出すならこの範囲。


わかりやすいようにスペースを割り込ませると

"'["  &  ThisWorkbook.Name  &  "]貼り付け'!R5C2:R508C4"

というわけで「&」の役割は文字列を結合させる役割を持ちます。
たとえばマクロが書かれているbookの名前が「Book1」だとすると

【'[】  と  【Book1】  と  【]貼り付け'!R5C2:R508C4】

をつなげるってことになります。
なので、

"'[" & ThisWorkbook.Name & "]貼り付け'!R5C2:R508C4"

この部分は、↓のような文字列になります。

'[Sheet1]貼り付け'!R5C2:R508C4
    • good
    • 0
この回答へのお礼

ご丁寧な解説ありがとうございます。更問いさせてください。
文字列の結合ということですが、
【'[】
↑これはフォルダーを指定しているという意味なのでしょうか??
よろしくお願い致します。

お礼日時:2018/06/24 18:56

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