回答編集履歴

6

注意事項の追記

2019/03/11 02:46

投稿

komugi3333
komugi3333

スコア94

test CHANGED
@@ -62,6 +62,26 @@
62
62
 
63
63
 
64
64
 
65
+ ※コメントがやたら長いので、不要なら全部消して見てみてください。
66
+
67
+ コード自体はかなり少ないです。
68
+
69
+
70
+
71
+ なお、他のブックに書き込みたいなら・・・、
72
+
73
+ ・CreateObject関数・GetObject関数(実行時バインディング)、
74
+
75
+   あるいは、Newキーワード(事前バインディング)を使って
76
+
77
+   ファイルを非表示のまま開いて書き込む方法。
78
+
79
+ ・閉じたファイルに書き込みたいなら、DAOやADOにて、
80
+
81
+   ループ+Update系メソッド又はSQL+Execute系メソッドを使って書き込む方法。
82
+
83
+ ・・・などがあります。
84
+
65
85
  ```Excel
66
86
 
67
87
 

5

コードの抜けの追加

2019/03/11 02:46

投稿

komugi3333
komugi3333

スコア94

test CHANGED
@@ -210,7 +210,7 @@
210
210
 
211
211
  objQtbl01.Refresh
212
212
 
213
-
213
+ Exit Sub
214
214
 
215
215
 
216
216
 

4

コメントの追記

2019/03/11 01:15

投稿

komugi3333
komugi3333

スコア94

test CHANGED
@@ -98,7 +98,19 @@
98
98
 
99
99
 
100
100
 
101
-
101
+ 'ここで書き換えるのは基本、
102
+
103
+ '「DBQ=・・・」のフルパスと、
104
+
105
+ '「DefaultDir」のフォルダパスと、
106
+
107
+ '「Destination・・・」のシート名や表の起点のセル(Rangeのところ)
108
+
109
+ 'あと、次段階の「.CommandText = Array(・・・)」の行のそのSQLの内容
110
+
111
+ 'でOKかと思います。
112
+
113
+ '
102
114
 
103
115
 
104
116
 
@@ -128,7 +140,9 @@
128
140
 
129
141
 
130
142
 
131
-
143
+ ’空っぽいのMicrosoft QueryオブジェクトをSheet2のB2セルを起点に作る処理。
144
+
145
+
132
146
 
133
147
  Set objQtbl01 = Worksheets("Sheet2").QueryTables.Add( _
134
148
 
@@ -138,32 +152,24 @@
138
152
 
139
153
 
140
154
 
155
+
156
+
141
- 'こ書き換えるのは基本
157
+ '今回のの例でのSQL文では、Sheet2に対して、
158
+
142
-
159
+ '「B2」セルを起点としてMicrosoftQueryの結果の表を作成します。
160
+
143
- '「DBQ=・・・」フルパスと
161
+ '時点ではオブジェクトしては作成されているのですが、
162
+
144
-
163
+ 'まだ条件設定とかしてないので、Sheet2には何も表示されません。
164
+
165
+
166
+
167
+ 'なお、「Worksheets("Sheet2").」を「Activesheet.」に書き換えると、
168
+
145
- '「DefaultDir」フォルダパスと、
169
+ '現在表示しているシートに結果表が生成されます。
146
-
147
- '「Destination・・・」のシート名や表の起点のセル(Rangeのところ)
148
-
149
- 'あと、次段階の「.CommandText = Array(・・・)」の行のそのSQLの内容
150
-
151
- 'でOKかと思います。
152
170
 
153
171
  '
154
172
 
155
- '今回のこの例でのSQL文では、Sheet2に対して、
156
-
157
- '「B2」セルを起点としてMicrosoftQueryの結果の表を作成します。
158
-
159
- '
160
-
161
- 'なお、「Worksheets("Sheet2").」を「Activesheet.」に書き換えると、
162
-
163
- '現在表示しているシートに結果の表が生成されます。
164
-
165
- '
166
-
167
173
  'また、SQL文(表操作の命令文)の中では、
168
174
 
169
175
  'test01.xlsのSheet1(=システムテーブル)のことを「`Sheet1$`」と
@@ -184,7 +190,9 @@
184
190
 
185
191
 
186
192
 
187
- 'QueryTablesオブジェクトのSQLを書き換え
193
+ 'QueryTablesオブジェクトのSQLを書き換え
194
+
195
+ '(このサンプルでは、毎回、空っぽの状態にSQL文が入ります。)
188
196
 
189
197
  objQtbl01.CommandText = Array("SELECT * FROM `Sheet1$`")
190
198
 
@@ -192,6 +200,12 @@
192
200
 
193
201
  '書き換えたSQLを実行して表に反映。
194
202
 
203
+ '空っぽのMicrosoftQueryのオブジェクトの中に、SQL文で指定した内容の
204
+
205
+ '表ができあがる・・・みたいな雰囲気です。
206
+
207
+ 'ここではじめて、表が表示されます。
208
+
195
209
  '(もともと何も表示されてない場合は、表が自動的に新規作成されます。)
196
210
 
197
211
  objQtbl01.Refresh

3

CommanTextが配列かどうかについての追記

2019/03/10 13:30

投稿

komugi3333
komugi3333

スコア94

test CHANGED
@@ -22,6 +22,12 @@
22
22
 
23
23
 
24
24
 
25
+ CommanTextが配列かそうじゃないかは、一つ何らかの複雑な条件のMicrosoftQueryの結果の表を手動で作ってみて、それのCommanTextの内容をVBAでイミディエイトに表示させ、複数行に分かれて出てきたら配列と思っていいです。1行だけなら配列じゃないかもです。
26
+
27
+ 配列だったらArreyを使うし、配列じゃなかったら、Arreyは要りません。
28
+
29
+
30
+
25
31
  周囲に、AccessやSQLがわかる人が居ましたら、こちらの方法も今後便利かと思います。
26
32
 
27
33
  複数の条件であっても、1つ1つが複雑でないとか、リレーション(VlookUp関数のような紐つけ)も同時に使いながらとか、でしたら、通常のVBAでデータ抽出するよりははるかにラクです。

2

SQLの追加

2019/03/10 13:14

投稿

komugi3333
komugi3333

スコア94

test CHANGED
@@ -34,6 +34,28 @@
34
34
 
35
35
 
36
36
 
37
+ なお、もし、何らかの条件で(K,Q)の列のみを取り出したいとこは、Arreyのところで、
38
+
39
+
40
+
41
+ SELECT K列に相当する列名, Q列に相当する列名 FROM `シート名$` WHERE 条件としたい列名 >= 10;
42
+
43
+
44
+
45
+ みたいな感じで書きます。(SELECTやFROMなどの命令語句の前後には半角スペースが必要です。)
46
+
47
+ WHEREの条件句のところでは、OrやAndなども使って複数の条件が設定できます。
48
+
49
+
50
+
51
+ 詳しくは、Webや先輩、分かる人などに聞いてみてください。
52
+
53
+
54
+
55
+ ここで書いたのはあくまで参考例ですので・・・。
56
+
57
+
58
+
37
59
  ```Excel
38
60
 
39
61
 

1

コードの書き方練習

2019/03/10 13:09

投稿

komugi3333
komugi3333

スコア94

test CHANGED
@@ -14,11 +14,27 @@
14
14
 
15
15
  以下のコードは「D:\test88\test01.xls」というファイルの「Sheet1]を覗きに行って、Sheet2に表示させます。
16
16
 
17
- 覗きに行く「Sheet1」は「"SELECT * FROM `Sheet1$`"」で指定してます。
17
+ 覗きに行く「Sheet1」は「"SELECT * FROM `Sheet1$`"」のところで指定してます。
18
+
18
-
19
+ 長いSQL文は、各句ごとに、Arrayにてカンマで区切って、CommanText(配列)に格納します。
20
+
19
-
21
+ もし、CommanTextが配列じゃなかったら、カンマで区切らずに1行の長い命令文として格納します。
22
+
23
+
24
+
20
-
25
+ 周囲に、AccessやSQLがわかる人が居ましたら、こちらの方法も今後便利かと思います。
26
+
21
-
27
+ 複数の条件であっても、1つ1つが複雑でないとか、リレーション(VlookUp関数のような紐つけ)も同時に使いながらとか、でしたら、通常のVBAでデータ抽出するよりははるかにラクです。
28
+
29
+
30
+
31
+ ※こちらのテストでは、xlsにも、xlsmに対しても、覗きにいくことができました。
32
+
33
+ (ダメだったらすみません!)
34
+
35
+
36
+
37
+ ```Excel
22
38
 
23
39
 
24
40
 
@@ -146,7 +162,7 @@
146
162
 
147
163
 
148
164
 
149
- '書き換えたSQLを実行して表に反映。
165
+ '書き換えたSQLを実行して表に反映。
150
166
 
151
167
  '(もともと何も表示されてない場合は、表が自動的に新規作成されます。)
152
168
 
@@ -154,11 +170,7 @@
154
170
 
155
171
 
156
172
 
157
-
158
-
159
- ' End With
173
+
160
-
161
-
162
174
 
163
175
  Else
164
176
 
@@ -193,3 +205,5 @@
193
205
  End Sub
194
206
 
195
207
  '
208
+
209
+ ```