- ベストアンサー
vba if構文ですべて答えが同じになってしまう
- vbaの勉強中ですが、if構文を使用したコードで問題が発生しています。
- 20以下の数値を入力しても、常に「成人です」という結果になってしまいます。
- 本来は20より小さい場合に「未成年です」と表示されるはずです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>a1に20以下の数値、例えば「5」を入力するも ここでいうa1は、Sheet3のa1のことですね? Sub mondai() Sheets("Sheet3").Select Dim nenrei As Long nenrei = Range("a1").Value '◇注◇ If nenrei > 20 Then MsgBox "成人です" Else MsgBox "未成年です" End If End Sub 注の行の Range("a1").Value の記述です。 既に他の方々からコメントがあるように 一般的には、 Sheets("Sheet3").Range("a1").Value このように、どのシートのa1なのかを明示します。 省略して、おっしゃるように書くことも可能ですが、 省略した場合、どのシートの"a1"と見なしてくれるのか? が問題となります。 提示のコードをシートモジュールに配置すると > Sheets("Sheet3").Select この行の有無に関係なく配置したシートと見なします。 他方、標準モジュールに配置すると Activeなシートとみなします。 https://excel-ubara.com/excelvba4/EXCEL251.html この説明がわかりやすいと思います。 起きている事象から、 課題コードをSheet3以外の(例えばSheet1の)シートモジュールに 配置しているものと思います。 さらに言えば、VBAで複数のブックを扱えますので どのブックのどのシートなのかを明示的に指定したほうが 誤解やバグをより生まないコードになります。 私だったら、コードの配置先を問わず、以下のように書きます。 (問題集では標準モジュールに配置することを想定しているものと思います。) Sub mondaiX() Dim nenrei As Long With ThisWorkbook.Sheets("Sheet3") nenrei = .Range("a1").Value End With If nenrei > 20 Then MsgBox "成人です" Else MsgBox "未成年です" End If End Sub
その他の回答 (4)
- gute20
- ベストアンサー率0% (0/1)
実際にテストしてみましたが、コードは正しいようです。 Sheet3で動かしていないと思われます。
お礼
Sheet3でコード作成ができていませんでした。 早々に回答いただきありがとうございました♪
- superside0
- ベストアンサー率64% (461/711)
もしかして Sheet3以外のコードとしてSub monda()を記述していませんか? 例えばSheet1のマクロとしてコード記述すると Sheets("Sheet3").Select や Sheets("Sheet3").Activate を先に入れていても nenrei = Range("a1").Value では、Sheet1のA1セルを取り出してしまいます。 なので、どのシートに書いてもよいように nenrei = Range("a1").Value でなく nenrei = Sheets("Sheet3").Range("a1").Value って書いてしまうのが 手っ取り早いと思います。 (Withを使ってもよいでしょうけど)
お礼
ご指摘の通り、Sheet1のマクロとしてコード記述しておりました。 Sheet3で記述しなおして実行したところ、解決しました! ありがとうございました♪
- watabe007
- ベストアンサー率62% (476/760)
以下で確認して下さい。 Sub mondai() Dim nenrei As Long Sheets("Sheet3").Select nenrei = Range("a1").Value If nenrei > 20 Then MsgBox nenrei & " は、成人です" Else MsgBox nenrei & " は、未成年です" End If End Sub
お礼
コードの記述に誤りがありました。 今回頂いたコードで作成し、sheet1で実行されていることがわかりました。ありがとうございました。
- sngPoi2
- ベストアンサー率49% (475/952)
if nentei >= 20 Then だけど、5を入力すれば未成年になりますよ! 入力をSheet3のA1に入れてますか?
お礼
コードの記述がsheet1でした。ケアレスミスです。 回答いただきありがとうございました。
お礼
Sheets("Sheet3").Range("a1").Valueで解決しました! また、モジュールについての理解で状況が理解できました。 ありがとうございました♪