5倍速!メールマガジン
外部アカウントで登録
            
        
    
受講生の声
新着の講座投稿
新着の講座コメント
新着のノート投稿
投稿一覧へ新着のノートコメント
表示できる投稿はありません。
サイト運営者紹介
        小川 慶一講師/教材/システム開発者紹介
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
                            
                            
                            
                        
        
    
表示できる投稿はありません。
        この学習サイトの教材制作、サポート、システム開発をすべてやっています。
明石 照伸さんの投稿
(投稿ID: 443)
問題をここまでやらせていただいて
ようやく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関数で行っていたような複数の表にまたがる処理が
マクロでできるようになりました。
一回限りの書き捨てのマクロでデータ整合性チェックをしたり
ができるので相当作業時間を短縮できていると思います。なれると関数より楽に、
かつ、もっと複雑な処理ができますね。もっとマクロを学ぶことで仕事自体が
劇的に変わっていく予感がしています。(^^
小川 慶一さんのコメント
(コメントID: 1253)
> もっとマクロを学ぶことで仕事自体が劇的に変わっていく予感がしています。(^^
そうですよー。じゃなきゃ、こんな手間書けてマクロ教えません。
それだけインパクトのデカい技術です。ぜひ、ますますしっかりとモノにしてください!!