[[20200318045110]] 『InputBoxについて(数値認識)?』(たかし) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『InputBoxについて(数値認識)?』(たかし)

InputBoxについて質問お願いします。
入力欄に、 10 20 30 40 という値を入力すると
化けて i の値が
10のとき 11.57
20のとき 244
30のとき 320
といった具合です 1 2 3 12 15 18 などの X0丁度だけ駄目なようなんですが
お解りになり方ご教授お願いします。

Sub 番号()

   Dim i As Variant

   i = Application.InputBox( _
            Title:="累計", _
            Prompt:="一覧表のコード番号を入力してください。" & String(2, vbCr) & _
            "《 例:99とか製品番号 》", _
            Default:="99", _
            Left:=50, _
            Top:=150, _
            Type:=1)
 If IsNumeric(i) = vbBoolean Then
      Exit Sub
   End If
If i = "False" Then Exit Sub
MsgBox Format(WorksheetFunction.SumIf(Range("D28:D500"), i, Range("H28:H500")), "合計「製品番号" & i & "」は " & "\\#,##0" & " 現在まで支払。") & vbLf & vbLf & _
支払回数は、  & WorksheetFunction.CountIf(Range("D28:D500"), i) & " 回支払です。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


おかしな所が他にもあります(指摘は省略)が、
想定外の表示がされる原因は、
Formatの書式文字列が冗長なものになっているからです。
Format(計算結果数値, "\\#,##0") という最低限のものにすべきです。

(γ) 2020/03/18(水) 08:38


(γ)さん
ありがとうございました。
無駄に長いのは、×ですね。
最低限にしたら、うまくいきました。

>おかしな所が他にもあります(指摘は省略)が
問題ありですか?
(たかし) 2020/03/18(水) 13:10


理由は分かりましたか?
単に長さじゃなく、
変数iに含まれる0が悪さをしている。

数値かどうかの判定がおかしい。型と比較するなら分かるが。
Msgboxの中のダブルクォーテーション漏れ。
投稿ミスなんだろう。
(γ) 2020/03/18(水) 14:09


(γ)さん
ありがとうございます。
>数値かどうかの判定がおかしい。型と比較するなら分かるが。
 ↑これはどこの部分でしょうか、InputBoxですか?

>Msgboxの中のダブルクォーテーション漏れ。
 こちらは、納得しました。
(たかし) 2020/03/18(水) 15:33


   If IsNumeric(i) = vbBoolean Then
        Exit Sub
   End If
このコードの意味を説明してもらえますか?
そして具体的にどんな時に、Exit Subが実行されますか?説明ください。

(γ) 2020/03/18(水) 16:37


If i = "False" Then Exit Sub
これだけで、いいんでしょうか?

(たかし) 2020/03/18(水) 18:46


 それはあなたが決めることです。

 数値以外のものが入ってきたら抜けるというなら、
 If Not IsNumeric(i) then 
    数値を入力してください、と警告
    抜ける
 End IF 
 みたいなことは、ありうるかなと思いますが、
 そうでもないですか?
 私のことじゃないので、決めるのはあなたです。

 あなたが提示されたコードなので、その意図はどんなことだったのか
 知りたかったのです。
 (IsNumericって、TrueかFalseを返すので、 vbBoolean( = 11 )には一致しないですよね。)

(γ) 2020/03/18(水) 18:58


 Type:=1 だから、数字か空白、キャンセルしかないのでは。
 (数字以外だとメッセージボックス側で拒否される)
 全角も勝手に半角に修正されるみたいだし。

(BJ) 2020/03/18(水) 19:14


おお、読み飛ばしていました。
数値以外はExcel君が自動的にチェックしますね。
ご指摘ありがとうございました。

(γ) 2020/03/18(水) 19:22


(γ)さん
(BJ)さん
ありがとうございました。
こちらでキャンセル押したときのために
>キャンセル押されたら終了
If i = "False" Then Exit Sub
行こうと思います。

(たかし) 2020/03/18(水) 19:44


こうでは
 >If i = "False" Then Exit Sub
       ↓
  If i = False Then Exit Sub


 >If IsNumeric(i) = vbBoolean Then
       ↓
  If VarType(i) = vbBoolean Then

(マナ) 2020/03/18(水) 20:11


(マナ)さん
ありがとうございます。
やはりvbaの領域は難しいですね(T_T)

?@ If i = False Then Exit Sub
?A If i = "False" Then Exit Sub
↑どちらでも同じ結果は得られましたが
やはり、指摘の書き方が正解なんでしょうね
勉強します

(たかし) 2020/03/19(木) 01:55


マナさん、ありがとうございます。
If VarType(i) = vbBoolean Then 
↑これが頭に浮かばなかったです。何かあったよなあ、とは思いましたが。
 
以下、質問者さんへ。
ちょっと間が空きましたが、解決されたようで何より。
 
InputBoxのキャンセル時の取扱については、
http://officetanaka.net/excel/vba/tips/tips37.htm
「実は奥が深いInputBox」
が参考になるでしょう。
 
最後のほうに、キャンセル時の取扱について記載があります。
戻り値の変数をどの型で宣言するかにも影響するようですね。
実際に動作させて問題なければ良いのかもしれない。
 
少し気になっているのは、Format関数のところ、不首尾に終わった理由について
質問者さんは本当に理解されているんだろうかという点。
ご本人から何も言明がないので。短くしたらと言われて短くしたらうまくいった、
というだけだと少し残念な気がします。
 
# どうも最近、ミスリードする回答をしてしまうことが多い。
# 自分のことなら気合いも入るが、所詮他人事なので、
# 自分の知識の範囲で適当に答えてしまう「らしい」。
# 上手くいかなかったら直せばいいだけと開き直っているせいもあって、
# 迷惑この上ないかもしれない。

(γ) 2020/03/19(木) 19:52


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.