3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

Excel VBAテクニック: 作業月報から、日ごとの集計を行うマクロ

2010年7月23日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

達人養成塾 小川です。

今日は、ちょっと小ネタ。

以下の画像のような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件になったとき、こういうマクロをさくさくと書けるかどうかは、大きな差になります。

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド