Excelの表に書かれている項目を確認して、複数のブックにデータを分割したい場合があります。例えば、長い顧客データを住所の項目を見て市区ごとにブックを分けたい場合などです。その際、手作業でExcelの表から一つ一つコピーして、異なるブックに振り分けたりすることはないでしょうか。PC版のなでしこを使えば自動で処理できます。

  • Excelファイルを住所を元にして複数ブックに分割しよう

    Excelファイルを住所を元にして複数ブックに分割しよう

なでしこ3のPC版を活用しよう

なでしこ3のPC版のインストールについては、前回でも紹介しています。今回のようなExcel処理に便利なのは、なでしこ3のPC版です。なでしこ3のPC版は、Windows/macOS/Linuxとマルチプラットフォームで動作します。

特に、Windowsで手軽に使えるように配慮しており、こちらからダウンロードできるWindows版では、なでしこ3の動作に必要なNode.jsランタイムなど必要なツール一式を同梱したZIPファイルを配布しています。

新しくなったプラグインのインストール機能

なでしこ3PC版では、便利なプラグインは、ネットワークから最新版を必要な時に追加する仕組みとなっています。そのため、プラグインは、一覧を確認して、コマンドラインからインストールするという手順が必要でした。しかし、なでしこ3のPC版エディタの「nako3edit」から一覧から選んでインストールできるようになりました。

  • プラグインのインストールが簡単に

    プラグインのインストールが簡単に

手順ですが、Windowsでは、実行ファイル「start.exe」を実行してメニューを起動して、「なでしこ3のPC版(Node.jsランタイム)を実行」ボタンをクリックして、「nako3edit」を起動します。macOSやLinuxではコマンドラインから「$(npm prefix)/node_modules/.bin/nako3edit」を実行します。

そして、nako3editが起動したら、画面上部にある「プラグイン」の追加をクリックすると上の画面が表示されます。そして、インストールしたいプラグインを選んでインストールします。

nadesiko3-officeプラグインをインストールしよう

さて、今回のプログラムを実行するには「nadesiko3-office」プラグインが必要になります。上記の「プラグインの追加」画面から「nadesiko3-office」を探して「追加」ボタンを押してインストールしましょう。

macOSやLinuxでは、ターミナルで「npm install nadesiko3-office」とコマンドを実行することでも、プラグインをインストールできます。

なお、このofficeプラグインを使う場合、Excelファイル自体を操作するので、本体のインストールは不要となります。

Excelファイルを住所で分割するプログラム

それでは、今回の本題となるプログラムを作成しましょう。最初に、サンプルのExcelファイルを確認してみましょう。ここで利用するのは、次のような顧客名簿のファイルです。こちらからダウンロードできます。この顧客名簿のExcelファイルをB列(住所1)を元に異なるブックに分割しましょう。

  • 今回利用するサンプルの顧客名簿データ

    今回利用するサンプルの顧客名簿データ

ダウンロードしたら、この名簿ファイルをデスクトップに「sample.xlsx」という名前でコピーしておきます。

プログラムを作って実行しよう

先ほど紹介した手順で「nako3edit」(なでしこ3のPC版エディタ)を起動しましょう。そして、「新規ファイルの作成」ボタンをクリックします。エディタが表示されたら、そこに次のプログラムを記述しましょう。

!「nadesiko3-office」を取り込む。
# Excelファイルを読む --- (*1)
「{デスクトップ}/sample.xlsx」のエクセル開く。
# シート内の全データを読み取る --- (*2)
「A2」から「E999」のエクセル一括取得して住所データに代入。
# 辞書型データに分割する --- (*3)
分割辞書={}
住所データを反復:
  変数[F名前, F住所1, F住所2, F住所3, 担当者]は対象。
  もし、F名前===NULLならば、抜ける。
  もし、分割辞書[F住所1]===undefinedならば:
    分割辞書[F住所1] = []
  分割辞書[F住所1]に対象を配列追加。
# 分割したデータをExcelファイルに貼り付けて保存 --- (*4)
住所リストで分割辞書を反復:
  ファイル名=「{デスクトップ}/名簿-{対象キー}.xlsx」
   「保存: {ファイル名}」を表示。
  エクセル新規ブック。
   「A1」に[["名前","住所1","住所2","住所3", "担当者"]]をエクセル一括設定。
   「A2」に住所リストをエクセル一括設定。
  ファイル名にエクセル保存。

画面下部の「実行」ボタンを押してプログラムを実行すると、デスクトップに「名簿-(住所).xlsx」というExcelファイルが保存されます。なお、Excelファイルが開いたままだと、読み取りエラーが出るので、Excelファイルを閉じた状態で実行しましょう。

  • プログラムを実行したところ - 複数のExcelブックが作成される

    プログラムを実行したところ - 複数のExcelブックが作成される

プログラムを確認してみましょう。(*1)では、デスクトップに配置したExcelファイルの「sample.xlsx」を読み取ります。

そして、(*2)ではシート内の「A2」から「E999」までの全セルを取得します。取得したデータは、なでしこの二次元配列変数で得られます。

次に、(*3)では読み取ったデータを一つずつ確認していって、住所1の内容をキーにして変数「分割辞書」に記録していきます。辞書型データは、キーと値をペアにして保存するデータ型です。そのため、市区が記録された「住所1」がキーとなり、住所1の内容ごとにデータが分割されて追記されていきます。

最後の(*4)で、分割したデータをそれぞれExcelファイルに保存します。「{デスクトップ}/名簿-{対象キー}.xlsx」という形式のファイル名でExcelファイルを保存します。ここでは、新規エクセルブック命令を使っているため、まっさらなExcelファイルに住所データを書き込みます。

改造のヒント

なお、このプログラムで分割した後の住所データを開いて見てみると、罫線が引かれていない飾り気のない表となっています。そこで、改造のヒントですが、新規住所録のひな形を作成して、「ひな形.xlsx」の名前で保存しておきましょう。

そして、今回紹介したプログラムの「エクセル新規ブック」と書いてある行を、『「ひな形.xlsx」のエクセル開く』のように書き換えます。これで、分割後の住所データも罫線が引かれた見栄えの良いExcelファイルとなります。

まとめ

以上、今回は、なでしこ3のPC版を利用して、Excelファイルを複数のブックに分割するプログラムを作ってみました。業務でExcelファイルを読み書きする機会は多いと思います。今回の内容を参考にして、業務自動化のプログラムを作ってみてください。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。