ExcelでSQLを使う

エクセルでSQLを使う必須の関数を紹介しします。

ExcelでSQLを使う-007: Excelの表の列名 ー Field.Name

 

監修者紹介

水越美奈(みずこし みな) 

 

  P.E.T.S 行動コンサルテーションズ主宰。ケーナイン・アンリミテッド顧問獣医師。日本獣医畜産大学獣医学部卒業。動物病院勤務を経て渡米し、行動治療学や、動物福祉、しつけ、聴導犬訓練を等を学ぶ。(財)日本盲導犬協会嘱託獣医師。

 

 エクセルを参照、更新、削除するツールの開発において、問題になったのは、

 

1、利用する Provider の選択。

2、エクセル固有の列の型タイプへの対応。

3、ADODB が取得するエクセル固有の列名の存在。

 

であったことは、前稿で述べた通り。本稿では、《ADODB が取得するエクセル固有の列名》についてのおさらいである。

 

1、拡張プロパティで見出し有りを指定すれば、見出しが Field.name になる。

2、拡張プロパティで見出し無しを指定すれば、F1、F2、Fnという Field.name になる。

 

 ここまでは、難なく理解できた。曖昧な理解のままに放置しているのは、次のような場合だ。

  

>オイオイ、軽々にセルを統合するなよ!

>面倒臭いことになるだろうが・・・。

 

と言いたいが、泣く子とユーザーには勝てない。そこで、一体、かかる表の場合は、どういう Field.name になるのかを調査してみた。

  

? GetFieldName("SELECT * FROM [Sheet5$A1:G100]")

ID;4月;F3;F4;5月;F6;F7;

 

 フムフム。このようになるのか?こういう混在した Field.Name を取得するのは、ある意味で仕方のないこと。 だが、混在しないそれを取得する術もある筈。

 

混在しない Field.Name を取得するには? 

 

 

 当たり前と言えば、当たり前のことだが、見出しの2行目を読み込めば、2行目の見出しを Field.Name として取得できる。ただし、同じ Field.Name の発生を防ぐために、同じ Field.Name には 1、2 という区別子がアペンドされている。

 

 結局は、1行目の見出しと2行目の見出しを統合することで初めて、正確な表の見出しを知ることが出来るというのが結論だった。本稿を書くことで、初めてこのことを知った。

 

統合されたセルを持つ表のコピーはサポートしない 

 

 統合されたセルを持つ表をコピーするには、次のようなSQL文を実行することになる。

  

? SQLWriter("SELECT * FROM [Sheet5$A2:G100]","Sheet6")

True

  

 そもそも論になるが、<Sheet5> の表を<Sheet6>にコピーするのにワザワザ SQL文を書くユーザーなんて皆無だろう。SQLWriter の出番は、

 

1、選択クエリ(結合クエリ、ユニオンクエリを含む)

2、クロス集計クエリ

3、重複クエリ

4、不一致クエリ

、列番号を連番で発生させる

 

 この5つを実行することに限られるだろう。

 

 種々の事情で、表から複数の条件を設定して新表を作成する場合には、もちろん《選択クエリー》の実行に該当する。その場合は、見出し部だけは、手作業でコピペするという利用方法でもいいんじゃーないだろうか?老体に鞭打って、《統合セルサポートバージョン》の SQLWriter を書く気にはなれない。

 

 そういうことで、ここらで《エクセルの列名を極める》は、幕引きとする。次は、エクセルブック同士や や Access のテーブルの参照ツールについてのよもやま話。