さくっとエクセレートさくっとエクセレート

概要

「フォルダ内の多数のファイルから一覧表(まとめ表)を作りたい」 ──そんなときに、VBAを使わずに実現する方法を紹介します。

ポイントは、「テンプレートで作成したファイルを1か所に集めて、フォルダごとインポートする」 ことです。 この仕組みを作っておくと、定期的な集計作業をボタン1つで更新できるようになります。

コピペでファイル一覧作成は現実的でない

複数のファイルとその内容のリストを、 コピペ(コピー&ペースト)作業で作成するのは現実的ではありません。 特にファイル数が膨大になると、手に負えなくなります。

コピペだけで完結させようとすると、以下の問題が生じます。

  • 作業の手間が多く、ミスの発生確率が高い
  • 新しいデータを追加しても、一覧に反映するのが面倒で放置されがち

解決策:テンプレート + フォルダインポート

ファイルデータの一覧表作成を効率化するには、 フォルダインポート」を使います。 フォルダ内のすべてのファイルを読み込み、リスト化する方法です。

複数ファイルを一括で読み込むために、 これらのファイルの形式は統一しておく必要があります。 そこでテンプレートを活用します。

仕組みの概要

  1. テンプレートファイルを作成し、同じ構成のファイルを簡単に作れるようにする。
  2. 各ファイルを1つのフォルダにまとめて保存する。
  3. パワークエリでフォルダごと読み込み、一覧表を自動作成する。

エクセルでの実装方法

エクセルで、 テンプレートフォルダインポートを使って ファイルデータの一覧表を作成する具体的な方法を説明します。

使用するエクセル機能

機能役割
テーブル各ファイル間のデータ受け渡し欄
ピボットテーブル一覧表を作成
パワークエリフォルダ内の外部ファイルを読み込み、必要行のみ抽出
テンプレート書式統一と再利用性の向上

ファイル・テーブル構成

各ファイルとその中に作成するテーブルは以下のようになります (ファイル名やテーブル名は任意)。

  • ファイル1: 書類テンプレート.xltx
    • M_書類データ: 一覧表で抽出する書類データを格納するテーブル
  • ファイル2: 一覧表.xlsx
    • P_パラメータ: 一覧表のパスを格納するテーブル
    • T_ファイルデータ 書類データの一覧を表示させるピボットテーブル

書類テンプレート.xltxを使って作成した書類ファイルは、 それぞれの M_書類データ テーブルにデータを格納しておき、 一覧表.xlsxから読み込んで T_ファイルデータ ピボットテーブル上で一覧表示させます。 一覧表.xlsx内の P_パラメータ テーブルは、 フォルダ全体を移動しても動作を維持するために使用します。

書類テンプレート書類テンプレートM_書類データM_書類データ書類書類項目A:項目A:項目B:項目B:作成書類作成書類T_ファイルデータT_ファイルデータ一覧表一覧表書類番号書類番号11P_書類パラメータP_書類パラメータ

テーブル名のプレフィックス

テーブル名に設定しているM_T_などのプレフィックス(接頭語)は、
以下の意味でつけています。

  • M_ : マスターテーブル(基本情報を格納)
  • T_ : トランザクションテーブル(時系列ごとのイベントを格納)
  • P_ : パラメータテーブル(パラメータを格納)

※ プレフィックスは必須ではありません

フォルダ構成

定型書類_管理/
 ├─ 一覧表.xlsx(ファイル2)
 ├─ テンプレート/
 │   └─ 書類テンプレート.xltx(ファイル1)
 └─ 作成書類/

一覧表.xlsx(ファイル2)と同一フォルダに テンプレートフォルダを作成し、 この中に書類テンプレート.xltx(ファイル1)を配置します。

一覧表.xlsx(ファイル2)と同一フォルダに 作成書類フォルダも作成し、 この中に書類テンプレート.xltx(ファイル1)を使って作成した書類ファイルを保存します。

作成後のファイル名とフォルダ位置の変更は慎重に

作成書類/のパスが変わると、一覧表.xlsxからの参照リンクが切れるため、
ファイルを作成後は、 作成書類/のフォルダ名や位置は基本的に変更しない ようにしてください
(再設定すれば可能)。

作成書類/に入れる書類ファイルのファイル名は、自由に設定できます。
テンプレート/フォルダ、書類テンプレート.xltxファイルは名前と場所を自由に変えられます。
一覧表.xlsxは、ファイル名を変えられますが、場所は変えられません。

実装手順

2つのファイル(書類テンプレート、一覧表)の作成手順を説明します。 一覧表から書類テンプレートを参照するので、 先に参照先である書類テンプレートから作成します。

名称は任意

ファイル名やテーブル名、列名、クエリ名、変数名は、任意に変更可能です。
好みの名称に置き換えて進めてもOKです。

フォルダの準備

作成していくファイルを配置するフォルダ(定型書類_管理)を用意します。

フォルダ構成の通りに、 定型書類_管理フォルダの中に、次の2つを作成します。

  • テンプレートフォルダ
  • 作成書類フォルダ

用意したフォルダの中にファイルを作成していきます。

ファイル1. 書類テンプレートの作成

書類テンプレートでは、 出力エリアと、作業エリアの2つに分けて作成します。

  • 出力エリア : 書類として出力する領域。 印刷やPDF化する場合は、このエリアのみが出力される。
  • 作業エリア : 書類上には直接出力しない内容を記載する領域。 データをまとめて格納したテーブルなどを配置する。

2つのエリアは、別々のシートに分けることも可能ですが、 同シート上に並べると作業しやすいです。

書類テンプレートの2つのエリア
手順0. テンプレートファイルとして保存する

エクセルでファイルを新規作成したら、 テンプレートファイル形式(.xltx)で 一覧表.xlsxの配置場所(ルート)のサブフォルダに保存します。 ここでは、書類テンプレート.xltxというファイル名で、 定型書類_管理/テンプレート/に保存しています。

手順1. 出力エリアを作成する

書類として出力される領域を作成し、印刷領域の設定をしておきます。

  1. 目的の書類フォーマットを作成する。
    • ※ シート左上に詰めて作成し、下に伸ばしていく。
  2. 印刷範囲を設定する。
    1. 書類のフォーマットの列を選択 > ページレイアウトタブ > 印刷範囲ボタン > 印刷範囲の設定
      改ページプレビュー表示タブより)を使うと、設定範囲がわかりやすい
    2. ページレイアウトタブ > 余白ボタン > ユーザー設定の余白 > ページ中央水平にチェック > OKボタン
  3. 出力エリアの境界線を視覚化 & 固定化する(任意)。
    1. 印刷範囲(出力エリア)右端の1つ右の列を選択
    2. 表示タブ > ウィンドウ枠の固定

印刷範囲の設定 印刷書式の設定 出力エリアの境界線を視覚化 & 固定化する

手順2. 作業エリアにデータテーブルを作成する

一覧表.xlsxで読み込みたい内容をまとめたテーブル(M_書類データ)を、 作業エリアに作成します 一覧表.xlsxで読み込みたくないデータを含めても大丈夫です。 一覧表.xlsx側で非表示できます)。

テーブルの作成方法

  1. 作成するセルを選択
  2. 挿入タブ > テーブルボタン
    Ctrl + t
まとめ表
手順3. テーブルを参照して、出力エリアに値を挿入する

作業エリアに配置したM_書類データを参照して、 出力エリア(書類のフォーマット)に挿入します。

テーブルデータを参照するときは、構造化参照(=テーブル名[列名]の形式)を使用すると便利です。

構造化参照の中に"@"は不要

テーブルセルをクリックして構造化参照の式を作成すると、
数式中に"@"が入ることがあります(=テーブル名[@列名]の形式)。
これは「挿入するセル」と「参照元のテーブルセル」が同じ行に位置する場合に発生します。
構造化参照での @は「同じ行」を意味 するので、
@が数式に含まれたままセルを移動したときにエラーが発生します。
修正時に不便になるので、
今回のケースでは@を使わない構造化参照の式を使いましょう。

  • =テーブル名[@列名]
  • =テーブル名[列名]

ここまでで、書類テンプレートファイルが完成なので、 エクセルテンプレートファイル(.xltx)形式で上書き保存しましょう。

書類のフォーマットへのデータ挿入

ファイル2. 一覧表の作成

作成書類/フォルダに格納したファイル群の情報を 一覧表示するピボットテーブル(T_ファイルデータ)を配置します。 作成書類/フォルダをインポートするときにパワークエリを使用しますが、 相対パスを使った参照を可能にするため、 ファイルパスを格納するP_パラメータテーブルも配置します。

手順0. 仮の書類ファイルを用意する

パワークエリの読み込み設定をする(手順1)ための、 「仮の書類ファイル」を作成します。

  1. 書類テンプレート.xltxをダブルクリックし、新規ファイルを作成する。
  2. 作成書類/フォルダに.xlsx形式で保存する(書類1.xlsxなど)
  3. 作成したファイルを閉じる。
手順1. ファイルデータ一覧を作成する

パワークエリを使って、 作成書類/フォルダ内のファイルを一括で読み込み、 ピボットテーブルで出力します。

  1. データタブ > データの取得 > ファイルから > フォルダーからボタン
  2. 作成書類/フォルダを選択
  3. ナビゲーターが開いたら、結合ボタン横のプルダウン > 結合および読み込み先...を押し、PowerQueryエディターを起動
    • ※ ここから先に進めない場合は、作成書類/フォルダ内のファイルはすべて閉じているか確認する (一時ファイルがあるとうまくいかない可能性あり)。
  4. M_書類データを選択 > OKボタン
  5. データのインポートウィンドウで、次の通りに設定 > OKボタン
    • ピボットテーブルレポートを選択
    • 既存のワークシートを選択 > =$B$6あたりを選択(任意)
    • このデータをデータモデルに追加するは未チェック
手順2. ファイルデータ一覧を見やすく整形する

ピボットテーブルでファイルデータの一覧を見やすくなるよう設定します。

  1. ピボットテーブル上のセルを選択する。
  2. ピボットテーブルのフィールド項目を設定する。
    • 欄に、表示させたい項目をドラッグ&ドロップする (テーブル左側から順に配置される)
  3. ピボットテーブルのデザインを設定する(任意)。
    • デザインタブ > 小計 > 小計を表示しないを選択
    • デザインタブ > レポートのレイアウト > 表形式で表示を選択
  4. ピボットテーブルの名前を変更する(任意)。
    • ピボットテーブル分析タブ

    ピボットテーブル名:T_ファイルデータにする

ピボットテーブルの作成例
手順3. 相対パスに対応させる

ファイルパスを格納したP_パラメータテーブルを作成し、 手順1で設定したパワークエリの処理文の中で使用するように修正します。

  1. ファイルパスを格納したテーブルを作成する。
    • 列名:パス
    • 値:=LEFT(CELL("filename", $A$1), FIND("[", CELL("filename", $A$1)) - 1)
    • テーブル名:P_パラメータ
  2. パワークエリを起動する。
    • データタブ > クエリと接続ボタン > その他のクエリの)作成書類をダブルクリック
  3. クエリを編集する。
    1. 右側のクエリ欄で作成書類選択状態であることを確認

    ホームタブ
    詳細エディターボタン

    1. 以下になるようにコードを追加・修正
    let
        パス = Excel.CurrentWorkbook(){[Name="P_パラメータ"]}[Content]{0}[パス], // 追加
        ソース = Folder.Files(パス & "作成書類"), // 修正("パス &"の部分)
            ...
    in
        変更された型
    1. ホームタブ > 閉じて読み込む

P_パラメータテーブルの作成 クエリの修正

エクセルで実装後の使い方

作成した書類テンプレート.xltx一覧表.xlsxの使い方は下記の通りです。

書類を作成するとき

  1. テンプレートファイル(書類テンプレート.xltx)をダブルクリックして新規ファイル作成開始。
  2. ファイル内を書き換え。
  3. 作成書類/フォルダにxlsx形式ファイルで保存 (ファイル名は自由)。
書類の作成手順

一覧表を見るとき

  1. 一覧表.xlsxを開く。
  2. すべて更新ボタンを押してデータ更新(Ctrl + Alt + F5)。
  3. 適宜、ピボットテーブルの機能(データの並び替え・ソート、フィールド設定の変更)を使って見やすくする。

まとめ

  • VBAを使わずに、複数ファイルをまとめる仕組みを構築できる。
  • 一度テンプレートと構成を作れば、更新作業はボタン1つで完了。
  • データの整合性が保たれ、属人化を防ぐ。

応用:まとめ表から書類を作ることも可能

この記事では 「複数の書類」から「まとめ表」 を作成する方法を紹介しました。 逆に、 「まとめ表」から「複数の書類」を作成することもできます。 このパターンは、 レイアウトや記載項目が定式化された文書 (請求書、契約書、申請書などの定型書類など) に向いています。