5倍速!メールマガジン
外部アカウントで登録
受講生の声
新着の講座投稿
新着の講座コメント
新着のノート投稿
投稿一覧へ新着のノートコメント
表示できる投稿はありません。
サイト運営者紹介
小川 慶一講師/教材/システム開発者紹介
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
三橋さんの投稿
(投稿ID: 3594)
お世話になります。
この課題に対して自分なりにマクロを書いてみたのですが(ソート後のマクロ部分)、一応正しいアウトプットは得られたものの、どの程度汎用性があるのか不安です。このマクロの課題を指摘していただけないでしょうか?
①小川さんのマクロの方がすっきりしている。
②shohinなど分かりやすい変数を使っているため、理解しやすい。
③今後マクロを学んでいく上で、小川さんのマクロ(の考え方)の方がたぶん都合がいい(だろう)。
ぐらいは何となくわかるのですが…。
まだマクロに対して根本的な理解が浅いためよろしくお願いいたします。
下記ががそのマクロとなります。
↓
Sub mondai3()
Dim cHida As Long
Dim cMigi As Long
Dim cLast As Long
Dim cGokei As Long
cLast = Range("A" & Rows.Count).End(xlUp).Row
cMigi = 3
For cHida = 2 To cLast
If Range("E" & cHida).Value <> Range("E" & cHida - 1).Value Then
Range("H" & cMigi).Value = Range("E" & cHida).Value
Range("I" & cMigi).Value = Range("B" & cHida).Value
Range("J" & cMigi).Value = 0
cMigi = cMigi + 1
ElseIf Range("B" & cHida).Value <> Range("B" & cHida - 1).Value Then
Range("H" & cMigi).Value = Range("E" & cHida).Value
Range("I" & cMigi).Value = Range("B" & cHida).Value
Range("J" & cMigi).Value = 0
Debug.Print cGokei
cMigi = cMigi + 1
End If
cGokei = Range("J" & cMigi - 1).Value + Range("F" & cHida).Value
Range("J" & cMigi - 1) = cGokei
Debug.Print cGokei
Next
Range("H" & cMigi).Value = Range("E" & cHida).Value
Range("I" & cMigi).Value = Range("B" & cHida).Value
End Sub
小川 慶一さんのコメント
(コメントID: 5079)
おもしろいご質問、ありがとうございます。
汎用性という意味では、三橋さんの回答例のものでも十分と思います。
> ②shohinなど分かりやすい変数を使っているため、理解しやすい。
↑
ここは一長一短です。
変数に何が入っているのか?をロジックを追ってさらっと理解できない人には、かえって読んでいて負担ですね。
一方、それが理解できる場合は、都度セルの値を見に行くよりも高速で処理できるという利点があります。
僕も、「変数に値を入れてそれと比較」だと解説がしんどい(もっと重要な他のことの理解に受講生の脳内リソースを集中させて欲しい)ときには、前者で行くことがあります。
もしまだ以下の記事を読まれたことがないようでしたら、読んでみて、それからまた思ったことをお知らせいただけますか。
[質問] 同じ機能を実現するマクロの書き方が複数ある場合、どの書き方が良いか分からなくて迷います。
http://www.exvba.com/blog/?p=4378
僕としては、複数の書き方を状況に応じて使い分けられるようになれば良いかなと思います。
以下の件も、たとえば、テストのときには有効だったりします。あるいは、マクロを知らない人にデモとして見せるときなどは。
https://forum.pc5bai.com/lesson/page/150/?id=c9251
三橋さんのコメント
(コメントID: 5082)
汎用性と書いたのはいろんな事例に使える「型」なのかどうか、
ということを伺いたかったのですが、
何度か試してみてわかりました。
小川さんのマクロの方が圧倒的にスピードが速いですね。
私のマクロは時間がかかる。遅い。
違いがよくわかりました。
この課題にはだいぶ時間がかかってしまいましたが、
納得できました。
ありがとうございました。
小川 慶一さんのコメント
(コメントID: 5083)
おはようございます。
> 小川さんのマクロの方が圧倒的にスピードが速いですね。
> 私のマクロは時間がかかる。遅い。
お、そうですね。よく気づかれましたね。
メモリに格納した値を参照するのとセルを見つけてそこにある値を拾ってくるのとでは、コストが違います。
> この課題にはだいぶ時間がかかってしまいましたが、納得できました。
こういう経験を通じて、コンピュータの動きにだんだん詳しくなっていくものです。
長い目で見れば、必要な時間だったかとも思います。
ひきつづきお楽しみください☆