Sub gouhi()
Dim gyo
For gyo = 2 To 11
If Range("C" & gyo).Value = "男性" & Range("D" & gyo).Value > 80 Then
Range("H" & gyo).Value = "合格"
ElseIf Range("C" & gyo).Value = "女性" & Range("D" & gyo).Value > 70 Then
Range("H" & gyo).Value = "合格"
Else
Range("H" & gyo).Value = "不合格"
End If
Next
End Sub
Sub gokakufugokaku_using_and_hanako()
Dim gyo
For gyo = 2 To 11
If Range("C" & gyo).Value = "男性" And Range("D" & gyo).Value >= 80 Then
Range("H" & gyo).Value = "合格"
ElseIf Range("C" & gyo).Value = "女性" And Range("D" & gyo).Value >= 70 Then
Range("H" & gyo).Value = "合格"
Else
Range("H" & gyo).Value = "不合格"
End If
Next
End Sub
受講生さんの投稿
(投稿ID: 4735)
動画を見る前に、まず自分でやってみて、答え合わせに動画を見ています。
問題[1]は、出来たのですが、問題[2]でif文を重ねることが思いつかず、下記コードになりました。(>と>=も間違っています)
何度「構文エラー」が出て、修正してやっと出来た!と思い動かしてみたところ、すべて"不合格"となってしまいました。
ギブアップして、動画を見てif文を重ねるのだと納得しました。
時間がかかりますが、何度も演習問題を解くことが、自分の力になると信じて頑張ります。
今後もどうぞよろしくお願いいたします。
受講生さんのコメント
(コメントID: 6608)
投稿したコードですが、コピペしたのですがTabでの空白部分(どのように表現していいかわからず、すみません)がなくなって、見づらくなってしまいました。
申し訳ございません。
小川慶一さんのコメント
(コメントID: 6610)
こんばんは。
惜しい!です。
「複数条件同時に満たすならば」と表現したいときは、「&」ではなく、「And」と書きます。
(講座本編第2章でお伝えしているとおり、「&」は、Visual Basic では、文字列を結合させる演算子です)
ということで、以下なら期待通りの挙動になります。
ところで、「Range("C" & gyo).Value = "女性" & Range("D" & gyo).Value >= 70」という式は「構文エラー」にはならないのであれば、どういう処理になっているのか?
受講生さんなら当然気になるかと思います。
その話は、前提含めてしっかり解説すると「発展編2」講座レベルなのですが...あえて解説してみます。(今は理解できなくてもOKです)
【前提-演算子の優先順位】
結合演算子「&」と比較演算子「=」、「>=」では、「&」のほうが優先して演算されます。
あと、Range("C" & gyo).Value, Range("D" & gyo).Value のカッコ内がさらに優先です。(カッコで囲われているから)
【カッコ内が優先なので、セルの値を求めておきましょう】
Range("C3").Value = "女性"
Range("D3").Value = 75
【さて、では、優先順位にしたがって演算開始...】
"女性" & Range("D3").Value
-> "女性" & 75
-> "女性75"
Range("C3").Value = "女性" & Range("D3").Value
-> Range("C3").Value = "女性75"
-> 75 は "女性75" と同じか?
-> False
Range("C3").Value = "女性" & Range("D3").Value >= 70
-> False >= 70
-> False は 70 以上か?
-> False
ということで、「Range("C3").Value = "女性" & Range("D3").Value >= 70」の戻り値は False 。
同様に gyo = 2 から 11 の範囲で If, Else If で都合20回同様の評価がされますが、その結果はすべて False。
なので、出力される値はすべて「不合格」になります。
以下のマクロも参考にしてください。
* コードをハイライト表示するには、コードの先頭の前で、 [カギカッコ] の中に code と書いください。コードが終わったら[カギカッコ] の中に /code です。
以下も参考にしてください。
https://forum.pc5bai.com/column/tips_to_post/#code-highlight
受講生さんのコメント
(コメントID: 6621)
とても詳しいご説明をありがとうございました!
理解するのに、何度も読んで時間がかかりましたが、分かりました。
> (講座本編第2章でお伝えしているとおり、「&」は、Visual Basic では、文字列を結合させる演算子です)
こちらを、エラーになってから思い出し、「"&"」にしてみたりして
余計エラーが出て降参。答えをみてしまいました。
どうして、すべて「不合格」になったのか分かって、とてもすっきりしました。
下のマクロも試してみました。
後者の「=」が比較演算子だということを知らなければ、全く意味がわかりませんね。
小人ちゃんはちゃんとコード通りに動くのですね。面白いです。
コードのハイライト表示もありがとうございます。
次回から、この方法で添付いたします。
今後も、どうぞよろしくお願いいたします。
小川慶一さんのコメント
(コメントID: 6622)
おはようございます。
> とても詳しいご説明をありがとうございました!
> 理解するのに、何度も読んで時間がかかりましたが、分かりました。
さすがです v(^^*
> 下のマクロも試してみました。
> 後者の「=」が比較演算子だということを知らなければ、全く意味がわかりませんね。
> 小人ちゃんはちゃんとコード通りに動くのですね。面白いです。
さすがです v(^^*
ひきつづき、学習お楽しみください☆