CSVファイルをADOで扱う連載の5回目です。前回の記事はこちらになります。
さらなる活用を考える
前回は、ADOがCSVファイルをどのように取り扱っているかを見てきました。CSVファイルで構成されたデータベースの可能性が見えてきましたね。また、データベースとまではいかなくてもCSVファイルを色々操作して活用することができそうです。
そのためにはSQLコマンドを思い通りに指定できる環境が必要です。そこで、以下のツール(CSV_ReaderSQL)を作ってみました。ダウンロードして見てください。
CSV_ReaderSQL110.zip - Google ドライブ
CSV_ReaderSQLの使い方
それではツール'CSV_ReaderSQL'の使い方について説明します。まずフォルダーを用意して、その下に処理するCSVファイルを配置します。ファイル名は'名簿.csv'とします。中身は以下のテキストにしてみましょう。コピーして使ってください。
ID,名前,性別,血液型,生年月日,備考 "001","大山洋子","女性","A","2001/03/06","カラオケ大好き" "002","山田太郎","男性","O","1970/07/05","とくになし" "003","小田京子","女性","AB","2020/02/13","活動的" "004","秋山昇","男性","B","2000/01/02","結構ヒマ"
Excelのマクロを有効にした状態でCSV_ReaderSQLを開いたら、'フォルダー選択'のボタンを押して先ほどのフォルダーをデータベースとして指定します。(CSVファイルの場合は、ファイルが配置されているフォルダーがデータベースになります。)次にSQLコマンド欄に、処理に使用するSQLコマンドを書きます。'実行'ボタンを押すと処理が開始されて、新しく開かれたExcelファイルのシートに結果が表示されます。簡単ですよね!!
実際に試してみましょう。フォルダーを作って、以下のファイルを配置してください。 CSV_ReaderSQLでフォルダーを指定してからSQLコマンド欄に以下のコマンドを入力して実行してみます。
SELECT * FROM [名簿.csv]
ファイルの内容がすべて表示されたExcelファイルが現れました。
ID | 名前 | 性別 | 血液型 | 生年月日 | 備考 |
---|---|---|---|---|---|
001 | 大山洋子 | 女性 | A | 2001/03/06 | カラオケ大好き |
002 | 山田太郎 | 男性 | O | 1970/07/05 | とくになし |
003 | 小田京子 | 女性 | AB | 2020/02/13 | 活動的 |
004 | 秋山昇 | 男性 | B | 2000/01/02 | 結構ヒマ |
この結果はCSV_ReaderADOの読込み結果と一緒です。CSV_ReaderADOでは、内部でこのSQLコマンドを実行していたのです。
SELECTでデータを選択する
それではSELECTについて説明します。SELECTは以下の様に記述します。
SELECT フィールド名 FROM テーブル名
これで、テーブルから指定されたフィールド名のデータを選択するという意味になります。 今回の場合、テーブル名とは'[]'で括られたCSVファイル名です。フィールド名とは、テーブル(CSVファイル)の列の名前で、それぞれの列の先頭行に記述してある文字がこの内容になります。先のSQLコマンドではフィールド名のところが'*'となっていました。これは、すべての列を指定するという意味になります。試しに列を選択して表示してみましょう。以下のSQLコマンドを入力して実行してみてください。
SELECT 名前,生年月日,血液型 FROM [名簿.csv]
指定された列だけが表示されました。
名前 | 生年月日 | 血液型 |
---|---|---|
大山洋子 | 2001/03/06 | A |
山田太郎 | 1970/07/05 | O |
小田京子 | 2020/02/13 | AB |
秋山昇 | 2000/01/02 | B |
また、お気づきだと思いますが列の表示順についても指定できます。生年月日と血液型の表示順が入れ替わっています。この様にADOとSQLコマンドを使うと、一味違うCSVファイルの開き方を実現できます。VBAなどで同じ処理をするコードを書くと結構大変ですよね。
行の選択はどうするの
今回はSQLコマンドを自在に指定できるツールを作ってみました。これで色々なSQLコマンドを試すことができます。またSELECTで列方向の選択をする方法をご紹介しました。ところで今のところ、行はすべて表示する形になっていますが、行の選択はどうするんでしょうか?ということで、次回は行方向の選択に挑戦してみようと思います。お楽しみに!!