VBAのinputboxで何もいれずに[OK]を押した時エラーになる理由と解決方法

このQ&Aのポイント
  • VBAのinputboxで何も入力せずに[OK]を押すとエラーが発生します。これは、VBAのinputboxが空の値を受け入れないためです。解決方法の一つは、入力が行われたかどうかを確認することです。入力がない場合は別の処理を実行するように条件分岐を行うことができます。
  • 具体的な解決方法として、inputboxの戻り値を変数に格納し、その変数が空の場合にエラーメッセージを表示する方法があります。また、myAnsがNothing(キャンセル)となる場合と、myAnsが空文字列(何も入力されていない)となる場合で処理を分岐することもできます。
  • 例えば、myAnsがNothingの場合にはメッセージボックスに「キャンセル」と表示し、処理を終了するようにします。また、myAnsが空文字列の場合には「最低1つは選択してください」と表示し、処理を終了するようにします。それ以外の場合には、myAnsのアドレスを表示するようにします。
回答を見る
  • ベストアンサー

VBAのinputboxで何もいれずに[OK]を押した時エラーになります

よろしくお願い致します。 EXCELのVBAで「inputbox」を使ってセルを選択させたいと考えております。 下記のコードだと「キャンセル」や「×」で閉じられた時はmsgbox「キャンセル」が出てExit subするのですが、何も入力しないで「OK」を押した場合がどうしてもエラー(入力した数式は正しくありません)になります。 いろいろ調べて試したのですがどうしてもできず困っています。 どなたか教えてください。 Sub test() Dim myAns As Range On Error Resume Next Set myAns = Application.InputBox(Prompt:="セルを選択してください。", Title:="セル選択", Type:=8) On Error GoTo 0 If myAns Is Nothing Then MsgBox "キャンセル" Exit Sub ElseIf myAns = "" Then MsgBox "最低1つは選択してください" Exit Sub Else MsgBox myAns.Address(0, 0) End If End sub

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

テキスト形式で受け取っては? Dim myAns As Range Dim Txt Txt = Application.InputBox(~, Type:=2) If Txt = False Then   MsgBox "キャンセル"   Exit Sub End If If Txt = "" Then   MsgBox "最低1つは選択してください"   Exit Sub End If Dim Ecode As Long On Error Resume Next Set myAns = Range(Txt) Ecode = Err.Number On Error GoTo 0 If Ecode <> vbNormal Then   MsgBox "セルの指定が間違っています"   Exit Sub End If MsgBox myAns.Address(0, 0)

moya-ism
質問者

お礼

さっそくの回答ありがとうございます。 できました~~~! ずーと解決できずに悩んでいたので本当にうれしいです。 感謝です。 ありがとうございました。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

InputBoxのType:=8はそういう仕様なんです。 セルを選択する書式を入れるか、止めるかしかないのです。 空欄でOKとは何を意味していますか?何を期待しているんですか? 単に「止める」ならキャンセルボタンがあるので、用は足りていると 思いますが・・・

moya-ism
質問者

お礼

さっそく回答いただきありがとうございます。 >InputBoxのType:=8はそういう仕様なんです。 そうなんですか・・・残念です。 >空欄でOKとは何を意味していますか?何を期待しているんですか? 私が使うのでなく、複数で使うため、そのようにしてしまう人がいるかと思い、せめてメッセージでも出せたらなと思った次第です。 すいません。 「入力した数式は正しくありません」のエラーメッセージが出ればわかるかもしれませんね。

関連するQ&A

  • vba InputBox キャンセルなら

    Sub test() Dim i As Long i = InputBox("値をいれてください") 'キャンセルなら 'if then exit sub End Sub このような状態で、キャンセルボタンを押すかescキーを押したら、 'キャンセルなら 'if then exit sub でプロシージャーを抜けたいのですが、 キャンセルボタンを押すと、実行時エラー13になります。 (_型が一致しません。(Error13)) エラーを発生させずに、キャンセルさせるにはどうすればいいですか?

  • エクセルのInputBoxについて教えてください。

    エクセル2010です。 InputBoxについて教えてください。  負数以外の数値を受け取りたいのです。 以下のようにやってみました。 Sub test001() Dim ans As Double ans = Application.InputBox("数値を入力", Type:=1) If ans = False Then MsgBox "キャンセル" Exit Sub ElseIf ans < 0 Then MsgBox "負数は不可。" Call test Else MsgBox ans & "を受け取りました。" End If End Sub 一応、これで動くのですが、問題は数値0を入力された場合です。 0はFalseと認識されるようで、キャンセルとなってしまいます。0は0という数値で受け取りたいのです。 試行錯誤の結果、Type:=1をやめ、変数ansをVariantにして If ans = “False” Then と、Falseをダブルクォーテーションでくくると、0を数値としてくれるようです。でも理屈がわかりません。変数ansにキャンセルボタンで帰ってくるのはBooleanのFalseであり、Stringの”False”ではないと思うのですが。 Sub test002() Dim ans ans = Application.InputBox("数値を入力") If ans = "False" Then MsgBox "キャンセル" & TypeName(ans) Exit Sub ElseIf ans = "" Then MsgBox "未入力" & TypeName(ans) Call test002 ElseIf Not IsNumeric(ans) Then MsgBox "数値ではありません。" & TypeName(ans) Call test002 ElseIf ans < 0 Then MsgBox "負数は不可。" & TypeName(ans) Call test002 Else MsgBox ans & "を受け取りました。" & TypeName(ans) End If End Sub あと、もうひとつ質問は、数値以外の入力があった場合、再度入力させるためいちいちCall test002 を入れてますが、このやり方でただしいのでしょうか?

  • エクセルVBA Inputboxについて教えてください。

    InputBoxの使い方について教えてください。 テストで下記のように書いてみました。 Sub input_test2() ans = InputBox("質問!適当に数字を入れてね") MsgBox Application.WorksheetFunction.IsNumber(ans), vbInformation, "入力判定" If Application.WorksheetFunction.IsNumber(ans) Then If ans = 0 Then MsgBox "入力されたのは、 0", vbInformation, "回答" If ans = 1 Then MsgBox "入力されたのは、 1", vbInformation, "回答" If ans = 2 Then MsgBox "入力されたのは、 2", vbInformation, "回答" If ans = 3 Then MsgBox "入力されたのは、 3", vbInformation, "回答" If ans >= 4 Then MsgBox "入力されたのは、 4以上", vbInformation, "回答" Else MsgBox "入力は数字でしてください!", vbExclamation, "お願い" End If End Sub 1.入力が数値ならTRUEがかえると思ったのですが、何を入れてもFALSEしかかえりません。どこがまずいのでしょうか? 2.表示されるInputBoxのサイズが随分横に長いのですが、サイズを変える方法はあるのでしょうか? 3.MsgBoxの"入力判定"や”回答”ようにInputBoxにも最上行に日本語を表示させる方法はないでしょうか? 以上、よろしくお願いいたします。

  • アクセス InputBox キャンセルした場合を取

    InputBoxでキャンセルしたら、キャンセルされましたと表示させたいのですが どうも私のやってるサンプルはエクセル専用のようです。 http://www.moug.net/tech/exvba/0100036.html 自分なりに書き換えてみたのですが キャンセルボタンを押しても無視されます。 Sub Sample() Dim returnData As Variant returnData = InputBox("データを入力してください") If VarType(returnData) = vbBoolean Then MsgBox "キャンセルされました" Exit Sub End If MsgBox "処理を続行します" End Sub アクセスではできないのでしょうか?ご教授よろしくお願いします。

  • InputBox関数について

    VBAの勉強中です。 教えてください。 INPUTBOX関数で、何も入力しないでの入力も可、とするコードはどうなるでしょうか。 言葉を変えて言えば、入力ボックスが未入力の状態でOKボタンを押すということです。 例えば以下のようにすると、当然ながら「キャンセル」と判断されます。 Sub Test()  Dim myData As String  myData = InputBox("入力してください")   If myData = "" Then     MsgBox "キャンセル"   Else     MsgBox "入力OK"   End If End Sub ■■尚、今回は、メソッドではなくて関数での質問になりますのでその点よろしくお願いします。  

  • EXCEL VBAで空白削除のマクロを作りましたが

    削除されません。 下記のとおりですが、どう考えても動きません、どなたか修正をお願いします。 初心者です。宜しくお願いします。 Sub Ksakujyo() Dim ObjRange As Range On Error Resume Next Set ObjRange = Application.InputBox("削除範囲を選択して下さい。", "印刷範囲", Type:=8) On Error GoTo 0 If ObjRange Is Nothing Then MsgBox "キャンセルされました。" End If If Selection.Count = 1 Then Exit Sub On Error Resume Next Selection.SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp Exit Sub End Sub

  • マクロ inputbox ブランクで入力した時

    いつも回答して頂きありがとうございます。 InputBoxに何も入力せず、OKを押してしまった場合、マクロの処理を終了させたいのですが、どうしたらよろしいでしょうか?宜しくお願い致します。 Sub 名前を入力する() Dim a As Long a = Application.InputBox("班を数字で入力して下さい。", Type:=1) If a = 0 Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If With ActiveSheet .Range("E4:F5").Value = Worksheets("名前一覧").Cells(2, a).Value End With End Sub

  • エクセルマクロでinputboxメソッドゼロ入力

    エクセル2007です。 以下のマクロで、inputboxメソッドで質問させると、キャンセルボタンを押すと、うまいぐあいに止まります。 しかし、0を押しても、止まってしまいます。本当は、C2にゼロと表示させたいのです。 Sub 練習() Dim myR myR = Application.InputBox(prompt:="数量を入力しなさい", Type:=1) If myR = False Then Exit Sub Range("C2").Value = myR End Sub

  • InputBox キャンセルボタンが押された時の処理

    こんばんは。 Sub test() Dim タイトル As String タイトル = InputBox("タイトルを入力してください。") If Cancel = True Then Exit Sub ’次のコード・・・ ’次のコード・・・ End Sub このコードを実行した時に 下記のダイアログが出てきて 右のキャンセルボタンを押すと、 「If Cancel = True Then Exit Sub」 でsubステートメントを抜けたいのですが 「Cancel」の部分が 「変数が定義されていません」とエラーになってしまいます。 Dim Cancel As Boolean を追加してキャンセルボタンを押しても TrueではなくFalseになってしまいます。 回避方法を教えてください。 よろしくお願いします。

  • 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

専門家に質問してみよう