• ベストアンサー

エクセル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にも最上行に日本語を表示させる方法はないでしょうか? 以上、よろしくお願いいたします。

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

  • ベストアンサー
  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.1

こんにちは。 1.の答え InputBox関数は文字列型の値を結果に返します。 したがって、数値を入力しても文字列型の数値なので、 評価結果がFalseになります。 なお、このような場合、 わざわざワークシート関数を使わなくても、 VBAの関数にIsNumeric関数というのがありますので、 こちらで書き換えてあります。 2.の答え サイズを変える方法はありません。 サイズを変更する必要がある場合は、 「ユーザーフォーム」を使います。 3.タイトルの表示はMsgbox関数と同じです。 Titleプロパティに値を指定します。 Option Explicit Sub input_test() Dim ans As String 'InputBoxの戻り値はString型になります。 ans = InputBox("適当に数字を入れてね", "質問!") If IsNumeric(ans) = True Then MsgBox "入力されたのは、" & ans & "です。", vbInformation, "回答" Else MsgBox "入力は数字でしてください!", vbExclamation, "お願い" End If End Sub

AQUALINE
質問者

お礼

ありがとうございます。 完璧です!

その他の回答 (1)

noname#11856
noname#11856
回答No.2

> Application.WorksheetFunction.IsNumber(ans) を IsNumeric(ans) にしてみてください。 サイズは変えられなかった気がします。 InputBoxのタイトル行も、MsgBox同様に、第2引数に入れてあげれば表示しますよ。 InputBox("質問!適当に数字を入れてね","Title") のようにしてみてください。

AQUALINE
質問者

お礼

ありがとうございます。

関連するQ&A

  • エクセルの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を作ろうと思います。 以下のコードで入力がなければ閉じないというか、Line:に戻るので、何度でも現れるInputBoxになるようですが、このやり方は正しいですか? 通常はどうやるのでしょうか? Sub test() Dim a line: a = Application.InputBox("必ず入力して下さい。", "Input!") If Len(a) = 0 Or a = False Then GoTo line MsgBox "有難う。" & a & " ですね。", , "(o。_。)oペコッ" End Sub

  • 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

  • IsNumberについて

    Sub macro01() If WorksheetFunction.IsNumber(123) = ture Then MsgBox "数値です" End If End Sub WorksheetFunction.IsNumber(123)で、数値なら、MsgBox "数値です"って表示されると思ったのですが、 MsgBox "数値です"を通りません。 123を数値と認識してないのでしょうか?

  • 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

  • マクロ 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

  • 初心者です。エクセルVBAの質問なのですが・・・

    エクセルのVBAで 例えば・・・IF関数を使いたい時に Public Sub 練習() 年齢 = InputBox("あなたは何歳ですか。数字だけを入力して下さい。") If 年齢 < 20 Then MsgBox "未成年ですね" ElseIf 年齢 < 30 Then MsgBox "20代ですね。" Else MsgBox "その他の年代ですね" End If End Sub                            のようなものを作って、実行をしたときに、数字を入れてOKボタンではなく、ダイアログボックスのキャンセルや閉じるボタンを押したときに、「その他の年代ですね」が出てきますが、それを出てこないようにすることはできますか?(例えば、キャンセルボタンのような役割をさせるなど・・・)  結構難しいですかね? 教えて下さい。お願いします。

  • vbaにvlookupを組み込む

    お世話になります。 エクセルのマクロにvlookupを組み込みたいのですが,エラーが出てしまいます。 用意したものは「顧客名簿」というシートで,A列に顧客番号(6ケタの数字),B列に顧客名が入っています。C列以降はその他のデータが入っています。 「トップメニュー」というシートにあるマクロボタン「顧客抽出」を押すと,インプットボックスが現れます。これに顧客番号を入力すると,メッセージボックスが現れます。 この時のメッセージボックスに,インプットボックスに入力された番号により「顧客名簿」から顧客名を取り出し,「○○さんのデータを表示しますか」としたいのですが,ここでエラーが出ます。(○○は,「顧客名簿」のB列にある名前です) 実行時エラー 1004 WorksheetFunctionクラスのVLookupプロパティを取得できません。 組んであるマクロは以下の通りです。 Sub 顧客抽出() Dim ans As String, ans2 As String     ans = InputBox("顧客番号を入力", "入力", "")         If ans = "" Then             MsgBox "顧客番号が空白です" & vbNewLine & _                "処理を中止します", vbOKOnly         Else             If WorksheetFunction.CountIf(Worksheets("顧客名簿").Range("A1:B5000"), ans) = 0 Then                 MsgBox "顧客番号が登録されていません", vbOKOnly             Else                 ans2 = WorksheetFunction.VLookup(ans, Worksheets("顧客名簿").Range("A1:B5000"), 2, False)                 If MsgBox(ans2 & " さんのデータを表示しますか", vbYesNo) = vbYes Then                     Sheets("顧客情報").Select                     Range("D4").Value = ans                 Else                     MsgBox "処理を中止します", vbOKOnly                 End If             End If         End If End Sub 途中にある ans2 = WorksheetFunction.VLookup(ans, Worksheets("顧客名簿").Range("A1:B5000"), 2, False) の部分でエラーが出るのですが,解決策が見当たりません。 おそらくRange("A1:B5000")の部分に不具合があると思うのですが,どう対処すればいいでしょうか。 詳しい方,ご教授願います。

  • InputBox関数について

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

  • アクセスの印刷VBAを教えて下さい

    アクセス初心者です。 バージョンは2002を使っています。 ネットで探して詳しく分からないままプログラムしています。 フォームで印刷のコマンドボタンを作ってそのボタンをクリックすると表示されてる 1ページのみ印刷したいのですが全てのレコードが印刷されてしまいます。 どうすればいいのか教えて下さい。 下記が今現在のVBAです。 Private Sub 印刷_Click() Dim varCopies As Variant varCopies = InputBox("部数を数字で入力してください", "印刷部数の指定") If Len(varCopies) = 0 Then Exit Sub End If If IsNumeric(varCopies) = False Then MsgBox "部数は数字で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub ElseIf CLng(varCopies) = 0 Then MsgBox "部数は0以上で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub End If If MsgBox("印刷しますか?" & vbCrLf & "部数=" & varCopies _ , vbYesNo + vbInformation, "印刷の確認") = vbYes Then DoCmd.OpenForm "伝票", acPreview, , , acFormReadOnly DoCmd.PrintOut acPrintAll, , , , CLng(varCopies) DoCmd.Close acForm, "伝票" End If End Sub

専門家に質問してみよう