• ベストアンサー

足し算の結果のみが変!?

ExcelVBAでinputbox()やuserformのtextboxから値を取得する場合に Sub prog() Dim a, b, c As Integer a = InputBox("値1を入力") b = InputBox("値2を入力") c = a + b MsgBox c End Sub とすると,例えば(値1)=2,(値2)=3としたときにメッセージボックスに本来であれば2+3なので5と表示されるはずですが23と表示されてしまうのはどうしてでしょうか。引き算や掛け算,割り算の場合はちゃんと表示されるのですが、、、

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

  • ベストアンサー
  • fantom
  • ベストアンサー率31% (30/94)
回答No.2

変数の宣言の所を省略せずに、 Dim a As Integer, b As Integer, c As Integerにしてみて下さい。 既存のままだと、 a,bはVariant型になってしまい文字として認識されていると思います。

backs
質問者

お礼

早速の回答ありがとうございます。 aとbはVariant型になってしまっていたのですね。ご指摘いただいたようにそれぞれ分けて宣言をしたら大丈夫でした。

その他の回答 (1)

noname#20377
noname#20377
回答No.1

ExcelやWordについているVBA や VB6以前のVBとそれ以降のVB.NETとでは変数の型の扱いが違います(宣言と代入を参照のこと) http://santamartadotnet.hp.infoseek.co.jp/documents/vbdotnetbasic/01_variables.html つまり Dim a, b, c As Integer のaとbはVariant型です。 InputBox関数の戻り値はString型なので aとbに入る戻り値はString型扱いとなり String型同士の間に定義されている+演算子の役割は 文字の連結なので該当の状況が発生します。 従ってa = CInt(InputBox("値1を入力"))とすれば aに代入される値がInteger型と解釈されるので 5が表示されます。 記憶が定かじゃないですが、できるなら Dim a As Integer,b as Integer,c as Integer と宣言するかあるいは別な行に分けるかすることをお勧めします。

backs
質問者

お礼

早速の回答ありがとうございます。 なるほど,String型の場合は+が足し算ではなく文字を連結させるためのものだったのですね。

関連するQ&A