Sub test()
Dim harai
For harai = 4 To 9
Dim koumoku
koumoku = Range("B" & harai).Value
Dim iwai
iwai = Range("D" & harai).Value
Dim retsu
For retsu = 4 To 10
If Range("I" & retsu).Value = koumoku Then
iwai = iwai + Range("J" & retsu).Value
End If
Next
Range("D" & harai).Value = iwai
Range("E" & harai).Value = Range("D" & harai).Value + Range("C" & harai).Value
Next
End Sub
Sub test_ogawa()
Dim harai
Dim koumoku
Dim iwai
Dim retsu
For harai = 4 To 9
koumoku = Range("B" & harai).Value
iwai = Range("D" & harai).Value
For retsu = 4 To 10
If Range("I" & retsu).Value = koumoku Then
iwai = iwai + Range("J" & retsu).Value
End If
Next
Range("D" & harai).Value = iwai
Range("E" & harai).Value = Range("D" & harai).Value + Range("C" & harai).Value
Next
End Sub
↑自力で改めてここまで到達してください。[a], [b]ともに大切です。
さてさて。 総計を含めるなら、以下の[p], [q], [r], [s]を含める感じですね。
Sub test_ogawa_soukei()
Dim harai
Dim koumoku
Dim iwai
Dim retsu
Dim soukei '[p]
For harai = 4 To 9
koumoku = Range("B" & harai).Value
iwai = Range("D" & harai).Value
For retsu = 4 To 10
If Range("I" & retsu).Value = koumoku Then
iwai = iwai + Range("J" & retsu).Value
soukei = soukei + Range("J" & retsu).Value '[q]
End If
Next
Range("D" & harai).Value = iwai
Range("E" & harai).Value = Range("D" & harai).Value + Range("C" & harai).Value
Next
Range("D10").Value = soukei '[r]
Range("E10").Value = Range("C10").Value + Range("D10").Value '[s]
End Sub
Sub waketeshukei_1()
Dim goukei
Dim migi
Dim hida
For hida = 4 To 9
goukei = 0
For migi = 4 To 10
If Range("I" & migi).Value = Range("B" & hida).Value Then
goukei = goukei + Range("J" & migi).Value
End If
Next
Range("D" & hida).Value = goukei
Range("E" & hida).Value = Range("C" & hida).Value + goukei
Next
Dim soukei
For hida = 4 To 9
soukei = soukei + Range("D" & hida).Value
Next
Range("D10").Value = soukei
Range("E10").Value = Range("C10").Value + soukei
End Sub
Sub waketeshukei_2()
Dim goukei
Dim migi
Dim hida
For hida = 4 To 9
goukei = 0
For migi = 4 To 10
If Range("I" & migi).Value = Range("B" & hida).Value Then
goukei = goukei + Range("J" & migi).Value
End If
Next
Range("D" & hida).Value = goukei
Next
Dim soukei
For hida = 4 To 9
soukei = soukei + Range("D" & hida).Value
Next
Range("D10").Value = soukei
For hida = 4 To 9
Range("E" & hida).Value = Range("C" & hida).Value + Range("D" & hida).Value
Next
Range("E10").Value = Range("C10").Value + soukei
End Sub
↑だいぶ、ロジックがすっきりしますね。
Dim soukei 以下の部分をひとつにまとめなおしてみます。
Sub waketeshukei_3()
Dim goukei
Dim migi
Dim hida
For hida = 4 To 9
goukei = 0
For migi = 4 To 10
If Range("I" & migi).Value = Range("B" & hida).Value Then
goukei = goukei + Range("J" & migi).Value
End If
Next
Range("D" & hida).Value = goukei
Next
Dim soukei '[x1]
For hida = 4 To 9
soukei = soukei + Range("D" & hida).Value '[x2]
Range("E" & hida).Value = Range("C" & hida).Value + Range("D" & hida).Value '[x3]
Next
Range("D10").Value = soukei
Range("E10").Value = Range("C10").Value + soukei
End Sub
↑waketeshukei_1 と同じ形に戻りました。
さらに、「For hida = 4 To 9」の2つのFor Next構文をひとつにまとめてみます。 すると、以下。
Sub waketeshukei_4()
Dim goukei
Dim migi
Dim hida
Dim soukei '[x1]
For hida = 4 To 9
goukei = 0
For migi = 4 To 10
If Range("I" & migi).Value = Range("B" & hida).Value Then
goukei = goukei + Range("J" & migi).Value
End If
Next
Range("D" & hida).Value = goukei
soukei = soukei + Range("D" & hida).Value '[x2]
Range("E" & hida).Value = Range("C" & hida).Value + Range("D" & hida).Value '[x3]
Next
Range("D10").Value = soukei
Range("E10").Value = Range("C10").Value + soukei
End Sub
僕が動画の中で示した回答例は、↑これの souke = soukei + ... の処理をするタイミングを For migi = 4 To 10 ... Next の中にしただけです。 以下。
Sub waketeshukei_5()
Dim goukei
Dim migi
Dim hida
Dim soukei '[x1]
For hida = 4 To 9
goukei = 0
For migi = 4 To 10
If Range("I" & migi).Value = Range("B" & hida).Value Then
goukei = goukei + Range("J" & migi).Value
soukei = soukei + Range("J" & migi).Value '[x2-改]
End If
Next
Range("D" & hida).Value = goukei
' soukei = soukei + Range("D" & hida).Value '[x2-旧]
Range("E" & hida).Value = Range("C" & hida).Value + Range("D" & hida).Value '[x3]
Next
Range("D10").Value = soukei
Range("E10").Value = Range("C10").Value + soukei
End Sub
受講生さんの投稿
(投稿ID: 3055)
[2]で作ったマクロを改変し、さらに、セルD10、セルE10に各列の合計額を記入するマクロとしなさい についてセルD10 にD4からD9の合計額を表示するというマクロを作る場合にはどのような式で書くことができますか?
[1][2]については以下のようなマクロで問題なく動いたのですが、D列の値をそれぞれの項目について値を入れていくというマクロ(累積値ではなく)になったので、合計のマクロが作れませんでした。Range("D10").value=Sum(”D4:D9”).valueというのも試しましたが、15100という値のみ入りました。アドバイスいただければ幸いです。
小川慶一さんのコメント
(コメントID: 4514)
> [3]
> [2]で作ったマクロを改変し、さらに、セルD10、セルE10に各列の合計額を記入するマクロとしなさい についてセルD10 にD4からD9の合計額を表示するというマクロを作る場合にはどのような式で書くことができますか?
> [1][2]については以下のようなマクロで問題なく動いたのですが、D列の値をそれぞれの項目について値を入れていくというマクロ(累積値ではなく)になったので、合計のマクロが作れませんでした。
やってみましょう。
まずは、いただいたコードをまずは以下のように編集しました。
[a] 変数はループより前に宣言
[b] インデントを整理。for next構文、if文内のコードはしっかり→にズラす
↑自力で改めてここまで到達してください。[a], [b]ともに大切です。
さてさて。
総計を含めるなら、以下の[p], [q], [r], [s]を含める感じですね。
> Range("D10").value=Sum(”D4:D9”).valueというのも試しましたが
↑これは、文法的にはないです。。
発展編1で扱いますが、以下ならばあり。
Range("D10").Value = Worksheetfunction.Sum(Range("D4:D9"))
なお、お題では、課題解決のために[1]→[2]と作ってきたマクロをさらに改変して[3]を作る、としていますが、ロジックの理解が難しければ、複数のForNext構文を作り、それぞれで個別に仕事をさせる、というのもありです。
例えば、以下。
さらに言えば、E列に値を入れる部分も、別のForNext構文を作り、そこで実施してもいいかも。以下。
↑だいぶ、ロジックがすっきりしますね。
Dim soukei 以下の部分をひとつにまとめなおしてみます。
↑waketeshukei_1 と同じ形に戻りました。
さらに、「For hida = 4 To 9」の2つのFor Next構文をひとつにまとめてみます。
すると、以下。
僕が動画の中で示した回答例は、↑これの souke = soukei + ... の処理をするタイミングを For migi = 4 To 10 ... Next の中にしただけです。
以下。
最後のは、ちょっと難しかっだかな。。
ともあれ、いろいろ書いてみました。今回提供したサンプルコードを動かしてみたり自分で書いてみたりとして、遊んでみてください。