![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
VBAの勉強中です。
教えてください。
INPUTBOX関数で、何も入力しないでの入力も可、とするコードはどうなるでしょうか。
言葉を変えて言えば、入力ボックスが未入力の状態でOKボタンを押すということです。
例えば以下のようにすると、当然ながら「キャンセル」と判断されます。
Sub Test()
Dim myData As String
myData = InputBox("入力してください")
If myData = "" Then
MsgBox "キャンセル"
Else
MsgBox "入力OK"
End If
End Sub
■■尚、今回は、メソッドではなくて関数での質問になりますのでその点よろしくお願いします。
No.3ベストアンサー
- 回答日時:
こんばんは。
>尚、今回は、メソッドではなくて関数での質問になりますのでその点よろしくお願いします。
なぜ、InputBox関数という勧められていない方法を使わなくてはならないのか、レガシーな機能をあえて使う場合は自分で研究すべきです。重箱の隅をつつくような方法を、知っている人は少ないし、いつ、その方法がなくなるのかわかりません。
一応、VBAなどの暗黙のルールには、なるべくレガシーな方法は避けるべきだとしていますから、InputBox メソッドを使うべきですね。
Type:=2 にして、戻り値をVariant で受けると、Boolean値と、空文字(長さ0文字列)の区別がつきます。
ただ、旧VBのテクニックには、こういう古い方法が残されています。
「VB.Net 使ウベカラズ」のリストの中に出てきます。
Sub Test1()
Dim myData As Variant 'Stringでも可能
myData = InputBox("入力してください")
If StrPtr(myData) = 0 Then
MsgBox "キャンセル"
Else
MsgBox "入力OK"
End If
End Sub
回答ありがとうございます。
StrPtr、そんなものがありましたか。
オブジェクトブラウザでみましたところ、HiddenModuleのメンバーになってますね。
知らないはずです。
またひとつ勉強になりました。
>なぜ、InputBox関数という勧められていない方法を使わなくてはならないのか
あくまでも勉強の一環ということで。。。
これからもよろしくお願いいたします。
No.2
- 回答日時:
入力ボックスが未入力状態の場合、[OK][キャンセル]どちらのボタンを
押したかの判断は、INPUTBOX関数では出来なかったはずです。
(ですので私はINPUTBOX関数は使わず、フォームにしています)
回答ありがとうございます。
やはりふつーの方法ではないようですね。
このような場合には仰るようにUserFormなどを使うのが妥当だと思いますが、
今回はあくまでも勉強の一環として質問させていただきました。
これからもよろしくお願いします。
No.1
- 回答日時:
何のことを言っているのか、よくわからないのです。
InputBox関数は""も含めて何かを入力してOKを押せば、それが返ってくるものです。
質問の例なら、myDataに""が返っている。これを取って後はどのようにするかは、コードで書けばいいことでしょう。
あなたは、""のとき、MsgBox "キャンセル"、""以外のとき、MsgBox "入力OK"としたのですが、これを入れ替えれば、、""のとき、MsgBox "入力OK"、""以外のとき、MsgBox "キャンセル"となって、[当然ながら「キャンセル」と判断]されているわけではありません。
[入力ボックスが未入力の状態でOKボタンを押すと]、
""が返るだけです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) ExcelVBA No.を自動連番で設定をしながらデータ入力をしたい 2 2022/08/03 18:19
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 空白のセルを変更しようとした時(アクティブセル)に インプットボックスを5回出す インプットボックス 1 2023/03/14 11:01
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで英数大文字のみの入...
-
Apple IDの作成ができない。「...
-
マンション名のローマ数字入力...
-
認証コードが入力できない(同...
-
エクセル 時間を.(ドット)で...
-
左向きにエクセルで作成され申...
-
Excelにて入力済セルへの再入力...
-
VLOOKUP関数で返した値(カタカ...
-
エクセルで小文字を大文字に変...
-
ifで10個以上の条件判断がしたい
-
Excelが勝手に閉じてしまって困...
-
Uのキーを押すとユーティリティ...
-
エクセルVBAでTargetのセルに設...
-
【キーボード】母音しか打てない…
-
エクセルで10進法から60進法に...
-
American megatrendsという画面...
-
エクセルマクロ セルをクリック...
-
Excel:長い文字列が途中で切れる
-
最大値のあるセルの行番号のみ...
-
最大化したウインドウの最下部...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで英数大文字のみの入...
-
マンション名のローマ数字入力...
-
認証コードが入力できない(同...
-
Apple IDの作成ができない。「...
-
inputとenterの違い
-
Excelが勝手に閉じてしまって困...
-
エクセルVBAでTargetのセルに設...
-
左向きにエクセルで作成され申...
-
エクセル 時間を.(ドット)で...
-
ifで10個以上の条件判断がしたい
-
Excelにて入力済セルへの再入力...
-
初歩的なことなんですが。produ...
-
teratermでユーザー変更したい
-
VLOOKUP関数で返した値(カタカ...
-
コマンドプロンプト表示が一瞬...
-
Excelでの操作エラー 「変更し...
-
個人情報入力の手間をはぶきたい
-
ワード・エクセルで日本語入力...
-
MS-DOSの使い方を教えてください。
-
key入力が正しく入力出来ません
おすすめ情報