【エクセルVBA入門】バラバラの経費精算書をデータにまとめる

★気に入ったらシェアをお願いします!


みなさん、こんにちは!
梅雨が明けていよいよ到来の夏をたいして味わっていないタカハシ(@ntakahashi0505)です。

エクセルVBAを事務作業に活用する場合、代表的な二つパターンがあります。

1つ目は

データベースからルールに則って特定のデータを抽出する

という使い方で、このパターンは以下の記事から始まるデータ一覧から請求書を作成するシリーズで9回にわたって紹介しました。

【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
初心者向けVBAの実用的な使い方について、請求データ一覧から請求書を自動で作成するを目標に進めます。初回はシートを取り扱うためのWorksheetオブジェクトの準備とセルの値の操作についてお伝えします。

2つ目のパターンはいわばその逆のパターンなのですが

バラバラのデータを一つのデータベースに集約・蓄積する

というもので、こちらのパターンについて経費精算書をテーマに何回かに分けて解説をしていきたいと思います。

イメージとしては、ファイルの中に各人から集めた経費精算書を放り込んで、VBAを走らせたら一つのデータベースに自動でその情報が取り込める、というイメージです。

実際のお仕事でも活用できますでしょ?

とその前に、VBAが全くの初心者という方は以下2つの記事をさらっていただけると良いです。

エクセルVBA超入門!たった10分でスタート地点に立つための方法
エクセルVBA…まず何をしたら良いかわからない…!という声をよく耳にします。今回はVBAプログラミングをいざ書き始める直前の状態を目標に、エクセルVBAの最低限のセッティングの仕方についてお伝えします。
エクセルVBA超入門!プログラミングと変数の基礎中の基礎
この記事はVBAの超入門ということで、簡単なVBAプログラムの例を題材にして、プロシージャや変数、コメントなどの基本的なプログラムの書き方とその実行の仕方について理解いただくのを目標にしています。

では、張り切っていきましょう!

スポンサーリンク

経費精算書のひな形と経費データシートを用意する

まず、各担当者にひな形として使っていただく経費精算書のひな形はこちらのものを使っていただくものとします。

経費精算書ひな形

一般的な作りですね。例として経費太郎さんの7月分ですね。

会社によっては、交通費精算は別のひな形を使われている場合があるかも知れませんが、今回は交通費も他の経費と同じひな形で一緒くたに処理しちゃいます。

もう一方の分、精算花子さんの7月分も用意しました。

経費精算書ひな形その2

そして、これらのデータを蓄積すべきフォーマットはこちらです。

経費データフォーマット

こちらのシートに太郎さんのと花子さんのデータなどをどんどん蓄積していくようなVBAを目標にしていきます。

経費精算書のデータを一行だけ経費データに転記するVBAプログラム

まずは経費精算書から一行だけデータを転記することを目指してみましょう。

ではVBEを開いて、以下のSubプロシージャを作成してみてください。

太郎さんの経費精算書のデータを、経費精算書シートにコピペして実行してみましょう。

結果として、こちらのように経費データシートに一行転記されればOKです。

経費精算書を一行だけ転記

こちらのVBAプログラムですが、やっていることは

  • シートを操作する準備
  • セルの値の転記

の2つだけです。

Worksheetオブジェクト変数の宣言とSet

データ一覧から請求書を作成するシリーズをすでにご覧頂いている場合はおさらいになりますが、Worksheetオブジェクトについてお伝えしておきます。

エクセルVBAで特定のシートに値を書き込んだり、逆に値を取得したりなどの操作をする場合は、操作をするシートをそのオブジェクト変数にセットをしておくと、扱いやすくなります。

エクセルVBAでは変数を使うためには宣言が必要です。

Worksheetオブジェクトを入れるためのオブジェクト変数の宣言は

Dim オブジェクト変数名 As Worksheet

と書きます。

また宣言したオブジェクト変数に特定のシートをオブジェクト変数にセットする場合

Set オブジェクト変数名 = ActiveWorkbook.Worksheets(“シート名”)

と記述します。

オブジェクト変数の場合は、数値や文字列の変数と異なりSetと記述する必要がありましたね。

なお、ActiveWorkbookは現在アクティブになっているワークブックを指しています。

さて、今回取り扱うシートは、「経費精算書」と「経費データ」の二つですので、

と宣言とSetをすることで、それぞれのシートを”wsExpenses”、”wsData”というオブジェクト変数名で取り扱うことができるようになります。

セルの値を転記~CellsとRange

特定のセルから値を取得し、それを別のセルに転記をします。いわゆるコピペですね。

特定のセルの値のして方法は2種類ありまして

Worksheetオブジェクト.Cells(行数, 列数).Value

Worksheetオブジェクト.Range(セル位置).Value

と表現します。

Cellsは行数と列数の数字の組み合わせRangeは”A1″などといったセル位置での指定です。

ケースバイケースで都合の良い指定の仕方を採用するようにしましょう。

例えば

であれば、「経費データ」シートの2行目1列目のセルに、「経費精算書」シートのG4セルの値を転記する、という命令になります。

まとめ

今回はここまでで、

  • Worksheetオブジェクト変数の宣言とSet
  • セルの値を転記

について解説をしてきました。

エクセルVBAにおいて、Worksheetの取り扱いとセルの値の取り扱いはまず間違いなく通る道ですので、ぜひマスターお願いします。

まだ一行を転記できただけですので、第2回で全部きちんと転記できるようにしていきます。

【エクセルVBA入門】Do While~Loopで条件を満たす間繰り返し
エクセルVBAを使ってバラバラの経費精算書のデータを集約するシリーズの第2回です。今回はDo While~Loopを使って条件を満たす間、任意の処理を繰り返すプログラムの書き方をマスターしていきます。

どうぞお楽しみにっ!

連載目次:経費精算書のデータをデータベースに集約する

  1. 【エクセルVBA入門】バラバラの経費精算書をデータにまとめる
  2. 【エクセルVBA入門】Do While~Loopで条件を満たす間繰り返し
  3. 【エクセルVBA入門】Withでプログラムをスッキリわかりやすく書く
  4. 【エクセルVBA入門】他のワークブックをWithで開く&保存せずに閉じる
  5. 【エクセルVBA入門】For Each~Nextでフォルダ内のブック全てを参照する
  6. 【エクセルVBA入門】人為的なミスを回避する方法その1~ファイル名を活用する
  7. 【エクセルVBA入門】人為的なミスを回避する方法その2~マスタを利用
  8. 【エクセルVBA入門】データの重複を防ぐSubプロシージャの作成