【VBA】複数エクセルファイルを1つのファイル転記!業務効率化!

Pocket

こんばんわ!

アタローです。
本日2回目の投稿です。

今回はVBA(ひらたくいうと、エクセルのプログラミング。です。)です。
で、
マクロじゃないの?
とかくいう私もよくわかっていませんw。

VBAは
Visual Basic for Applications
の略でして、コードを記載して
動かす。

それに対し、
マクロは
エクセル上でマクロの記録。
という機能がありますよね?

つまり動作を記録して、
その通りに再現性をもって動かす。

みたいな違いです。
詳しくはオフィスタナカ様サイトに記載がありましたので、
そちらをどうぞ。

VBAや、javascriptを触り始めて4か月程度。
しかも昼間はサラリーマンでパワーを使い果たす日々。
夜は集中力がなくなりつつも
へとへとになりながら一歩ずつここまでやってきました。

少しでも会社で役に立てることや
人生で役立つこと
を目標としてきました。

その一つがこれかなー
少しでも皆さんのお役に立てると幸いです。

複数のファイルを1つのファイルにまとめて効率化

今回ご紹介したいのは、
複数のファイルを1つのファイルにまとめるやり方です。

参考にしたのは、
at mark IT 様のサイト。

めちゃくちゃわかりやすかったので、
自分もこのコードをまねてより簡素なものを作成しました。

さっそくこちらです。

  1. Sub データ収集()
  2. Dim fso As FileSystemObject
  3. Set fso = New FileSystemObject
  4. Dim pass As String
  5. pass = ThisWorkbook.Path & "\報告書"
  6. Dim j As Long '集計の行数
  7. Dim i As Long '各報告書の行数
  8. j = 5
  9. Dim f As File
  10. Dim ファイル名 As String
  11. Dim ファイルパス As String
  12. For Each f In fso.GetFolder(pass).Files
  13.     With Workbooks.Open(f)
  14.         With .Worksheets(1)
  15. 'ファイル名 = Dir(pass & "\*")
  16.  ファイル名 = Dir(f)
  17.             i = 6
  18.             Do While .Cells(i, 1).Value <> ""
  19.                 Sheet1.Cells(j, 1).Value = .Cells(i, 1).Value '日にち
  20.                 Sheet1.Cells(j, 2).Value = .Cells(i, 2).Value '作業者名
  21.                 Sheet1.Cells(j, 3).Value = .Cells(i, 3).Value '作業場所
  22.                 Sheet1.Cells(j, 4).Value = .Cells(i, 4).Value '作業時間
  23.                 Sheet1.Cells(j, 5).Value = .Cells(i, 5).Value '備考
  24.                 Sheet1.Cells(j, 6).Value = ファイル名
  25.                 i = i + 1
  26.                 j = j + 1
  27.             Loop
  28.         End With
  29.         .Close
  30.     End With
  31. Next f
  32. End Sub
  33. Sub クリア()
  34. Dim k As Long
  35. k = Cells(Rows.Count, 1).End(xlUp).Row
  36. Worksheets("Sheet1").Range("A5", Range("A5").Offset(k, 5)).ClearContents
  37. End Sub

いきなりコードを出してもよくわからないので、
操作イメージは以下の通りです。

任意のフォルダの中に、
集計フォルダ(今回コードを書くやつ。ここに集計します。)
と各チームの報告書が入ったフォルダ
を用意します。
この時、「報告書」フォルダ名は固定します。
名前を変えてしまうと読み取りしません。

(コードソースを張り付けるときに
適当に名前を書き換えてもOK)

こちらは報告書フォルダの中身です。
各報告書は以下のような作りにしています。

また集計シートは以下の通りです。

集計のボタンを押すと、

集計ボタンを押すと、
このように、フォルダに格納されているすべてのファイルを見込み、
反映させます。

削除ボタンを押すと、
すべて削除(値のみ)されます。

いちいちエクセルを開いて閉じる作業がいらない。

想定しうるシチュエーションとして、
各チームから提出された報告書
(経費申請書でも業務日報でもなんでもよいですが)
を1枚のエクセルシートにまとめることができます。

もしこれが
2チームとかなら
1つ1つのファイルを開けて、
コピペして、
貼り付けて
報告書を閉じる。

でよいのですが、
10チームあった場合
気が遠くなりますよね?

また作業が正しくとも
エクセルの閉じ忘れとかやっちゃって、
PCが固まる。
自分も固まる。

みたいな経験ありますよね?
いやぜったいあります。

それが回避できるばかりか、
作業効率が1/10か、それ以上になるテクニックです。

VBAセットアップをしてみよう

まずは、VBAのセットアップを行います。
こちらをごらんください。

ファイル → オプション → リボンのユーザー設定 
とすすみます。
すると先ほどの画面上に
”□開発” という項目だけ

なぜか空白になっているのがわかる
かと思います。

ここにチェックを入れたら完成です。
 

Visual Basicが表示されました。
これを開いて、早速コードを先ほどのコードをコピペします。
(ショートカットキーではalt + F11)
あ、
コピペするのは、

左上に、標準モジュールという箇所がありますが、
そちらを開いてコピペするようにしてください。

もし標準モジュールがない場合は、
「挿入」をクリックすると、標準モジュールを追加することができますよ。

今日のところはここまでです~
次回はコードをかいつまんでいこうと思います~

ここまでお読みいただき
誠にありがとうございます!

それではまた!

One Reply to “【VBA】複数エクセルファイルを1つのファイル転記!業務効率化!”

Comments are closed.