Script事業案内エクセル以外ホームSQL入門データの取得:条件指定(SELECT,WHERE)最終更新日:2020-01-02データの取得:条件指定(SELECT,WHERE)エクセルVBAでデータベースを扱うためのSQL入門です。前回で100万件のデータも高速にINSERTすることができるようになりました。これからは、INSERTしたデータをいろいろな方法で取得していきます。取得する条件を指定して(データを絞り込んで)テーブルからデータを取得します。これは、エクセルのワークシートでフィルタをかけてからコピーすることに相応します。前回の「データの挿入:バルクインサート」で作成したデータを使用します。エクセルVBAでデータベースを扱うためのSQL入門です。前回でデータをINSERTすることができるようになりましたが、処理時間に不満がありました。データベースを使うのでしたら、エクセルで扱いに困ってしまうような大量データをストレスなく扱いたいところです。テーブル定義とワークシートは以下になります。TEXT);100万件のデータを作成しテーブルにINSERTしておきます。データの取得:SELECTの構文SELECTの全構文はかなり複雑なものになります。]]任意の式には、列名または各種の式(関数等)を指定できます。関数については、今後すこしずつ紹介していきます。BY・・・、これらは句という言い方をします。日本語では、こういう呼び方がされているので、一応覚えておいた方が良いでしょう。全てを説明するのは困難です。今回は、SELECT...FROM...WHEREこれだけに絞って、さらに一番基本的な使い方だけを説明します。]特殊文字を含まない列名は、列名だけの記述でも構いません。code,name特殊文字を含む場合は、ダブルクオーテーションで囲みます。"code","name"囲み文字はDBにより違いがあります。ServerやAccessは[]角括弧で囲みます。WHERE句を省略すると全行のデータが対象となります。'001'カラムの指定順通りに指定カラムのデータが取得されます。codeが'001'のデータが取得されます。'002'テーブル定義のカラム順通りに、全てのカラムのデータが取得されます。codeが'001'と'002'のデータが取得されます。今後カラム変更を一切行わないのであれば*使用しても良いのですが、RDBを活用していくためには、カラム変更しても動作するようにSQLを書いておいた方が良いでしょう。*は慎重に使うようにしてください。前回までに作成した「データの挿入(INSERT)と全削除」この中には、データ取得用のメソッドを入れてあったのですが、エクセルVBAでデータベースを扱うためのSQL入門です。前回までにテーブルを自由に作れるようになり、ワークシートからの自動作成も出来上がりました。今回は作成したテーブルにデータを追加(INSERT)していきます。SQLite+ADOの場合、正しく動作しないことが分かりました。新たに、SQLite用にメソッドを追加します。取得したデータは最終的にシートに出力するので、シート出力まで対応したメソッドを作成します。Function標準モジュールから呼び出すメソッドは、SheetFromRecordsetになります。取得したカラム名を先頭行に出力シートにデータを出力時は、事前にシートクリアするはずなので、これに対応しています。取得したデータのカラム名を先頭行に出力するかどうかも選択できるようにしています。全VBAコードは以下を参照してください。VBAクラスの全コード:データの取得SQL入門の「データの取得:条件指定(SELECT,WHERE)」時点のVBAクラスの全コードです。クラスモジュール:clsSQLiteシートにある見出しを使ってカラム名リストを作成カラム名リストをVBAで固定文字で指定するのは何かと不便です。シートの先頭行にカラム名を入れておくと、セル値からカラム名リストを自動で作成できます。Function次章では、以上のVBAを使ってのSELECT文の使用例をいくつかのパターンで紹介します。Sub1行目をカラム名として使っています。したがって、データは2行目以降に出力しています。WHEREこの部分の変更として記載します。IN('10001','10003','10005')"item_codeが'10001','10003','10005'のいずれか。IN演算子は、INの前の項目が()内のいずれかと一致している場合に真を返します。17"item_countが15から17の範囲BETWEEN演算子は、ANDの前以上かつANDの後ろ以上の場合に真を返します。これは、以下と同じになります。'1000%'"item_codeが'1000'で始まっているLIKE演算子は、メタ文字によるパターンマッチングを行います。使用できるメタ文字はDBにより違いますが、上記はほとんどのDBでサポートされています。Subcodeが'001と'003'item_codeが'1000'で始まっているitem_countが15から17手元のテストデータでは100万件から43件取得されました。処理時間は、約0.15秒です。データの取得:条件指定の最後にエクセルのワークシートに100万行がある場合、フィルタをかけて絞り込んだ途端にしばらく応答が返ってこなくなります。エクセルのフィルタは強力な機能ですが、データ量が多いと動きがとても重くなります。上記VBA実行では、ほんの一瞬でデータが取得できます。データを抽出しても、あっという間に終わります。データベースの優秀さが如実に感じられるものです。この優秀なデータベースを自在に扱うための言語がSQLです。次回は、キーを指定して集約・集計したり、並べ替えて取得する方法の説明を行います。徐々にSQLの深みに入っていきます。Next)|VBA入門8.セルに文字を入れるとは(Range,Value)|VBA入門9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説10.ひらがな⇔カタカナの変換|エクセル基本操作ホームSQL入門データの取得:条件指定(SELECT,WHERE)このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。GASスプレッドシート入門スプレッドシート応用GAS入門GAS応用ホームSQL入門データの取得:条件指定このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。