ビジネス一般

仕事のムダを無くそう:VBAで業務効率UP

【現役コンサルタントによる簡単業務改善】
未曾有の大不況の中生き残る為には、ますます効率的に業務をこなさなければなりません。
VBAを使って仕事のムダ/ミスを無くし、業務効率を挙げる方法を事例を交えて紹介します。
ご自分の、または所属する組織の業務効率を上げ、不況を乗り切りましょう。

全て表示する >

【VBAで業務効率UP】 第3回 ExcelからExcelへのデータ集計(3/3)

2009/09/30

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  仕事のムダを無くそう:VBAで業務効率UP
   第3回 ExcelからExcelへのデータ集計(3/3) 2009/09/30
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

■目次
 □ご挨拶
 □目的の確認
 □データ集計Step4 各Excelブックに対し同じ作業を繰り返す
 □データ集計Step5 条件に合うExcelブックだけを集計する
 □データ集計Step6 まとめ・応用
 □アンケート
 □次回予告

■ご挨拶
こんにちわ、
TeamNo2新田です。

皆様、メール/コメントありがとうございます。
少し遅れてしまうことがありますが、
必ず返信しますのでご了承ください。

また、頂いた質問をメルマガ上でご紹介したいと考えております。
質問いただく際に、
「メルマガ上で紹介可」と書いていただけると助かります。

では、今週も元気に参りましょう。


■目的の確認
前回の『頭の中の整理』にも書きましたが、
マクロ作成する際に意外と見落としがちなのは、
なぜそのマクロを作成するのか、という点です。

作業工数の削減なのか、ポカミスに防止なのか
作成したら目的に対してどれだけの効果が出るのか
それを明確にして、マクロ作成を進めないと、
『マクロを作ること』自体がが目的になってしまい、
 ・せっかく作ったものが使えない
 ・作ったけれども効果が作成時間に見合わない
といった事態が起きてしまいます。
(もちろん、自分の練習の為に作るのであれば問題ないですが)

マクロを作る目的をはっきりさせてから作成に臨みましょう。


■データ集計Step4 各Excelブックに対し同じ作業を繰り返す
前回までに、
 ・セルからセルへのデータコピー
 ・データの足し算/引き算
 ・各セルに対し同じ作業を繰り返す
のやり方を確認しました。

今回はそれらを複数のExcelブックに対して実行するやり方を解説します。

今回は「Sub_1.xls」〜「Sub_10.xls」の情報を集計し、
「Main.xls」というファイルに一覧を作成します。

まずはコードから
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub 各Excelブックに対し同じ作業を繰り返す()
    Dim i As Integer
    
    i = 1
    Do While i <= 10 '1
        Workbooks.Open ("C:\Data\Sub_" & i & ".xls") '2
        ThisWorkbook.ActiveSheet.Cells(1 + i, 1) = _
         Workbooks("Sub_" & i & ".xls").ActiveSheet.Cells(2, 3)
        ThisWorkbook.ActiveSheet.Cells(1 + i, 2) = _
         Workbooks("Sub_" & i & ".xls").ActiveSheet.Cells(5, 7)
        ThisWorkbook.ActiveSheet.Cells(1, 1) = _
         ThisWorkbook.ActiveSheet.Cells(1, 1) + _
         Workbooks("Sub_" & i & ".xls").ActiveSheet.Cells(1, 8) '3
        Workbooks("Sub_" & i & ".xls").Close '4
        i = i + 1  '5
    Loop
End Sub
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.この"Do"から下の"Loop"までを、
   iが10以下の間は繰り返しを行います。
2.Excelファイルを開きます。
   上記のように、開くファイルは
  『Workbooks.Open (ファイルのフルパス)』の形で指定します。
3.それぞれ、SubファイルのCells(2, 3)のデータを
   MainファイルのCells(1 + i, 1)に入れ、
   Cells(5, 7)のデータを
   MainファイルのCells(1 + i, 2)に入れます。
   iはファイルを開くたびに1づつ増えていくので、
   Mainファイルの書込み先は一行ずつ下へずれていきます。

   また、MainファイルのCells(1, 1)に、
   SubファイルのCells(5, 7)の値を足していきます。
4.開いたSubファイルを閉じます。
   開くときと異なり、フルパスではなくファイル名だけを指定します。
5.iに1を足して終了。次のSubファイルの集計に移ります。

このマクロを実行することで、
複数ファイルのデータを一括で集計し、一覧を作成する事が出来ます。

コードの書き方は他にも色々考えられます。
あくまで、一例として捉えてください。
今回は出来るだけ、今までに解説してきた内容で書けるようにしています。


■データ集計Step5 条件に合うExcelブックだけを集計する
全てのファイルの情報を集計してよいのであれば問題ありませんが、
 ある条件の時だけ集計する/ある条件の時は集計しない
という事が必要になることもあると思います。

この場合、
いわゆる条件分岐と呼ばれるものを使います。
基本的には
    If aa Then
        ???
    End If
の形で書かれ、"aa"の部分に入る条件式を満たす場合のみ、
"If"から"End If"の間の内容(???の部分)を実行します。

例えば、
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub 条件に合うExcelブックだけを集計する()
    Dim i As Integer
    
    i = 1
    Do While i <= 10
        If i <> 2 Then
            Workbooks.Open ("C:\Data\subData\Sub_" & i & ".xls")
            ThisWorkbook.ActiveSheet.Cells(1 + i, 1) = _
             Workbooks("Sub_" & i & ".xls").ActiveSheet.Cells(2, 3)
            ThisWorkbook.ActiveSheet.Cells(1 + i, 2) = _
             Workbooks("Sub_" & i & ".xls").ActiveSheet.Cells(5, 7)
            ThisWorkbook.ActiveSheet.Cells(1, 1) = _
             ThisWorkbook.ActiveSheet.Cells(1, 1) + _
             Workbooks("Sub_" & i & ".xls").ActiveSheet.Cells(1, 8)
            Workbooks("Sub_" & i & ".xls").Close
        End If
        i = i + 1
    Loop
End Sub
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
とすれば、"i <> 2 "の部分が条件式となり、
"i"が2以外の場合のみ、集計作業を行うことになります。

同じように、iが2と3と5の時だけ集計するのであれば、
条件分岐の箇所を"If i = 2 or i = 3 or i = 5 Then"とすればOKです。

条件分岐は他にも色々と出来ることがあるのですが、
それは別の機会に解説していきます。

■データ集計Step6 まとめ・応用
今回で、
 『毎週月曜日に10枚のエクセルファイルから情報を集計する』
のマクロ化の解説を終了します。

この中で、
 ・セルへのデータの書込み
 ・セルのデータの取り出し
 ・足し算、引き算、割り算、掛け算
 ・変数の使い方
 ・繰り返し作業(Do While〜)
 ・Excelファイルを開く、閉じる
 ・条件分岐
について解説いたしました。

どれも、ExcelVBAを扱う上では基本的な事項ですので、
是非、復習しておいてください。


○応用
今回解説したものを他の事に応用する事もできます。
例えば、
 ThisWorkbook.ActiveSheet.Cells(1 + i, 1) = _
  Workbooks("Sub_" & i & ".xls").ActiveSheet.Cells(2, 3)
の部分のイコールの右と左を入れ替えると
 Workbooks("Sub_" & i & ".xls").ActiveSheet.Cells(2, 3) = _
  ThisWorkbook.ActiveSheet.Cells(1 + i, 1)
となり、"集計"ではなく、
逆に一覧表から個別のファイルへ情報を転記する事が出来ます。

■アンケート
「仕事のムダを無くそう:VBAで業務効率UP」第3回目いかがだったでしょうか。
このメルマガを良いものにしていくため、
また、読者の皆様の業務効率を上げるため、
アンケートに答えていただければ幸いです。

以下の文をコピーしてメール本文へ貼り付け、
TeamNo2@live.jpまでお送りください。
----------------------------------------------------------------------
1.メルマガの内容はどうでしたか?
  以下の中から当てはまるものを選んでください。
  回答:( )

 a.内容がむずかしい  b.内容が簡単すぎる   c.文章が読みにくい
 d.実務的な内容を増やして欲しい  e.マクロの基礎的な内容の説明が欲しい
 f.その他(              )

2.今後、このメルマガで取り上げて欲しいテーマがあれば教えてください。
 (         )

3.マクロに関して悩んでいる事があれば教えてください。
 回答:( )

 a.どの作業をマクロ化すればよいかわからない
 b.どんなマクロを作ればよいかわからない
 c.作りたいマクロを実現する為のコードがわからない

4.作業をマクロ化したいソフトを教えてください。
 回答:( )

 a.Microsoft Excel  b.Microsoft PowerPoint  c.Microsoft Word
 d.Microsoft Access  e.秀丸エディタ  f.CATIA V5
 g.その他(       )

5.「仕事のムダを無くそう:VBAで業務効率UP」への感想を教えてください。
(                                   )

6.あなたの性別・年齢・ご職業を教えてください。(書けるものだけで結構です)
 ・性別(  )
 ・年齢(  )
 ・職業(  )
----------------------------------------------------------------------

また、
 ・こんなマクロを作りたいが、どうすればいいかわからない
 ・こんな作業を効率化したいのだが、どうすればいいかわからない
という相談も受け付けております。
以下のフォーマットでTeamNo2@live.jpまでお送りください。
----------------------------------------------------------------------
1.今、どういったことに悩まれていますか。
  回答:( )

 a.作業を効率化したいのだが、どうすればいいかわからない
 b.マクロを作りたいが、どうすればいいかわからない

2.対象となるソフトウェアを教えてください。
  回答:( )

 a.Microsoft Excel  b.Microsoft PowerPoint  c.Microsoft Word
 d.Microsoft Access  e.秀丸エディタ  f.CATIA V5
 g.手作業 h.その他(       )

3.作業の詳細を教えてください。
  回答:(                                                        )
----------------------------------------------------------------------

■次回予告(09/10/07)
   次回からは新しいテーマ
   『Excelシートの書式・体裁を整える』について解説していきます。 

規約に同意してこのメルマガに登録/解除する

メルマガ情報

創刊日:2009-09-08  
最終発行日:  
発行周期:週刊  
Score!: - 点   

コメント一覧コメントを書く

この記事にコメントを書く

上の画像で表示されている文字を半角英数で入力してください。

※コメントの内容はこのページに公開されます。発行者さんだけが閲覧できるものではありません。 コメントの投稿時は投稿者規約への同意が必要です。

  • コメントはありません。