+QueryTableオブジェクト」の2つ。※ADO/DAOでは「ODBC」接続ではなく「OLEDB」接続を使うことが多いと思います。SQLを直接は使わない方法として、以下の1つ。(03)「PowerQueryやPowerPivotやリレーションシップ機能+テーブル機能等々」そのほかにもあるかもしれませんが、ぱっと思いつくだけでも上記の3つがあります。結論(僕個人の独断と偏見)僕の場合、クラウドを使ったり特別なことはしないので、以下の優先順位となります。SQL」(03)「PowerQueryやPowerPivotやリレーションシップ機能+テーブル機能等々」(02)と(01)は多分多くのケースでこの順位だと思いますが、(03)については、「(03)でしかできないことがどうしても必要な人」ならば、(03)が一番上にくるかと思います。僕の場合は、そんなことがいまだ無いので、(03)は面倒くさすぎて、使う気になれません。(SQLも使いにくいっぽいですし。)パワーピボットのようなことも、QueryTableオブジェクト(MicrosoftQueryも含まれます)の結果の表に、Offset関数を使って名前定義すれば、バージョン2000(20年前のバージョン)でも同じことができますから。ダッシュボード機能?みたいなのが無いので「絵や図での見える化」のときには劣るかもしれませんが。集計やリストアップだけならまったく同等・・・というか(01)(02)のほうが遥かに(03)よりも「格上」です。「見える化」は「「絵や図での見える化」よりも、文字だけの見える化のほうが多いですから。操作性のシンプルさやVBA連携・SQLでの効率化やコスパアップが可能かどうかで言えば、それも(03)はすごく劣ります。推測しますに、機能自体の構造が複雑すぎて、特にVBAでの「複数の集計やリストアップ」については効率が悪くて仕方がないと思います。「(01)や(02)にて・SQLでやれは2分~10分で済むことを、なんで(03)では、こんなにウィザード作って複雑化しているのでしょうか?」という感じです。複数の(03)の処理を、VBAで連続自動処理することについてはまるでできないですし・・・。(できるのかもしれませんが多分アホみたいに難しく、(02)で実現するほうが10倍効率的でコスパもいいです。(03)でなければならない、というのはかなり特殊な事情ではないかと思います。)その他の理由はこれ以降に示します。その前に「重要な注意事項!!」(01)、(02)、(03)、は、Excelで標準的に良く使われる機能ではないため「Web上にも文献が少ない」です。』のようなWeb記事が多く存在します。この記事は正しいです。記事を書いている方は、私の数十倍、SQLにもVBAにも詳しい人です。このような記事を信用「し過ぎ」ないでください。このWeb記事は、(01)や(02)が「将来は無くなるかもしれない」と役に立たないかのような記述をしていらしゃいますが、それは半分は確かにそのとおりです。「将来は無くなるかもしれない」です。「役に立たないものではありません」。(01)と(02)は、さらに例えば、「Windows10」が「最後のWindows」として今後も存在するうちは、VirtualBOXやVMWareなどの仮想マシン管理ソフトを使って、古いExcelを使い続ける方法もあります。「Excel2000(数千円)」なら「VMWare+XPorWin2000」などで今も使えますし、「Excel2016」などなら、もちろんそのままWin10でネイティブに使い続けられます。いいますか、(01)(02)は、「VMWare+XPorWin2000+Excelの古いバージョン」なんていう面倒くさい方法をとってでも、その利用価値が、「非常に」高いです。そもそも、「VMWare+XPorWin2000」自体も、仮想マシンを一個作っておけば、他のマシンに「それをコピペするだけ」で使えます。仮想マシンはLANにも親PCとともに参加させることができます。そのなかにExcelが入っていれば、もちろんExcel込みでコピペでき・仮想マシンのデータをLAN経由でも利用できる・・・ということになります。それを面倒と思うかラクと思うかは個人差があるかもしれませんが・・・。前のマシンから仮想マシンを消してから作業すれば、ライセンス的にも問題なく「仮想マシンを新マシンにコピペ」するだけで、いつまででも「Excel2000」を使い続けられます。Server、MySQL、オラクルのSQLの学習がわりにも使えます。(VMWereやVirtualBOXのバージョンがWin10の大型バージョンアップに追い付かなくなったらそれもそのとき考えればOKです。)もっと言うと、(01)(02)は、Win10や他のOSをネットから切り離して、大型アップデートを止めて「スタンドアロン環境・あるいは閉じたLAN」ででも、「使い続ける価値のある機能」です。OSのライセンスさえあれば、仮想マシン同士でもLANが組めますし、仮想マシンコピペするだけで、複数のパソコンで使えるし、手間がいらないんですもの。MySQLにも接続できる・しているユーザーが居ることも考えますと、「まだしばらくは消えない」、と思います。いつかは消える可能性はありますが、前述したように「VirtualBOXやVMWareなどの仮想マシン管理ソフト」を使う方法も利用すれば、「あと20年はいけそう」な感じです。そのあいだに、今のPoweQueryなどがどう進化するか、参考文献が増えるか、ですね。逆に言いますと、(03)はそこまでする「魅力が無い」と、そういう機能でもある、と言えます。(その理由も詳しくは後述します。「あと20年は使えそうな機能」であり・かつ・「仮想マシンに入れてでも使い続ける価値のある機能」については、前述のURLのような記事は、信用することはしてもいいですが、「し過ぎ」てはいけないと思います。』の記事の終わりのほうに書いてあるコードと同じ結果を得ることができる、VBAプログラムを2つ、ご紹介しておきます。両方ともバージョン2010で作りました。』のコードは1枚のシート上に複数の表があっても選択して処理できるように高度になっています。パワークエリを直接いじってクロス結合しているのではなく、ExcelVBAのRangeオブジェクトなどでループなどでゴリゴリにクロス結合している・・・・っぽいです。「パワークエリを直接VBAで動かす」様子もわかりません。一般的にはそこまでしなくても普通にMicrosoftQueryを使う方法をマクロ記録しただけでも同様のクロス結合が、自動化は可能です。どちらを使うかは利用シーン次第ですが・・・。(ただ、このサンプルのように範囲を選択すると大きな表の場合は「遅くなる」とは思います。プロシージャの長さと内容のわかりやすさ・ループ処理の数」と、後述のコードのそれを見比べてみてください。基本、ループ処理の個数が増えればるほど、セルを参照すればするほど、プログラムの動作速度は遅くなります。』の記事と同じ、「クロス結合」の結果が表示されます。このサンプルでは「D:\1\5.xlsx」というExcelファイルに記録された、Sheet1~Sheet3(つまり、具、カレー、辛さの3つの表)を「クロス結合」するサンプルです。ところで、このコードは、実は、「マクロの記録」機能で作りました。1つ目のサンプルコードはそれを、SQL文(SELECTのところの1行)だけを短く書き換えただけのものです。MicrosoftQueryやExcelのSQLの場合、複数の表を「あえて結合しない」と「クロス結合」になるようです。よる集計、縦結合(マージ)なども、同じようなパターンでやれます(これらの場合は「結合」というものをして)。以下のサンプルは、「テーブル機能」を併用するものと(1つめ)、しないもの(2つめ)が作ってあって、いずれも、アクティブシートに、「具、カレー、辛さ」の3つの表がクロス結合された結果が表示されます。』というところに注目してください。Query」は、実はExcelからは独立した機能です(Excelが開いてなくても単独使用が可能です)。SQL実行の結果の表は、「QeryTableオブジェクト」に返ってくるように、Excel自身が指示を出しているっぽいです。Query」と「QueryTableオブジェクト操作」は、操作は異なりますが、結果は「QueryTableオブジェクト」に出力される、「同等なもの」と理解して良さそうです。Queryは、テーブル機能の中にQueryTableオブジェクトを埋め込みます。=1つめのサンプル)では、以下、2つのサンプルコードです。短く書いてもOKです。簡単になると思います。'「テーブル機能」の中に、QueryTableオブジェクトを埋め込んでクロス結合を表示するサンプル。'「テーブル機能」は使わずに、つまり、QueryTableオブジェクトを埋め込まないパターン。'そして、クロス結合するサンプル。'短くしただけのコードを、「テーブル機能」に埋め込まないように2行ほど書き換えたもの。'これは「QueryTableオブジェクト」のみで結果を表示しています。'「QeryTableオブジェクト」に返ってくるように、Excel自身が指示を出しているっぽいです。'結果は「QueryTableオブジェクト」に出力される、「同等なもの」と理解して良さそうです。古いバージョンのExcelのためのものです。この行だけは新しいExcelのためのものです。古いExcelでこの2つ目のサンプルを動かすとこの行はエラーになります。コメントアウトして、代わりに以下の行で名前を設定しています。'12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879'''###############################################################################'「テーブル機能」の中に、QueryTableオブジェクトを埋め込んでクロス結合を表示するサンプル。noreferrer">SQL</a>を少し短くしただけの'コードです。Sub'###############################################################################'「テーブル機能」は使わずに、つまり、QueryTableオブジェクトを埋め込まないパターン。'そして、クロス結合するサンプル。noreferrer">SQL</a>を少し'短くしただけのコードを、「テーブル機能」に埋め込まないように2行ほど書き換えたもの。'これは「QueryTableオブジェクト」のみで結果を表示しています。noreferrer">SQL</a>実行の結果の表は、'「QeryTableオブジェクト」に返ってくるように、Excel自身が指示を出しているっぽいです。Query」と「QueryTableオブジェクト操作」は、機能は操作は異なりますが、'結果は「QueryTableオブジェクト」に出力される、「同等なもの」と理解して良さそうです。古いバージョンのExcelのためのものです。この行だけは新しいExcelのためのものです。古いExcelでこの2つ目のサンプルを動かすとこの行はエラーになります。コメントアウトして、代わりに以下の行で名前を設定しています。データ分析編』のP272の図を引用しました。2000での吸い込みプログラムを関数化したもの(xls拡張子)基本、「SQL内容・SQL文」の部分のコードを書き換えるだけでも色々できます。※2010でも動きました。自ファイルも吸い込めます。