If Range("C" & gyo).Value = "男性" Then If Range("D" & gyo).Value >= 80 Then Range("H" & gyo).Value = "合格" Else Range("H" & gyo).Value = "不合格" End If ElseIf Range("D" & gyo).Value >= 70 Then Range("H" & gyo).Value = "合格" Else Range("H" & gyo).Value = "不合格" End If
Next End Sub
【答えのエクセルのマクロ】 Sub GogakuFugokaku() Dim gyobangou For gyobangou = 2 To 11 If Range("C" & gyobangou).Value = "男性" Then If Range("D" & gyobangou).Value >= 80 Then Range("H" & gyobangou).Value = "合格" Else Range("H" & gyobangou).Value = "不合格" End If Else If Range("D" & gyobangou).Value >= 70 Then Range("H" & gyobangou).Value = "合格" Else Range("H" & gyobangou).Value = "不合格" End If End If Next End Sub
'【自分の書いたマクロ】 '[1] インデントを整形します。 ' sub ... end sub の中は一段インデント ' if ... elseif ... else ... end if でひとつの塊です。 ' コードの流れをおいきれなかったのは、インデントが整っていなかったからでしょう。 全体構造としては、書かれたマクロは、以下のようなものです。 sub if ... かたまり[1] elseif ... かたまり[2] else ... かたまり[3] end if ... end sub
インデントが揃っていなかったため、この構造を見抜けなかったものと思います。 まずは、以上です。
以下に、インデントを整えた状態のコードを載せます。
Sub gouhi()
Dim gyo
For gyo = 2 To 11
If Range("C" & gyo).Value = "男性" Then
'これでひとかたまり。ここから[1]
If Range("D" & gyo).Value >= 80 Then
Range("H" & gyo).Value = "合格"
Else
Range("H" & gyo).Value = "不合格"
End If
'これでひとかたまり。ここまで
ElseIf Range("D" & gyo).Value >= 70 Then
'これでひとかたまり。ここから[2]
Range("H" & gyo).Value = "合格"
'これでひとかたまり。ここから[21]
Else
'これでひとかたまり。ここから[3]
Range("H" & gyo).Value = "不合格"
'これでひとかたまり。ここから[3]
End If
Next
End Sub
ひらさんの投稿
(投稿ID: 4814)
先ほど問題を解いたところ、回答エクセルに比べendifの数が1つ少なかったのですが、問題なく動きました。
【自分の書いたマクロ】
Sub gouhi()
Dim gyo
For gyo = 2 To 11
If Range("C" & gyo).Value = "男性" Then
If Range("D" & gyo).Value >= 80 Then
Range("H" & gyo).Value = "合格"
Else
Range("H" & gyo).Value = "不合格"
End If
ElseIf Range("D" & gyo).Value >= 70 Then
Range("H" & gyo).Value = "合格"
Else
Range("H" & gyo).Value = "不合格"
End If
Next
End Sub
【答えのエクセルのマクロ】
Sub GogakuFugokaku()
Dim gyobangou
For gyobangou = 2 To 11
If Range("C" & gyobangou).Value = "男性" Then
If Range("D" & gyobangou).Value >= 80 Then
Range("H" & gyobangou).Value = "合格"
Else
Range("H" & gyobangou).Value = "不合格"
End If
Else
If Range("D" & gyobangou).Value >= 70 Then
Range("H" & gyobangou).Value = "合格"
Else
Range("H" & gyobangou).Value = "不合格"
End If
End If
Next
End Sub
elseif(改行せず使用)はあまり使用しない方がよいのでしょうか。
もしすでに過去この件がお話しされていたら申し訳ございませんが、
ご教示いただけますと幸いです。
小川 慶一さんのコメント
(コメントID: 6744)
'【自分の書いたマクロ】
'[1] インデントを整形します。
' sub ... end sub の中は一段インデント
' if ... elseif ... else ... end if でひとつの塊です。
' コードの流れをおいきれなかったのは、インデントが整っていなかったからでしょう。
全体構造としては、書かれたマクロは、以下のようなものです。
sub
if ...
かたまり[1]
elseif ...
かたまり[2]
else ...
かたまり[3]
end if ...
end sub
インデントが揃っていなかったため、この構造を見抜けなかったものと思います。
まずは、以上です。
以下に、インデントを整えた状態のコードを載せます。
以下は、インデントを行う様子を撮影した動画です。
これも参考にしてください。
https://www.dropbox.com/s/bl4sfrh7prroiwe/200805_kaitou.mp4?dl=0