
下記のプログラムをあげます。
Private Sub cmdatai_Click()
'変数
Dim n As Long '代入された値
'入力用のダイアログボックス表示(初期値)
n = InputBox("整数を入れてください")
n = Val(n)
'IF式 値が入ってされていない時
If n = "" Then
MsgBox "値が入力されていません"
If (n Mod 2) = 1 Then '奇数のとき
MsgBox "奇数です"
ElseIf (n Mod 2) = 0 Then '偶数のとき
MsgBox "偶数です"
Else
MsgBox "0です"
End If
End If
End Sub
見直したのですが、プログラムが何をダイアログボックスに入れてもプログラムが動きません。
どこがおかしいのでしょうか?
ちょいミスだとは思うのですが、どうしてもわかりません。
よろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
#3補足コメントへの返信です。
> ダイアログボックスに全角数字を入れると全部「0です」ともどってきてしまいます。
全部?2例めのInputBox メソッドでは、そうはならない筈ですけれど。
InputBox メソッドをお奨めする理由は
InputBox()関数は一見トッツキはいいけれど、
そういった諸々の、手間数が多くなるってこともあってなのですけれどね、、、。
全部、ではなくて、InputBox()関数については、ですね。
話をInputBox()関数に限ってお話します。
> 全角数字を数字と認識させない方法ありますか?
VBAにはそのような機能は特には用意されていません。
強いてやるなら、
StrConv()関数で文字列を半角に変換したものと、元々の文字列を
比較して同じであるかどうか判別することなら出来ますが、、、。
寧ろ、全角数字を数字として認識させる方を選ぶ場合が多いと思うので、
その方法を挙げておきます。
1)
関数を重ねることを嫌う向きも多いでしょうが、正確さを求めるなら
以下のように、文字列を一旦半角にしてからVal関数。
' ' ///
Private Sub cmdatai_Click() ' InputBox()関数
Dim n As Variant '(セルに)代入された値 (の受け皿となる変数)
' ' 入力用インプットボックスを表示
n = InputBox("整数を入れてください")
If IsNumeric(n) Then
n = Val(StrConv(n, vbNarrow))
If n = 0 Then
MsgBox "0です"
ElseIf n Mod 2 = 1 Then
MsgBox "奇数です"
Else
MsgBox "偶数です"
End If
Else
MsgBox "整数を入力してください"
End If
End Sub
' ' ///
2)
「数字を半角で入力するように」ということを実践出来ない相手に、
「必ず整数を入力せよ」と徹底できるとは思えませんが、
整数が入力されるなら、以下のように型変換関数を使った
強引なやり方もあります。
' ' ///
Private Sub cmdatai_Click() ' InputBox()関数
Dim n As Variant '(セルに)代入された値 (の受け皿となる変数)
' ' 入力用インプットボックスを表示
n = InputBox("整数を入れてください")
If IsNumeric(n) Then
n = CInt(n)
If n = 0 Then
MsgBox "0です"
ElseIf n Mod 2 = 1 Then
MsgBox "奇数です"
Else
MsgBox "偶数です"
End If
Else
MsgBox "整数を入力してください"
End If
End Sub
' ' ///
一応、注意点として、
CInt()関数は、小数点以下を、偶数丸めで返します。
msgbox cint("59.5")
msgbox cint("60.5")
どちらも、60 になってしまうので、整数に丸めるにしても
四捨五入でないことは、この例でお解りかと思います。
テストの点数ということですと、私の経験上、
問題作成者の配点ミスによって急きょ0.5点単位の採点になったことが幾度かありました。
そうでなくても、誤った入力なら誤った入力であることがハッキリするように、
整数かどうかのチェックをした方が無難だと思って#3では2例めを掲げています。
「整数かどうかのチェック」はしないけど「全角数字入力には反応する」というのは、
私の感覚では釣り合いが取れていない印象は受けます。
そういう意味で、InputBox メソッドが使えるExcel環境で、
敢えてInputBox()関数を好んで選ぶ(多数派ですが)場合は、
性善なる入力に期待している、という意味合いが強いことだけは知っておいてください。
#3補足コメントへの返信は、以上です。
No.3
- 回答日時:
こんにちは。
' ' ///
Private Sub cmdatai_Click() ' InputBox()関数
Dim n As Variant '(セルに)代入された値 (の受け皿となる変数)
' ' 入力用インプットボックスを表示
n = InputBox("整数を入れてください")
If IsNumeric(n) Then
n = Val(n)
If n = 0 Then
MsgBox "0です"
ElseIf n Mod 2 = 1 Then
MsgBox "奇数です"
Else
MsgBox "偶数です"
End If
Else
MsgBox "整数を入力してください"
End If
End Sub
' ' ///
とか、
' ' ///
Private Sub cmdatai_Click() ' InputBox メソッド 整数強制版
Dim n As Variant '(セルに)代入された値 (の受け皿となる変数)
Do
' ' 入力用インプットボックス(数値入力専用)を表示
n = Application.InputBox(Prompt:="整数を入れてください", Type:=1)
If VarType(n) = vbDouble Then
If Int(n) = n Then
Exit Do
Else
MsgBox "整数を入力してください"
End If
End If
Loop
n = CLng(n)
If n = 0 Then
MsgBox "0です"
ElseIf n Mod 2 = 1 Then
MsgBox "奇数です"
Else
MsgBox "偶数です"
End If
End Sub
' ' ///
とか。
ありがとうございます!
まだ、DO-LOOP式を習ってないので、一個目で理解しました。
「IsNumeric 関数は、引数 expression が数値として認識できる場合は真 (True) を返します。それ以外は偽 (False) を返します。桁区切り文字や全角の数字も数値として認識されます。」
この関数がわかればあとは全部わかりました。感服いたしました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのTextBoxに半角数字のみ入...
-
ハイフンとマイナス
-
VB2005 TextBoxに何も入力しな...
-
テキストボックスの入力制限
-
1ページだけ入力してもらって...
-
VS2010Exprsライセンスキー取得...
-
至急です。Yahoo!IDを作りたく...
-
ネット内で「事後通販」という...
-
読み方教えてください
-
agodaで現地決済にしたのにカー...
-
海外 スマホ
-
クレジットカードの名義人の入...
-
e-Gov 電子申請について 回答お...
-
アマゾン商品支払い
-
通販で商品を申し込んで断られ...
-
STEAMでゲームを購入したところ...
-
Amazonについてです。 アカウン...
-
カードの請求でApple.combillみ...
-
海外から日本にある自分のパソ...
-
至急回答ください。Amazonカー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ハイフンとマイナス
-
VBAのTextBoxに半角数字のみ入...
-
入力フォーム(電話番号)
-
scanf( )で日本語を入力する方...
-
VB.net テキストボックスの入力...
-
テキストボックスの入力制限
-
VB2005 TextBoxに何も入力しな...
-
メルマガ登録とありますが・・...
-
「10週間ウェブ開発講座」のPut...
-
VBS 条件中の条件
-
gooポイントについて。よろしく...
-
単純なコマンドプロンプトが動...
-
ifでの条件分岐
-
VISAカードの会員番号とは??
-
TextBoxに半角数字のみの入力し...
-
フォーム入力の際、電話番号等...
-
Perl/CGIでのメール記入チェッ...
-
「FROM 句の構文エラーです」が...
-
WinAPIで日本語入力モード(倍...
-
EZ-web用のHDMLについて No2
おすすめ情報
たびたびすみません。
ダイアログボックスに全角数字を入れると全部「0です」ともどってきてしまいます。
全角数字を数字と認識させない方法ありますか?