• ベストアンサー

Excel VBA の文字列連結演算子 &

 変な質問で申し訳ないのですが・・・  Excel VBA の文字列連結演算子 & は   Dim St As String   Dim No As Integer   St = "来年は"   No = 2020   Range("A1").Value = St & No とすれば St & No は確かに "来年は2020" という文字列になります。本来ならば   St & Str(No) とすべきだと思いますが、なぜこんな仕様にしたのでしょうか?  また、ベースとなった VB.NET も同じ仕様なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 これを、「暗黙の型変換」といいます。  本筋は、St & Str(No) です。この時、Str(No)は、Noという数値を文字列に明示的に「型変換」しています。  一方、文字列の連結演算子、「&」は、この演算子の左辺・右辺ともに、絶対に文字列でないといけません。ですから、&の左辺や右辺に何かが来たら、これは必ず文字列です。というわけで、ここに文字列以外のものが指定されると、自動的に、文字列に変換しようとします。型変換を指定していませんので、これを「暗黙の型変換」と呼びます。  もう一つ事例をあげましょう。よく見るパターンのはずです。  Dim f As Double  Dim ret As Double  Dim i As Integer  f=1.23456  i=3  ret = f + i  とやります。この場合、+の両辺は同じ数値型である必要があるので、まず、iをDoubleに型変換しようとします。(もし、fをIntegerに変換すると、小数点以下の数値が失われるので、このような変換はしません。)そして、足し算の結果は、Doubleとなります。  また、  Dim f As Double  f=3  なんてのもよく見ますね。3は、Integerです。でも、fがDoubleだから、Doubleに自動的に型変換します。  と言った具合に、指定しなくても、「明らかに」変換されるべきと考えられる場合は、勝手に言語が型変換をします。  VBに限らず、他の言語でもよく見られる挙動です。ただし、この暗黙の型変換は、実は、どんな場合に発生するかは、厳密に定義されています。されているんですが・・・こんな規則は覚えるものではありません。(覚えられるような気もしませんし。)  よほど、明らかな場合以外は、明示的に型変換するほうが、お行儀の良いプログラムと思っておいてよいかと思います。特に、その場における型がプログラムの挙動に影響を与える場合は、なおさら、明示的に型変換すべきです。

musume12
質問者

お礼

丁寧な回答まことにありがとうございました。スッキリいたしました(笑)。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>また、ベースとなった VB.NET も同じ仕様なのでしょうか? 本題とは関係ありませんが VBAのベースとなっているのはVisual Basic 6で、 VB.NETではないですよ

すると、全ての回答が全文表示されます。

関連するQ&A