• ベストアンサー

VBA inputbox関数について

質問をさせてください。 VBA inputbox関数にて 数字を入力をし、その数字を元に挿入を行うというものを施しています。 そして下記の内容で実際は動くのですがどうしても疑問点が浮かんできます。 それはinputbox関数には宣言をしないと文字列として処理されますよね? なので、宣言をlongにして整数化をしています。 しかし、If "1" <= buf1 <= "65536" Thenの部分で 数字に""(ダブルコーテーション)を入れないとうまく作動しません。 例えば「0」を入力しても正の処理へ行います。 ダブルコーテーションで囲んでいる数値は文字列として認識されるはず・・ 入力は数値として宣言をしているのだからダブルコーテーションはいらないのではないんでしょうか? また、もし数字ではなく、記号などを入力をしてしまった場合の偽の処理へいくにはどうすれば いいでしょうか? 恐れ入りますがよろしくお願いいたします。 Sub test() Dim buf1 As Long buf1 = InputBox("コピー先の列番号を入力してください") If "1" <= buf1 <= "65536" Then Cells(buf1, 1).EntireRow.Insert Else MsgBox "正しい列番号を入力してください" Exit Sub End If End Sub

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

Excel(エクセル) VBA入門:対話型処理2(InputBox関数,InputBoxメソッド) http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_inputbox.html InputBoxメソッドで"TYPE:=1"と数値だけを受け付けるように設定するといいのではないでしょうか? Sub test2() Dim buf1 As Variant buf1 = Application.InputBox("コピー先の列番号を入力してください", Type:=1) If 1 <= buf1 And buf1 <= 65536 Then Cells(buf1, 1).EntireRow.Insert Else MsgBox "正しい列番号を入力してください" Exit Sub End If End Sub など。

van111
質問者

お礼

早急なご回答誠に有難うございます。 inputbox関数にとらわれがちでしたがメソッド対応することで typeというものがあるのを知りませんでした。 関数とメソッドの違いについて勉強していきます。 有難うございます。

その他の回答 (3)

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.4

こんにちは >また、もし数字ではなく、記号などを入力をしてしまった場合の偽の処理へいくにはどうすればいいでしょうか?  戦略として入力を文字列で受けてエラーチェックをしてから数値に変換するのがそつがないです。

van111
質問者

お礼

ご回答有難うございます。 色々な方法があるのですね・・ 参考になりました。もう少し勉強していきます。 有難うございます。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

#1です。 不等号の向きが違っていた。 If buf1 >= 1 And buf1 <= 65536 Then

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

If "1" <= buf1 <= "65536" Then ↑ この書き方が基本的に間違っている。 下記。 If buf1 <= 1 And buf1 <= 65536 Then

van111
質問者

お礼

早急なご回答誠に有難うございます。 根本的に書き方が違っていたんですね・・ まだまだ未熟者ですが凄く勉強になりました。

関連するQ&A

専門家に質問してみよう