「エクセルマクロ達人養成塾」、ブログ担当の大椛です。
今回は、「Excelマクロ・VBA基礎コース」のフォローアップ講座から。
こんな問題↓です。
[1]
D列に記載された得点が
80点以上だったら「A判定です」
60点以上だったら「B判定です」
40点以上だったら「C判定です」
それより下だったら「D判定です」
と記載するマクロを作りなさい。
|A列 |B列 |C列 |D列 |E列 |
----------------------------------------------
1 行目 |ID |氏名 |性別 |得点 |合否 |
----------------------------------------------
2 行目 |1 |松本 めぐみ |女性 |65 | |
----------------------------------------------
3 行目 |2 |金沢 京子 |女性 |75 | |
----------------------------------------------
4 行目 |3 |東京 尚広 |男性 |82 | |
----------------------------------------------
5 行目 |4 |金沢 大輔 |男性 |95 | |
----------------------------------------------
6 行目 |5 |広島 留美 |女性 |65 | |
----------------------------------------------
7 行目 |6 |三重 尚広 |男性 |79 | |
----------------------------------------------
8 行目 |7 |神戸 真菜 |女性 |79 | |
----------------------------------------------
9 行目 |8 |米子 理絵 |女性 |62 | |
----------------------------------------------
10行目 |9 |京都 若菜 |女性 |48 | |
----------------------------------------------
11行目 |10 |権田原 竜之介|男性 |34 | |
----------------------------------------------
If文で解決するならば、「Elseif」を使います。
条件を満たさな場合、「もし、そうでなければ~」と、次の条件へと引き継がれていきます。
解答はこんな感じ↓。
Sub kaitou() Dim gyo For gyo = 2 To 11 If Range("D" & gyo) >= 80 Then Range("E" & gyo).Value = "A判定です" ElseIf Range("D" & gyo) >= 60 Then Range("E" & gyo).Value = "B判定です" ElseIf Range("D" & gyo) >= 40 Then Range("E" & gyo).Value = "C判定です" Else Range("E" & gyo).Value = "D判定です" End If Next End Sub
今月、基礎コースを受講されたばかりのSさんからのフィードバックがこちら。
動画の解説でコピーを効率良く使うやり方を見てなるほどと思いました。
コピーひとつとっても、自己流でやるのと、できる人のやり方を実際に見てからするのでは全然違うので、教えていただいてよかったです。
動画で塾長がどうコピーしているかというと、
上記、解答の4行目、
If Range(“D” & gyo) >= 80 Then
をコピーして、
「Elseif」が出てくる6行目、8行目で、Elseだけを書いておいて、
ElseIf Range(“D” & gyo) >= 80 Then
と貼りつけ、点数をそれぞれ60、40に変更。
動画を見ながら、正直僕も驚きました。「そこ、コピペするんかい!」って。
だけど、よくよく考えなくても、この方が間違いなく早いし、正確。
もちろん、5行目の、
Range(“E” & gyo).Value = “A判定です”
も、以下に続く”○判定”の行にコピペ、コピペ。
塾長曰く、
こういうのは実際にマクロを作っている場面に触れるのがいちばん。実際にマクロを書いている様子を目の当たりにしないまま完成型を見ても腑に落ちるものではない。
とのこと。
そういえば、セミナーのとき、「まずは、僕の思考をマネるように努めてください。学ぶ=マネぶです!」と塾長が吠えていたのを思い出しました。