スポンサーリンク
はじめに
前回の記事で、Excel VBAのInputBoxについて、キャンセルボタンを押されたときの処理を残して終わった。
で、このキャンセル処理だけど、ケースごとにどういう処理をするのかが「これさえ見りゃOK」レベルで全部まとまってるサイトは、ググっても見つけるのは現状容易ではないと思う。
だから私が書こうと思った。この記事が、InputBoxのキャンセル処理の最適解・決定版となればと思う。
さて、InputBoxで最も重要なTypeについて、
- 1:数値
- 2(省略):文字列
- 8:セル参照
の3つだけ押さえれば良いというのが私の見解だけど、キャンセル処理についてもこの3つそれぞれに別々の処理を用意する必要がある。あるはずなのだ。
ソースコード・簡易説明
それら、Typeごとのキャンセル処理について、下記のソースコードに示した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
Sub inputTest() 'Application.InputBoxのType '0:数式 '1:数値 '2(省略):文字列 '8:セル参照 'Type=1(数値)や2(文字列)では、イレギュラーな入力値に備え、Variant型で受け取る。 Dim var As Variant Dim msg As String '文字形式(Type:=2)のInputBoxでは、キャンセルが押されたとき「False」という文字が返される。 'その「False」を判別するに当たり、大文字・小文字の区別を厳密にしても仕方がないので、 'StrConvのvbLowerCaseを用いて全て小文字に変換する。 If StrConv(var, vbLowerCase) = "false" Then Exit Sub msg = "数字の入力。Type:=1です。" var = Application.InputBox(msg, Title:=msg, Default:=1, Type:=1) '数値形式(Type:=1)のInputBoxでは、キャンセルが押されたときも「0」が入力されたときも '数字的には0が返される。 'ただしキャンセルが押されたときは、正確に言うとBoolean型の「False」値というものが返される。 'それを元に、0が入力されたのとキャンセルとを判別する。 If VarType(var) = vbBoolean Then Exit Sub Cells(1, 1).Value = var 'A1セルに代入 msg = var & vbCrLf & "が入力されました。" & vbCrLf & "次は文字の入力。Type:=2です。" var = Application.InputBox(msg, Title:=msg, Default:="input", Type:=2) '文字形式(Type:=2)のInputBoxでは、キャンセルが押されたとき「False」という文字が返される。 'その「False」を判別するに当たり、大文字・小文字の区別を厳密にしても仕方がないので、 'StrConvのvbLowerCaseを用いて全て小文字に変換する。 If StrConv(var, vbLowerCase) = "false" Then Exit Sub Cells(2, 1).Value = var 'A2セルに代入 msg = var & vbCrLf & "が入力されました。" & vbCrLf & "最後にセル範囲の入力。Type:=8です。" 'セル範囲を返す(Type:=8)のInputBoxでは、受け取り値をRange型に限定しておき、 'キャンセルが押されたときはエラー処理で良い。 On Error GoTo myErr Dim rng As Range Set rng = Application.InputBox(msg, Title:=msg, Default:="$A$1", Type:=8) msg = rng.Address & "が選択されました。" MsgBox msg, vbInformation, "選択されたセル範囲" Exit Sub myErr: Exit Sub End Sub |
大体の説明は、もうソースコードにやかましくコメントで書いてるので、あまりそれ以上は書かない。
なんか
VarType(var) = vbBoolean
とかいう小難しい処理も書いてるけど、こんなの私も普段は全然使わない。
あと、StrConvとかいうのも途中にあるけど、これは大文字・小文字とか半角全角など、文字列を様々な形式に変換できるもの。
ただ私も、このInputBoxのキャンセル処理くらいでしか、ほとんど使うことがないけど。
最後に、このInputBoxのマクロが、キャンセルボタンが押されず最後まで進んだイメージを動画に示す。
InputBoxは、こんな感じで、取得できた値をセルに代入したりして使うんだけどね。
実際のところ私も、このInputBoxを使う頻度がそう高いわけではない。
何か値を入力させる必要があるなら、Excelシートのセル上に書かせておけば、通常はOKだしね。
そういう風に別途セルを使いたくなくて、さっと済ませたい場合にInputBoxを使ったりするのだけど・・・。
また次回、そういうマクロを示します。
スポンサーリンク