PR

 こんにちは。クジラ飛行机です。毎回、日本語プログラミング言語「なでしこ」を使って、仕事に役立つプログラムを作っていきます。実際に使えるプログラムを題材にすることで、プログラミングの便利さを実感してもらえればと思っています。

 最近では、年賀状を出さない人が増えています。実は私も年賀状を出さない派で、メールで済ませてしまうことが多いです。ですが、会社となると、そうも言ってはいられません。日頃お世話になっている取引先やお客さんに、新年の挨拶を出さない訳にはいきません。

 そこで、今回は、Excelで作った顧客名簿から特定の語句を含む顧客を抽出するというプログラムを作ってみます。もちろん、Excel自体にも抽出機能はありますが、複数のExcelファイルから一気に抽出するのは大変です。なでしこのプログラムで一気に複数Excelファイルを処理していきます。

今回のプログラム

 それでは、複数Excelファイルから特定の語句を含むデータだけを抽出するプログラムを紹介します。

【使い方】

 プログラムを実行すると、どの語句を抜き出すのか、抽出語句を尋ねられます。例えば、横浜に住んでいる顧客なら「横浜」と入力します。次にフォルダの選択を求められます。どのフォルダにあるExcelファイルを処理するのか指定します。ここでは、サブフォルダも含めて、そのフォルダ以下にある全てのExcelファイルを処理します。

 処理が始まると、Excelファイルが次々と開かれ、抽出処理が行われます。全てのファイルを調べ終わった後、抽出したデータを並べ替え、重複したデータがあれば削除して、「抽出結果.csv」というファイルに保存します。

【プログラムソース1】

#ユーザーに質問
「抽出語句は?」と尋ねて、抽出語句に代入。
フォルダ選択して対象フォルダに代入。
#抽出処理
結果は空。
エクセル起動。
対象フォルダ&「*.xls」の全ファイル列挙。
反復
  対象をエクセル開く。
  「A2」から「E200」までエクセル一括取得。#---(*1)
  -1から抽出語句を表ピックアップ。#---(*2)
  結果=結果&改行&それ。
  エクセルブック閉じる
エクセル終了。
#整形処理
結果の0を表ソート。#---(*3)
0を表重複削除。#---(*4)
空白除去。
それを「抽出結果.csv」に保存。
それを言う。
終わり。

007-run1.gif
図1 実行すると抽出語句を尋ねられます

図2 抽出した結果は、Excelで開くことができるCSVファイルとして保存されます

007-run3.gif
図3 うまく抽出ができれば、処理後に抽出したデータが表示されます

【カスタマイズの方法】

 プログラム中の注釈(*1)では、Excelシートの最大取得範囲を指定しています。もし、もっと大きな範囲から取得したい場合は、セルの範囲を「A1」から「Z300」までのように大きくします。

 (*2)では、全ての列を対象にピックアップを行うように指示しています。もし、「名前,電話,住所」の順で並んでいるデータで、住所だけを検索してピックアップしたい場合は、0番から数えて2を指定して『2から抽出語句を表ピックアップ』と全てのフィールドを表す-1という値を、2に書き換えます。

 最後、抽出が終わったあとに、整形処理を行っています。(*3)では、一番左の列(0列目)を基本にして並べ替えを行っています。もし、「名前,カナ,住所」の順で並んでいるデータで、カナ順にしたい場合は、0番から数えた列番号1を指定して、「結果の1を表ソート」のように書き換えます。

 (*4)では、重複データの削除を行っているのですが、ここでは、一番左の列(0列目)を基本にして重複削除を行っています。上と同様にして、好きな列番号に書き換えると効果的に処理できるでしょう。

プログラムの流れ

 ここで、一度プログラムの大まかな流れを確認してみます。流れは以下のようになります。

(1)ユーザーに質問する
(2)Excelファイルを列挙して、それら1つずつについて以下の3から4の処理を行う
(3)Excelでファイルを開いて内容を取得する
(4)語句を抽出する
(5)整形処理を行う
(6)結果をファイルに保存する

プログラムの仕組み

それでは、もう少し詳しく見ていきます。

(1)ユーザーに質問する

 プログラムの冒頭で、どんな語句を抽出するのか、どのフォルダを処理するのかをユーザーに質問しています。

 ユーザーから何か語句を入力してもらうには、『「(質問)」を尋ねる』命令を使います。例えば、ユーザーから名前を入力してもらうプログラムは以下のようになります。

【プログラムソース2】

「お名前は?」と尋ねて、名前に代入。
「こんにちは!{名前}さん。」と言う。

007-input1.gif
図4 「尋ねる」命令では語句を入力できます

007-input2.gif
図5 このような画面が表示されます

(2)Excelファイルの列挙

 ファイルの列挙については、熱心な読者の皆様にはもうお馴染みでしょうか。ここ数回の連載で必ず解説していますので、バックナンバーをご覧ください。「全ファイル列挙」命令を使うと、サブフォルダまで全て列挙します。Excelの拡張子は「.xls」なので指定します。

(3)Excelでファイルを開いて内容を取得する

 Excelファイルを開くには、「エクセル起動」命令を使って、Excelをあらかじめ起動しておく必要があります。そして、ファイルを開くには、『(ファイル名)のエクセル開く』命令を使います。指定範囲のセルを得るには「(左上)から(右下)までエクセル一括取得」命令を取得します。

 Excelファイルを開いて、指定範囲のセルを取得するプログラムは以下のようになります。

【プログラムソース3】

エクセル起動。
「{デスクトップ}test.xls」をエクセル開く。
「A1」から「E3」までエクセル一括取得して、結果に代入。
エクセル終了。
結果を言う。

007-excel.gif
図6 Excelファイルのセルを取得します

 取得したセルは、カンマで区切られたCSV形式のデータです。CSV形式のデータは、Excelなど表計算ソフトで編集できる汎用的な形式です。

(4)語句を抽出する

 語句を抽出するには、「(表)の(列番号)から(語句)を表ピックアップ」命令を使います。列番号は0列目からを指定します。そして、全ての列を対象に検索するには、-1を指定します。

(5)整形処理を行う

 整形処理では、表を並べ替える「(表)の(列番号)を表ソート」命令や、重複行を削除する「(表)の(列番号)を表重複削除」命令、前後の空白を取り除く、「(文字列)の空白除去」命令を利用して、整形処理を行っています。

(6)結果をファイルに保存

 最後に、抽出した結果をファイルに保存します。ファイルにデータを保存するには「(文字列)を(ファイル)に保存」命令が利用できます。

まとめ

 今回のプログラムでは、Excel関連の命令を使ってデータを抽出してみました。Excel関連の命令には、「エクセルxxx」のように名前が付けられています。

 また、データの抽出には「表ピックアップ」命令、並び替えには「表ソート」命令のように「表xxx」のような命令を使いました。

 なでしこには、現在、960個を超える命令がありますのが、命令の名前の一部に必ず機能名がつけられています。なでしこエディタの左側にある「命令検索」タブを使えば、関連する命令を検索できます。

 こうした機能を利用して、命令を探すことで、プログラムに自分が必要とする機能を組み込めることができるかもしれません。ぜひ、使ってみてください。

はじめてこの連載を読む方へ
 この連載では、日本語でプログラムが書ける「なでしこ」というツールを使って仕事に役立ちそうなプログラムを紹介しています。なでしこのプログラムエディター(なでしこエディタ)に、記事中で紹介しているプログラムソースをコピー・アンド・ペーストし、実行ボタンを押すだけで、プログラムを動作させることができます。詳しい内容は本連載第1回をご覧ください。


【PCオンライン編集部からのお願い】
「なでしこ」は個々のユーザーの責任において利用してください。
コラムで紹介するなでしこのプログラム動作については編集部でも確認していますが、すべてのユーザーのパソコン環境で同じように動作することを保証するものではありません。
申し訳ありませんが、紹介する内容について、個別のご質問にはお答えしかねます。なでしこの公式ページでは詳しいマニュアルや質問を受け付ける掲示板が提供されていますので、そちらをご参照ください。
よろしくお願いいたします。