達人養成塾 小川です。
今日は、ちょっと小ネタ。
以下の画像のような25件のデータから成る集計表があったとき、とりあえず、日ごとの集計を調べてみたい。
さて、どうするか。
..というか、実際に、昨日、アシスタントの業務状況の表をもらったときに、その内容分析のために僕が書いたマクロ。
こんな感じ↓
Sub main() Dim r As Range Dim dsum As Date For Each r In Selection If r.Offset(0, -4).Value <> r.Offset(-1, -4).Value Then r.Offset(-1, 1).Value = CDate(dsum) dsum = r.Value Else r.Offset(-1, 1).ClearContents dsum = dsum + r.Value End If Next End Sub
で、セルのF2からF26を選択してから実行すると、こうなる。
そしたら、7月16日分だけまだ記入されていないので、手書きで入力する。
セルG2に「0:00」なんて数字が残っているが、気にしない。
だって、「とりあえず、日ごとの集計を調べてみたい」という程度のモチベーションだったんだから。
そこまで凝ったマクロを書くのにかかる手間と時間を考えたら、ざっくりと集計をしてくれるマクロをさくっと書いて、あとからちょこっとだけ修正して完成!くらいの気分でよい。
マクロでイチからジュウまで全部処理できるようなカンペキなものを作らないでも、要は、「とりあえず、日ごとの集計を調べてみたい。」という程度なら、これでいいのだ。
TPOに応じて、そのときの自分がやりたいことに見合ったマクロを書ければ良いのだから、特に人に配布する意思がないならば、あまり凝ったマクロを書こうとしてハマらないようにするべきだ。
..まあ、「そうは言っても、完璧に書きたい!」という方のために、「キチンとした処理」をできるサンプルコードも載せておく。
Sub main_kaihen() Dim r As Range Dim dsum As Date For Each r In Range("F3:F27") If r.Offset(0, -4).Value <> r.Offset(-1, -4).Value Then If dsum > 0 Then r.Offset(-1, 1).Value = CDate(dsum) End If dsum = r.Value Else r.Offset(-1, 1).ClearContents dsum = dsum + r.Value End If Next Range("G27").Value = dsum End Sub
でも、「手元のデータを自分用にちょっと分析したい」なんて程度のときに、イチイチこんなの書く必要はないですよ。
美しさよりも、速さのほうが大事ですから。ハイ。
上に書かれているマクロを読んで、「どこがどう修正されて、その意図とはいったいどういうものなのか?」ということがよく分からない方は、もっと勉強してくださいね。
最初に紹介したマクロ程度のものなら、僕なら3分で書けます。
PC操作の遅い人がExcelを操作して手作業でやるより早いでしょう。
一度マクロを書ければ、データの数が250件だろうと2500件だろうと、同じように動きます。
データの数が25件ならまだしも、250件、2500件になったとき、こういうマクロをさくさくと書けるかどうかは、大きな差になります。