こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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と表示されてしまうのはどうしてでしょうか。引き算や掛け算,割り算の場合はちゃんと表示されるのですが、、、

投稿日時 - 2006-06-11 15:37:11

QNo.2209082

困ってます

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

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

投稿日時 - 2006-06-11 15:53:26

お礼

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

投稿日時 - 2006-06-11 16:24:40

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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
と宣言するかあるいは別な行に分けるかすることをお勧めします。

投稿日時 - 2006-06-11 15:50:12

お礼

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

投稿日時 - 2006-06-11 16:23:32

あなたにオススメの質問