下記のプログラムをあげます。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) Excel VBA ユーザーフォーム 複数のユーザーフォームの閉じ方。 2 2022/04/27 11:29
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハイフンとマイナス
-
scanf( )で日本語を入力する方...
-
TextBoxに半角数字のみの入力し...
-
VBAのTextBoxに半角数字のみ入...
-
VISAカードの会員番号とは??
-
テキストボックスの入力制限
-
VB2005 TextBoxに何も入力しな...
-
入力フォーム(電話番号)
-
STEAMでゲームを購入したところ...
-
バイクの自賠責をau pay(簡単...
-
e-Gov 電子申請について 回答お...
-
MinecraftのJava版の購入方法に...
-
クレジットカードの名義人の入...
-
ネット内で「事後通販」という...
-
agodaで現地決済にしたのにカー...
-
カードの請求でApple.combillみ...
-
steamの購入エラーについて
-
NTT テレホンカード の価格が額...
-
ヤフーウォレットで偽名と嘘の...
-
https://m.cozaka.net このcoza...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ハイフンとマイナス
-
VBAのTextBoxに半角数字のみ入...
-
TextBoxに半角数字のみの入力し...
-
scanf( )で日本語を入力する方...
-
テキストボックスの入力制限
-
VB2005 TextBoxに何も入力しな...
-
VB.net テキストボックスの入力...
-
教えて!全角文字「μ」の半角文...
-
入力フォーム(電話番号)
-
WinAPIで日本語入力モード(倍...
-
ショートメールの文字入力
-
PHP, Mysql で名前のあいまい...
-
VISAカードの会員番号とは??
-
「FROM 句の構文エラーです」が...
-
単純なコマンドプロンプトが動...
-
メールが送れません
-
Kompozerについて
-
アクセスのフォーム入力時に文...
-
携帯で文字入力を簡単にしたい
-
naconのコントローラーなのです...
おすすめ情報
たびたびすみません。
ダイアログボックスに全角数字を入れると全部「0です」ともどってきてしまいます。
全角数字を数字と認識させない方法ありますか?