● Excel2003で、Microsoft QueryのSQL内容を書き換えるVBAプログラムのひな型サンプル
※まだ書きかけ・調査中です。すみません。
バージョン2000だと、もしかしたら「CommandText」のデータの型が配列かもしれません。
もしくは、ピボットテーブルの「CommandText」は配列で、Microsoft Queryの「CommandText」はテキスト型、ということなのかもしれません。いずれにしてもまだ調査してないので、皆さんご自身でも、その辺は調べてみてください。当方も分かり次第、この記事を書き換えたいと思います。
以降に挙げた例は、「ソース2」というシートに、すでに作ってある Microsoft Query の結果の表のSQL(「CommandText」)を自動的に書き換えます。
もし、「ソース2」のSQL内容が、リレーションがない場合でも、以下のコードの例のようにSQL文にてリレーションを組んで、票の結果を更新したりすることができます。
そのほか、すべてのシートのすべてのMicrosoft Query のSQL(「CommandText」)を取得して、「FROM」句のExcelファイルの名前だけを自動的に全部書き換える・・・、とういうことも可能になると思います。
それができると、ある Microsoft Query のExcelファイルをひながたとして一つ作っておけば、複製してファイル名を変えてもそれを流用できることになるので、集計手順が同じなら、それを共通部品化(共通ミニシステム化、共通ミニ集計ファイル化・・・)などもできると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
' ' ' Sub MSQueryCmdTxtRef01() '「ソース2」というシートに、すでに作ってあるMicrosoft Queryの結果表のSQLを書き換えます。 '「QueryTables(1)」は、そのシート上に「一番最初に作られたMicrosoft Queryの結果表」という意味です。 Dim SqlStr01 As String '「CommandText(SQL文)」の「SQLECT」句の内容を代入するための変数 Dim SqlStr02 As String '「CommandText(SQL文)」の「FROM」句の内容を代入するための変数 Dim SqlStr03 As String '「CommandText(SQL文)」の「WHERE」句の内容を代入するための変数 Dim SQLArrey As Variant '「CommandText」のデータの型がもし配列だったら使う変数 ' Debug.Print Worksheets("ソース2").QueryTables(1).Sql ' Debug.Print Worksheets("ソース2").QueryTables(1).CommandText SqlStr01 = "SELECT " SqlStr01 = SqlStr01 & "`T売上明細$`.売上ID, " SqlStr01 = SqlStr01 & "`T売上明細$`.売上日, " SqlStr01 = SqlStr01 & "`T売上明細$`.顧客ID, " SqlStr01 = SqlStr01 & "`T売上明細$`.お名前, " SqlStr01 = SqlStr01 & "`T売上明細$`.電話番号, " SqlStr01 = SqlStr01 & "`T売上明細$`.商品ID, " SqlStr01 = SqlStr01 & "`T売上明細$`.アイテム, " SqlStr01 = SqlStr01 & "`T売上明細$`.実売単価, " SqlStr01 = SqlStr01 & "`T売上明細$`.仕入単価, " SqlStr01 = SqlStr01 & "`T売上明細$`.売上点数, " SqlStr01 = SqlStr01 & "`T売上明細$`.売上金額(1行当り), " SqlStr01 = SqlStr01 & "`T売上明細$`.仕入金額(1行当り), " SqlStr01 = SqlStr01 & "`T売上明細$`.レシートNo, " SqlStr01 = SqlStr01 & "`T売上明細$`.F14, " SqlStr01 = SqlStr01 & "`T売上明細$`.F15, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.顧客ID, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.名, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.姓, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.氏名, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.名フリガナ, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.姓フリガナ, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.国籍, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.性別, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.年齢, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.郵便番号, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.住所01, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.住所02, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.TEL, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.市, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.区, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.郡, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.町, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.字等, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.番地, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.ビル名, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.棟など, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.部屋名, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.階, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.お仕事, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.趣味, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.愛読書カテゴリ, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.ネット通販, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.内ネットオークション, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.免許更新日, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.ダイエット, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.エステ, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.オススメ料理店, " SqlStr01 = SqlStr01 & "`T顧客マスタ$`.年収_ご夫婦込み, " SqlStr01 = SqlStr01 & "`T商品マスタ$`.商品ID, " SqlStr01 = SqlStr01 & "`T商品マスタ$`.メーカー名, " SqlStr01 = SqlStr01 & "`T商品マスタ$`.アイテム, " SqlStr01 = SqlStr01 & "`T商品マスタ$`.上代, " SqlStr01 = SqlStr01 & "`T商品マスタ$`.下代, " SqlStr01 = SqlStr01 & "`T商品マスタ$`.入荷数, " SqlStr01 = SqlStr01 & "`T商品マスタ$`.色系統, " SqlStr01 = SqlStr01 & "`T商品マスタ$`.ターゲット年齢層, " SqlStr01 = SqlStr01 & "`T商品マスタ$`.全商品ID表示フラグ " SqlStr02 = "FROM `C:\pos\pos`.`T顧客マスタ$` `T顧客マスタ$`, `C:\pos\pos`.`T商品マスタ$` `T商品マスタ$`, `C:\pos\pos`.`T売上明細$` `T売上明細$` " SqlStr03 = "WHERE `T売上明細$`.顧客ID = `T顧客マスタ$`.顧客ID AND `T売上明細$`.商品ID = `T商品マスタ$`.商品ID" Debug.Print SqlStr01 Debug.Print SqlStr02 Debug.Print SqlStr03 ' SQLArrey = Array(SqlStr01, SqlStr02, SqlStr03) ' Worksheets("ソース2").QueryTables(1).CommandText = SQLArrey 'バージョン2000だとこれかも?もしくはピボットのCommandTextは配列かも? Worksheets("ソース2").QueryTables(1).CommandText = SqlStr01 & SqlStr02 & SqlStr03 Worksheets("ソース2").QueryTables(1).Refresh 'いらないかも ' End Sub ' ' |