Excel×SQLにおいてテーブルとして扱えるのはシートだけではありません。
Excel独特のテーブルの指定方法を紹介します。
テーブルとして扱えるデータ
Excelにおいてテーブルとして扱えるデータ下記のとおりです。
- シート
- セル範囲
- 名前定義
- テーブル(Excel機能)
シート
シートを指定する場合は [シート名$] です。
[シート名$]
気をつけなければいけないのはデータベース以外のデータがシート内にあると、そのセルまでデータベースの範囲と判定されていまいます。
わかりやすいですが、余計なデータが入り込まないように気をつける必要があります。
セル範囲
セル範囲を指定する場合は [シート名$セル範囲] です。
[シート名$セル範囲]
シート全体ではなく、シート内の指定範囲のみをテーブルとして扱います。
この指定方法であれば欄外のデータを拾うことはありません。
もちろん列全体を指定するのもありです。
セル範囲を指定する際は「$」を付けない相対参照で指定する必要があります。
(下記例で$が付いてるのはシートを指定する際に必要な$です)
$を付けて指定するとエラーが発生します。
名前定義
名前定義をテーブルに指定する方法は2パターンあります。
名前定義の範囲によって指定方法が異なります。
以下の2つの名前定義を作成しました。
ブックの場合
名前定義の範囲がブックの場合は [名前定義] です。
名前定義の範囲がブックの場合:[名前定義] ※[] は無しでもエラーにならない
シートの場合
名前定義の範囲がシートの場合は [シート名$名前定義] です。
名前の定義の前にどのシートの定義なのかを指定する必用があります。
名前定義の範囲がシートの場合:[シート名$名前定義]
テーブル
Excelの機能の「テーブル」もテーブルに指定に利用することが出来ます。
ちょっと回りくどい言い方なのは、直接テーブル名を指定することが出来ずセル範囲に変換する必要があるからです。
テーブルを1つ用意しました。
テーブルをFrom句に指定する構文は以下のとおりです。
Range(テーブル名).ListObject.Range.Address(False, False)
Addressの引数にFalseを指定することで相対参照の形式でセル範囲を取得できます。
テーブルの場合はシート名を指定する必要はありません。
範囲がブックの名前定義と同様です。
シート名を指定することも可能です。
その場合は [ ] で括る必要があります。
シート名とテーブルの範囲の組み合わせが誤っていると誤ったテーブル指定になります。
テーブルの場合はシート名の指定を避けたほうが、記述量・エラートラブルの観点から良さそう。
テーブルの場合、From句の指定が少し手間ですが以下のようなメリットがあります。
- 余計な範囲をテーブル判定しない
- テーブル範囲の拡縮に自動で対応してくれる
Excelシートの自由度の高さ故に色々なテーブルの指定方法が存在します。
次回はExcel×SQLで使用できるSQL文の続きを紹介していきます。