質問するログイン新規登録

Q&A

2回答

813閲覧

VBAの&変数についての質問です

yamasita_uruki

総合スコア29

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/02/03 13:55

0

0

VBAの&の変数についての質問です。コンパイルエラーが出て困ってます(構文エラー) 以下のコードを本を見ながら自分
なりにコピーしてやってたんですがうまくいきません、教えてください

VBA

1コード 2```Sub テスト() 3r = 6 4For cnt = 1 To 6 5Range(r&":"&r).Insert 6next

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

y_waiwai

2022/02/03 14:27

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、よけいな省略翻訳しないで出たそのママをコピペで提示してください
m.ts10806

2022/02/04 03:33

書籍のままなら書籍が間違っています。 (が、大抵は「つもり」でその通りに書けていない) 参考書籍は提示してください。 場合により修正依頼などをする必要があります。
guest

回答2

0

VBAにおいて&はいろいろな意味があります。
一番よく使うのは、文字列結合演算子のです。

Ampersand (&) 演算子 | Microsoft Docs

この場合、演算子の前後に半角スペースが必要です。下記のようにすればエラーにはなりません。

vba

1'Range(r&":"&r).Insert 2Range(r & ":" & r).Insert

"Hello"&"World"のように文字列と分かっているときは、VBAが忖度して前後にスペースを挿入してくれます。

r&はなぜ忖度してくれないのでしょうか。

型宣言文字として&があります。

VBAの型宣言文字一覧:エクセルマクロ・Excel VBAの使い方

変数や数値の直後に&を付加すると、長整数型と指定することになります。

r&&はr変数を長整数型とするという型宣言文字になります。ですので、スペースを挿入しないのです。

他に16進数表記を意味する&Hがあります。&Haは16進数のaつまり10進数の10になります。

16進数、2進数、および 8進数のリテラル

このように&にはいろいろな意味がありますので、文字列連結としての&にしたいなら、前後に半角スペースを挿入しておけば、エラーになることはないです。

投稿2022/02/04 00:36

hatena19

総合スコア34377

0

私は"&"はポインタであるからであると考える。

参考文献:https://excel-ubara.com/excelvba4/EXCEL_VBA_410.html
マクロVBAでは、&(アンパサンド)記号で文字列結合を行う事は頻繁に行われますよね。
VBEで&を記述するとき、一度くらいは赤字のコンパイルエラーになったことがあるのではないでしょうか。

どのように入力した時にエラーになるのか、
なぜそれがエラーになるのか、
これらを少しく詳しく見てみましょう。

&の記述がエラーになる入力とは
VBEで、以下のように入力します。
hoge=fuga&piyo
これでEnterすると、

VBA マクロ 構文エラー

このように赤字でエラーになります。
VBAの学習の初期段階で、、
文字結合&(アンパサンド)の前後には、空白を入れるように教わった人も多いのではないでしょうか。

hoge=fuga & piyo
このように&の前後に空白を入れてEnterすれば、

VBA マクロ 構文エラー

これなら問題はありませんね。
Enterした後は、=の前後には半角スペースが自動的に挿入されます。
これは、+=*/等の四則演算でも同じです。
自動的に、前後に半角スペースが挿入されて見やすくなります。
ではなぜ、&は自動で前後に半角スペースが挿入されないのでしょうか。

いえいえ、&の前後にスペースを入れなくてもエラーにならない場合もあります。

hoge="ABC"&piyo
これでEnterすると、

VBA マクロ 構文エラー

&の前後にスペースが自動的に挿入されました。

しかし、文字定数ではなく数値定数の場合、
hoge=123&piyo
これでEnterすると、

VBA マクロ 構文エラー

これはエラーになってしまいました。
それぞれ何が違うのでしょうか。
fuga
"ABC"
123
これだけの違いだけです。

では、さらに、
hoge=huga&"ABC"
これでEnterすると、

VBA マクロ 構文エラー

あれれ、エラーになりました。
以上のようにいろいろなパターンで入れていって、そこからわかる事は、

&の前が変数や数値定数だと&の前にスペースが無いとエラーになるという事です。
つまり、
文字定数("")以外の後ろに&で文字列結合するときは、&の前にスペースが必要だという事です。

さらに、いろいろなパターンで確認していくと、
&の後ろにもスペースが必要な場合が出てきます。
hoge=fuga &haa

VBA マクロ 構文エラー

&の前にスペースをちゃんと入れてもエラーになってしまいました。
でもでも、
hoge=fuga &hii

VBA マクロ 構文エラー

これなら、エラーになりません。
こうなってくると何が何やら分からなくなってきますね。

投稿2022/02/03 16:30

退会済みユーザー

退会済みユーザー

総合スコア0

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問