'上記の5つのSQL文を一度に格納するための変数。'(Variant型ですが「配列」変数として利用します。Queryの命令文を格納するための'「CommandText」プロパティ自体が、'Variant型の配列だからです。'(とヘルプに書いてあります。)''操作側ファイルがExcel2000の場合は、'SQL文の「句ごと」に配列に格納します。'(配列の各要素ごとに、何文字までかは調べていません。)''操作側ファイルがExcel2010の場合は、'SQL文の「句ごと」に配列に格納しなくても大丈夫です。300文字前後で限界がくるようです。仕様はちょっとわかりません。)'現在のMicrosoftQueryのSQL文をイミディエイトウィンドウに表示します。'操作側が2000の場合は句ごとに複数行、'操作側が2010の場合はひとつひとつの要素に収まるだけのできるだけ1行で表示されます。Worksheets("Sheet1").QueryTables(1).CommandText'SQL文(=セルデータの書き換えや抽出に使う命令文)の作成'下記のようにUPDATE句を用いた「書き換えのための命令」や、'SELECTを用いた「抽出のための命令」などを作れます。'配列の中身が空文字でもエラーになりません。""'ただし、「各句ごと」の区切りには必ず半角スペースを入れます。'一般的にSQL文は、句ごとに半角スペースで区切らないと'エラーになってしまうためです。"」で囲んだ時の、後ろの「"」の前に、'必ず半角スペースを入れています。Queryの場合、最後の「;」を省略しても'エラーにならない仕様になっています。'なぜそんな仕様なのかはわかりませんが・・・。'もちろん入れてもOKです。'というか、入れるほうがいいとは思います。''また、シート(=システムテーブル)の名前は、'「$」をつけて「`」バッククォートで囲む必要があります。QueryのSQLの場合、'シート名(=テーブル名)だけは、'「`」バッククォートを省略したらいけないみたいです。'反面、シート名以外の・・・例えば列名やファイルパスなどは'バッククォートは省略できる場合が多いのですので、'どう省略できるか、ご自分でも試してみてください。'ここでの例だど、例えば「`列a`」のバッククォートを省略して'「列a」と書いてもちゃんとSQLを実行できます。''文字列型の列を書き換える場合は、'書き換え後の値を「'」シングルクオーテーションで囲みます。'数値型の列を書き換える場合、何もつけません。'どの列をどのデータ型にするのかは、ODBCドライバか何かが、'最初の5、6行のデータを見て、自動的に決めてくれるようです。Queryの各列のデータ型は、一般的なデータベースの「型」のように'しっかりと決められます。'違う型の列同士でリレーションを組もうとするとエラーになります。'これはExcelの「セル書式設定」とはまったくの無関係です。'「見た目」「表示」ではなくて、しっかりと内部的にデータ型が区別されます。」とファイルパスを省略してもOKです。Queryの機能によって、'シートに「`D:\test88\test01.xls`」のクエリの結果表が'できてしまっているからではないか?と推察されます。'他方、パスが指定できるという意味では「UNCパス」も使えるかもです。'ただ、シートにすでに、他のPCのxlsのクエリの結果表が表示されていれば'その場合もおそらく、UNCパスの省略はOKだと思います。'作成したSQL文をVariant型の配列変数に代入します。QueryのCommandTextプロパティに代入します。Queryの結果表のSQL内容を書き換えます。よければご自分でもチェックしてみてください。SQLArrey'SQL文を実行します。'ここではSQL文に「UPDATE句」を用いましたので、'ファイルの内容を「閉じたまま」、書き換えたことになります。Worksheets("Sheet1").QueryTables(1).RefreshingDoEventsLoop'↑このコードが終わると、実行結果(ここでは書き換え結果)が'Excelのシートに反映されます。'他のプロシージャにて、'本プロシージャと「Test99()」プロシージャを呼び出すことに作り変えたので'ここではこのコードはコメントアウトします。’「Test99」プロシージャの実行。Sub'#####################################################################################'SQLのSELECT句を使って、閉じたxlsファイルから「閉じたまま」データを抽出するプロシージャです。'ここではすでに作成された、「`D:\test88\test01.xls`」のデータが抽出されます。Queryの結果表が、'事前にシートに表示されていることが前提です。''なお、'おそらくですが、UNCパス(すなわち他のPCのxlsファイル)も使える気がします。''同時に、DoEventsを使って、'「バックグラウンドでデータが更新中であるため、この操作は行えません」'というエラーを回避しています。格納するための変数の宣言。