CSVファイルをADOで扱う連載の14回目です。前回の記事はこちらになります。 hirocom777.hatenadiary.org
文字データの選び方
前回は、BETWEENとINを使ったデータの選択方法をご紹介しました。
今回はLIKEを使った文字データの選択方法をご紹介します。
今回もSQLを指定してCSVファイルを確認できるツール(CSV_ReaderSQL)を使います。ツールは以下からダウンロードしてください。
CSV_ReaderSQL110.zip - Google ドライブ
今までと同じようにCSV_ReaderSQLで操作対象のファイル(Test.csv)があるフォルダーを指定しておきましょう。'Test.csv'の内容は以下の様になっているものとします。
"氏名","所属部署","年齢" "大山洋子","営業1課","25" "山田太郎","工務4課","32" "小田京子","営業3課","22" "秋山昇","工務3課","45" "大木みすず","営業2課","28" "一ノ瀬恵美","工務1課","31" "高橋浩二","基礎開発2課","33" "鈴木康夫","基礎開発1課","38"
LIKEを使う
LIKEを使うと色々な文字列の絞込みができます。表記方法は以下の通りです。
文字列式 LIKE 抽出条件
抽出条件は文字列で表しますが、以下の文字は特別な意味を持ちます。
文字 | 説明 |
---|---|
_ | 任意の1文字 |
% | 0文字以上の文字 |
[charlist] | charlistに含まれる全角または半角の1文字 |
[!charlist] | charlistに含まれない全角または半角の1文字 |
それでは色々な選択方法を見ていきましょう。所属部署が営業の人だけを選択してみましょう。SQLコマンド欄に以下を入力して実行ボタンを押してみてください。
SELECT * FROM [Test.csv] WHERE 所属部署 LIKE '営業_課'
結果は以下の様になりました。"_"は任意の1文字なので営業の人すべてが表示されています。
氏名 | 所属部署 | 年齢 |
---|---|---|
大山洋子 | 営業1課 | 25 |
小田京子 | 営業3課 | 22 |
大木みすず | 営業2課 | 28 |
それでは、所属部署が1課の人を選択する場合はどうでしょう。以下のSQLで選択できます。
SELECT * FROM [Test.csv] WHERE 所属部署 LIKE '%1課'
結果は以下の様になりました。"%"は0文字以上の文字なので1課の人すべてが表示されています。
氏名 | 所属部署 | 年齢 |
---|---|---|
大山洋子 | 営業1課 | 25 |
一ノ瀬恵美 | 工務1課 | 31 |
鈴木康夫 | 基礎開発1課 | 38 |
次に、所属部署が営業1課か営業2課の人だ選択する場合です。前回ご紹介したINでも可能ですが、以下の様にSQLを記述する事もできます。
SELECT * FROM [Test.csv] WHERE 所属部署 LIKE '営業[12]課'
結果は以下の様になりました。"[]"の中は3文字以上でも可能です。
氏名 | 所属部署 | 年齢 |
---|---|---|
大山洋子 | 営業1課 | 25 |
大木みすず | 営業2課 | 28 |
また、"[]"の中の文字列の先頭に "!" をつけると否定([]の中の文字を含まない)の意味になります。"%"と合わせて所属部署が1課と2課以外の人を選択するには以下の様にSQLを記述します。
SELECT * FROM [Test.csv] WHERE 所属部署 LIKE '%[!12]課'
結果は以下の様になります。
氏名 | 所属部署 | 年齢 |
---|---|---|
山田太郎 | 工務4課 | 32 |
小田京子 | 営業3課 | 22 |
秋山昇 | 工務3課 | 45 |
また、LIKEの代わりにNOT LIKEを使うことで否定の条件を設定できます。以下のSQLでも同じ結果を得ることができます。
SELECT * FROM [Test.csv] WHERE 所属部署 NOT LIKE '%[12]課'
LIKEを使うときの注意事項
お気づきの方もいらっしゃると思いますが、VBA自体にもLIKEを使った文字の選択を行う機能があります。しかしながら、抽出条件に使用できる文字が多少異なりますので注意が必要です。(任意の1文字はVBAでは"?"、ADOでは"_"。0文字以上の文字はVBAでは"*"、ADOでは"%"。)また、LIKEは処理に時間がかかります。大きなデータでの乱用は避けましょう。
次回は並べ替え
いかがでしょうか。LIKEを使えば文字データを柔軟に検索できますね!!次回は並べ替えです。読み込んだ結果を並べ替えてから表示できると便利ですよね。お楽しみに!!