パソコン仕事5倍塾
35,000人を指導した東大卒・元日本IBM社内講師が直伝
MENU
三橋さんの投稿
(投稿ID: 3594)
小川慶一さんのコメント
(コメントID: 5079)
三橋さんのコメント
(コメントID: 5082)
(コメントID: 5083)
たった1ヶ月で人生が劇的に変わりました
佐藤信さん
役員クラスの方から高い評価を受けるようになりました。
佐賀県 - 岩本徹さん
今までまったく知らなかったショートカットキーを使いまくっています。
東京都 - 鷹觜慶さん
年齢60才間近、営業で外回りの時間が多い私でも退社時間が1-2時間程度早くなりました。
東京都 - 宗内隆明さん
受講前もすでにパソコン得意でしたが、そんな私でも受講して本当に良かったと思えた講座です。
東京都 - 佐伯とも子さん
ここまで包括的に仕事に役立つ深い学びを受けれた講座は初めてでした
東京都 - 飯田倫子さん
2024年05月13日 00:20
2024年05月12日 16:21
2024年05月06日 19:09
2024年05月05日 07:10
2024年05月01日 14:04
2024年05月13日 10:21
2024年05月13日 10:17
2024年05月13日 10:05
2024年05月12日 20:26
2024年05月10日 13:24
2022年02月24日 10:59
2019年12月23日 05:57
2019年09月20日 12:29
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
2022年02月02日 00:00
2022年02月02日 03:00
2022年02月02日 06:00
2022年02月02日 09:00
2022年02月02日 12:00
2024年02月15日 18:30
2024年02月09日 17:05
2024年01月19日 13:00
2023年12月31日 17:00
2023年12月21日 14:00
2024年05月05日 09:40
2024年05月03日 11:20
2024年05月02日 10:38
2024年05月02日 05:00
2024年05月01日 18:30
三橋さんの投稿
(投稿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)
おはようございます。
> 小川さんのマクロの方が圧倒的にスピードが速いですね。
> 私のマクロは時間がかかる。遅い。
お、そうですね。よく気づかれましたね。
メモリに格納した値を参照するのとセルを見つけてそこにある値を拾ってくるのとでは、コストが違います。
> この課題にはだいぶ時間がかかってしまいましたが、納得できました。
こういう経験を通じて、コンピュータの動きにだんだん詳しくなっていくものです。
長い目で見れば、必要な時間だったかとも思います。
ひきつづきお楽しみください☆