投稿/コメントを表示します。

お世話になります。

問題をここまでやらせていただいて
ようやくFor~Nextがわかってきた
ようです。

まず最初考えた回答が、以下のような
ベタベタのコードでした。

---回答(1)ここから---------------------------------------------
Sub shiharai()

Dim kekkon
kekkon = 0

Dim shussan
shussan = 0

Dim seijin
seijin = 0

Dim reizen
reizen = 0

Dim mimai
mimai = 0

Dim jimu
jimu = 0

Dim gyo
For gyo = 4 To 9
If Range("i" & gyo).Value = "結婚祝い" Then
kekkon = kekkon + Range("j" & gyo).Value

ElseIf Range("i" & gyo).Value = "出産祝い" Then
shussan = shussan + Range("j" & gyo).Value

ElseIf Range("i" & gyo).Value = "成人祝い" Then
seijin = seijin + Range("j" & gyo).Value

ElseIf Range("i" & gyo).Value = "御霊前" Then
reizen = reizen + Range("j" & gyo).Value

ElseIf Range("i" & gyo).Value = "お見舞い" Then
mimai = mimai + Range("j" & gyo).Value

Else
jimu = jimu + Range("j" & gyo).Value

End If
Next



Range("d4").Value = kekkon
Range("e4").Value = kekkon + Range("c4").Value

Range("d5").Value = shussan
Range("e5").Value = shussan + Range("c5").Value

Range("d6").Value = seijin
Range("e6").Value = seijin + Range("c6").Value

Range("d7").Value = reizen
Range("e7").Value = reizen + Range("c7").Value

Range("d8").Value = mimai
Range("e8").Value = mimai + Range("c8").Value

Range("d9").Value = jimu
Range("e9").Value = jimu + Range("c9").Value


Dim kongetu
kongetsu = 0

Dim ruikei
ruikei = 0

For gyo = 4 To 9
kongetsu = kongetsu + Range("d" & gyo).Value
ruikei = ruikei + Range("e" & gyo).Value
Next

Range("d10").Value = kongetsu
Range("e10").Value = ruikei


End Sub
---回答(1)ここまで------------------------------------------------

この回答を書いた後で、もっとすっきりまとめられることに
気づき書いたのが以下になります。

---回答(2)ここから------------------------------------------------

Sub shiwake2()
Dim keihi
Dim gyo_hidari
Dim gyo_migi

For gyo_hidari = 4 To 9
keihi = 0

For gyo_migi = 4 To 9

If Range("i" & gyo_migi).Value = Range("b" & gyo_hidari).Value Then
keihi = keihi + Range("j" & gyo_migi).Value

ElseIf Range("h" & gyo_migi).Value = Range("b" & gyo_hidari).Value Then
keihi = keihi + Range("j" & gyo_migi).Value

End If

Next

Range("d" & gyo_hidari).Value = keihi
Range("e" & gyo_hidari).Value = Range("c" & gyo_hidari).Value + Range("d" & gyo_hidari).Value
Range("d10").Value = Range("d10").Value + Range("d" & gyo_hidari).Value
Range("e10").Value = Range("e10").Value + Range("e" & gyo_hidari).Value
Next



End Sub
---回答(2)ここまで------------------------------------------------

この考え方になじんでからは、実務で新旧の表を比較して差分を抽出したり、
といった、今までVLOOKUP関数で行っていたような複数の表にまたがる処理が
マクロでできるようになりました。

一回限りの書き捨てのマクロでデータ整合性チェックをしたり
ができるので相当作業時間を短縮できていると思います。なれると関数より楽に、
かつ、もっと複雑な処理ができますね。もっとマクロを学ぶことで仕事自体が
劇的に変わっていく予感がしています。(^^
2014/08/06 08:11