• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vba if構文 すべて答えが同じになってしまう)

vba if構文ですべて答えが同じになってしまう

このQ&Aのポイント
  • vbaの勉強中ですが、if構文を使用したコードで問題が発生しています。
  • 20以下の数値を入力しても、常に「成人です」という結果になってしまいます。
  • 本来は20より小さい場合に「未成年です」と表示されるはずです。

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.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

oka0904
質問者

お礼

Sheets("Sheet3").Range("a1").Valueで解決しました! また、モジュールについての理解で状況が理解できました。 ありがとうございました♪

その他の回答 (4)

  • gute20
  • ベストアンサー率0% (0/1)
回答No.4

実際にテストしてみましたが、コードは正しいようです。 Sheet3で動かしていないと思われます。

oka0904
質問者

お礼

Sheet3でコード作成ができていませんでした。 早々に回答いただきありがとうございました♪

回答No.3

もしかして 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を使ってもよいでしょうけど)

oka0904
質問者

お礼

ご指摘の通り、Sheet1のマクロとしてコード記述しておりました。 Sheet3で記述しなおして実行したところ、解決しました! ありがとうございました♪

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

以下で確認して下さい。 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

oka0904
質問者

お礼

コードの記述に誤りがありました。 今回頂いたコードで作成し、sheet1で実行されていることがわかりました。ありがとうございました。

  • sngPoi2
  • ベストアンサー率49% (475/952)
回答No.1

if nentei >= 20 Then だけど、5を入力すれば未成年になりますよ! 入力をSheet3のA1に入れてますか?

oka0904
質問者

お礼

コードの記述がsheet1でした。ケアレスミスです。 回答いただきありがとうございました。

関連するQ&A