回答編集履歴
9
ミス
answer
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
例えば以降に挙げたサンプルコードは「同じフォルダ」にある「test01.xls」というファイルの「Sheet1」の表を覗きに行って、取り込みたいExcelファイルのSheet2に表示させます。
|
13
13
|
「1シートにつき1つの表」、が前提ですけど・・・。
|
14
|
-
(※コメントがやたら長いので、不要なら全部消して見てみてください。コード自体はかなり少ないです。 あと、「xlsmやxlsx」を読みに行くときは、"DriverId=790;"を"DriverId=1046;"に書き変えたほうがいいかもしれません。)
|
14
|
+
(※コメントがやたら長いので、不要なら全部消して見てみてください。コード自体はかなり少ないです。 あと、「xlsmやxlsx」を読みに行くときは、"DriverId=790;"を"DriverId=1046;"に書き変えたほうがいいかもしれません。)※こちらのテストでは、xlsにも、xlsmに対しても、覗きにいくことができました。 (ダメだったらすみません!)
|
15
15
|
|
16
16
|
リボンやクイックツールバーにて「ボタン化」すれば、押すたびに同じ抽出結果が得られます。
|
17
17
|
あるいはSQLを書き換えれば異なる結果が得られます。
|
@@ -33,11 +33,12 @@
|
|
33
33
|
配列だったらArreyを使うし、配列じゃなかったら、Arreyは要りません。
|
34
34
|
|
35
35
|
SQLを使う場合、複数の条件であっても、1つ1つが複雑でないとか、リレーション(VlookUp関数のような紐つけ)も同時に使いながらとか、でしたら、通常のVBAでデータ抽出(取り込み)するよりははるかにラクだとは思います。
|
36
|
+
また、リレーションが使えるので、たとえば
|
37
|
+
・「顧客マスタと売上明細を、”顧客ID”の値で紐付けて、その横結合結果(購入履歴)を表示」とか、
|
38
|
+
・「顧客IDごとに商品カテゴリごとにグループ化して売り上げ集計」とか、
|
39
|
+
・「いつからいつまでのどの地域のお客様の売上集計」とか、
|
40
|
+
いろんなリストアップや集計ができます。
|
36
41
|
|
37
|
-
※こちらのテストでは、xlsにも、xlsmに対しても、覗きにいくことができました。 (ダメだったらすみません!)
|
38
|
-
|
39
|
-
リレーションが使えるので、たとえば「顧客マスタと売上明細を、”顧客ID”の値で紐付けて、その横結合結果(購入履歴)を表示」とか、「顧客IDごとに商品カテゴリごとにグループ化して売り上げ集計」とか、「いつからいつまでのどの地域のお客様の売上集計」とか、いろんなリストアップや集計ができます。
|
40
|
-
|
41
42
|
SQL内容を書き換えれば、いろんな抽出結果が得られると思います。
|
42
43
|
詳しくは、Webや先輩など、SQLのことがよく分かる人などに聞いてみてください。
|
43
44
|
|
8
ミス
answer
CHANGED
@@ -111,11 +111,11 @@
|
|
111
111
|
Connection:=s_Cnn01, _
|
112
112
|
Destination:=Worksheets("Sheet2").Range("B2"))
|
113
113
|
|
114
|
-
'今回のこの例では、今開いているブックの「Sheet2」シートに対して、
|
114
|
+
'今回のこの例(上記コード)では、今開いているブックの「Sheet2」シートに対して、
|
115
115
|
'「B2」セルを起点としてMicrosoftQueryの結果の表を作成します。
|
116
116
|
|
117
|
-
'この時点では、オブジェクトしては作成されているのですが、
|
117
|
+
'この時点では、QueryTableオブジェクトとしては作成されているのですが、
|
118
|
-
'まだ条件設定とかしてないので、Sheet2には何も表示されません。
|
118
|
+
'まだSQL文での条件設定とかをしてないので、Sheet2には何も表示されません。
|
119
119
|
|
120
120
|
'なお、「Worksheets("Sheet2").」を「Activesheet.」に書き換えると、
|
121
121
|
'現在表示しているシートに結果の表が生成されます。
|
7
ミス修正
answer
CHANGED
@@ -111,8 +111,9 @@
|
|
111
111
|
Connection:=s_Cnn01, _
|
112
112
|
Destination:=Worksheets("Sheet2").Range("B2"))
|
113
113
|
|
114
|
-
'今回のこの例で
|
114
|
+
'今回のこの例では、今開いているブックの「Sheet2」シートに対して、
|
115
115
|
'「B2」セルを起点としてMicrosoftQueryの結果の表を作成します。
|
116
|
+
|
116
117
|
'この時点では、オブジェクトしては作成されているのですが、
|
117
118
|
'まだ条件設定とかしてないので、Sheet2には何も表示されません。
|
118
119
|
|
6
ミス
answer
CHANGED
@@ -130,7 +130,7 @@
|
|
130
130
|
|
131
131
|
|
132
132
|
'QueryTablesオブジェクトのSQLを書き換え。
|
133
|
-
'(
|
133
|
+
'(毎回、空っぽの状態のQueryTablesオブジェクトにSQL文が入ります。)
|
134
134
|
|
135
135
|
o_Qtbl01.CommandText = Array("SELECT * FROM `Sheet1$`")
|
136
136
|
|
@@ -139,8 +139,7 @@
|
|
139
139
|
'書き換えたSQLを実行して表に反映。
|
140
140
|
'空っぽのMicrosoftQueryのオブジェクトの中に、SQL文で指定した内容の
|
141
141
|
'表ができあがる・・・みたいな雰囲気です。
|
142
|
-
'こ
|
142
|
+
'この段階ではじめて、表が表示されます。
|
143
|
-
'(もともと何も表示されてない場合は、表が自動的に新規作成されます。)
|
144
143
|
|
145
144
|
o_Qtbl01.Refresh
|
146
145
|
|
5
ミス修正
answer
CHANGED
@@ -36,10 +36,11 @@
|
|
36
36
|
|
37
37
|
※こちらのテストでは、xlsにも、xlsmに対しても、覗きにいくことができました。 (ダメだったらすみません!)
|
38
38
|
|
39
|
+
リレーションが使えるので、たとえば「顧客マスタと売上明細を、”顧客ID”の値で紐付けて、その横結合結果(購入履歴)を表示」とか、「顧客IDごとに商品カテゴリごとにグループ化して売り上げ集計」とか、「いつからいつまでのどの地域のお客様の売上集計」とか、いろんなリストアップや集計ができます。
|
40
|
+
|
39
41
|
SQL内容を書き換えれば、いろんな抽出結果が得られると思います。
|
40
42
|
詳しくは、Webや先輩など、SQLのことがよく分かる人などに聞いてみてください。
|
41
43
|
|
42
|
-
|
43
44
|
※SQLの内容を、「MicrosoftQuery」の「方言(?作法?)」で書くと、「MicrosoftQuery」の画面からも操作できます。そして、抽出結果をいろいろいじれます。
|
44
45
|
その際のSQLの主な方言(?作法?)は、
|
45
46
|
(01)SQL文の最後の「;」(セミコロン)をつけない
|
4
ミス修正
answer
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
(a)QueryTableオブジェクト(SQLにて)や、
|
5
5
|
(b)ADO、DAO、(ループ処理での読み込みやSQLにて)
|
6
6
|
・・・などを使えば、好きなExcelファイルに「外部ファイル」のシート内容を取り込めるのではないでしょうか?
|
7
|
-
(そういうことをしたいわけではなかった
|
7
|
+
(そういうことをしたいわけではなかったり、顧客のデータベース化よりも「セル参照」のほうが重要でしたらごめんなさい!また、もうすでにお試しだったら本当にごめんなさい!)
|
8
8
|
|
9
9
|
「同じフォルダにないExcelファイルまで、その外部ファイルの場所を変えても、自動的に読み込めるようにする」というのはわかりませんけど・・・。もしそうしたいのでしたら後述のサンプルでは動きませんので無視してください。
|
10
10
|
|
3
ミス修正
answer
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
(a)QueryTableオブジェクト(SQLにて)や、
|
5
5
|
(b)ADO、DAO、(ループ処理での読み込みやSQLにて)
|
6
6
|
・・・などを使えば、好きなExcelファイルに「外部ファイル」のシート内容を取り込めるのではないでしょうか?
|
7
|
-
(そういうことをしたいわけではなかったんでしたらごめんなさい!)
|
7
|
+
(そういうことをしたいわけではなかったんでしたらごめんなさい!また、もうすでにお試しだったら本当にごめんなさい!)
|
8
8
|
|
9
9
|
「同じフォルダにないExcelファイルまで、その外部ファイルの場所を変えても、自動的に読み込めるようにする」というのはわかりませんけど・・・。もしそうしたいのでしたら後述のサンプルでは動きませんので無視してください。
|
10
10
|
|
2
ミス修正
answer
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
「やりたいこと」が「顧客のデータベース化」で、
|
2
|
+
かつ、「セルの数式自体にはこだわらない」、
|
1
|
-
もし「外部ファイル(Excelファイル?)」が、「同じフォルダ=同じ階層 にある」というケースなら、そのフォルダ
|
3
|
+
かつ、もし「外部ファイル(Excelファイル?)」が、「同じフォルダ=同じ階層 にある」というケース限定なら、その「フォルダ」ならば移動させても・・・、
|
2
4
|
(a)QueryTableオブジェクト(SQLにて)や、
|
3
5
|
(b)ADO、DAO、(ループ処理での読み込みやSQLにて)
|
4
|
-
などを使えば、好きなExcelファイルに「外部ファイル」のシート内容を取り込めるのではないでしょうか?
|
6
|
+
・・・などを使えば、好きなExcelファイルに「外部ファイル」のシート内容を取り込めるのではないでしょうか?
|
5
|
-
(
|
7
|
+
(そういうことをしたいわけではなかったんでしたらごめんなさい!)
|
6
8
|
|
7
9
|
「同じフォルダにないExcelファイルまで、その外部ファイルの場所を変えても、自動的に読み込めるようにする」というのはわかりませんけど・・・。もしそうしたいのでしたら後述のサンプルでは動きませんので無視してください。
|
8
10
|
|
1
ミス修正
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
もし「外部ファイル(Excelファイル?)」が、「同じフォルダにある」というケースなら、そのフォルダを移動させても・・・、
|
1
|
+
もし「外部ファイル(Excelファイル?)」が、「同じフォルダ=同じ階層 にある」というケースなら、そのフォルダを移動させても・・・、
|
2
2
|
(a)QueryTableオブジェクト(SQLにて)や、
|
3
3
|
(b)ADO、DAO、(ループ処理での読み込みやSQLにて)
|
4
4
|
などを使えば、好きなExcelファイルに「外部ファイル」のシート内容を取り込めるのではないでしょうか?
|
@@ -7,8 +7,9 @@
|
|
7
7
|
「同じフォルダにないExcelファイルまで、その外部ファイルの場所を変えても、自動的に読み込めるようにする」というのはわかりませんけど・・・。もしそうしたいのでしたら後述のサンプルでは動きませんので無視してください。
|
8
8
|
|
9
9
|
|
10
|
-
例えば以
|
10
|
+
例えば以降に挙げたサンプルコードは「同じフォルダ」にある「test01.xls」というファイルの「Sheet1」の表を覗きに行って、取り込みたいExcelファイルのSheet2に表示させます。
|
11
|
+
「1シートにつき1つの表」、が前提ですけど・・・。
|
11
|
-
(※コメントがやたら長いので、不要なら全部消して見てみてください。コード自体はかなり少ないです。 )
|
12
|
+
(※コメントがやたら長いので、不要なら全部消して見てみてください。コード自体はかなり少ないです。 あと、「xlsmやxlsx」を読みに行くときは、"DriverId=790;"を"DriverId=1046;"に書き変えたほうがいいかもしれません。)
|
12
13
|
|
13
14
|
リボンやクイックツールバーにて「ボタン化」すれば、押すたびに同じ抽出結果が得られます。
|
14
15
|
あるいはSQLを書き換えれば異なる結果が得られます。
|
@@ -17,7 +18,7 @@
|
|
17
18
|
|
18
19
|
覗きに行く「Sheet1」に対する抽出内容は、サンプルコードの
|
19
20
|
「"SELECT * FROM Sheet1$"」
|
20
|
-
のところで指定してます。
|
21
|
+
のところで指定しています。
|
21
22
|
この内容を書き換えれば、異なる抽出結果が得られます。
|
22
23
|
|
23
24
|
長いSQL文になってしまう場合は、各句ごとに、Arrayにてカンマで区切って、CommanText(配列)に格納します。
|
@@ -29,8 +30,7 @@
|
|
29
30
|
1行だけなら配列じゃないかもです。
|
30
31
|
配列だったらArreyを使うし、配列じゃなかったら、Arreyは要りません。
|
31
32
|
|
32
|
-
周囲に、AccessやSQLがわかる人が居ましたら、こちらの方法も今後便利かと思います。
|
33
|
-
複数の条件であっても、1つ1つが複雑でないとか、リレーション(VlookUp関数のような紐つけ)も同時に使いながらとか、でしたら、通常のVBAでデータ抽出(取り込み)するよりははるかにラクだとは思います。
|
33
|
+
SQLを使う場合、複数の条件であっても、1つ1つが複雑でないとか、リレーション(VlookUp関数のような紐つけ)も同時に使いながらとか、でしたら、通常のVBAでデータ抽出(取り込み)するよりははるかにラクだとは思います。
|
34
34
|
|
35
35
|
※こちらのテストでは、xlsにも、xlsmに対しても、覗きにいくことができました。 (ダメだったらすみません!)
|
36
36
|
|
@@ -38,7 +38,7 @@
|
|
38
38
|
詳しくは、Webや先輩など、SQLのことがよく分かる人などに聞いてみてください。
|
39
39
|
|
40
40
|
|
41
|
-
※SQLの内容を、「MicrosoftQuery」の「方言(
|
41
|
+
※SQLの内容を、「MicrosoftQuery」の「方言(?作法?)」で書くと、「MicrosoftQuery」の画面からも操作できます。そして、抽出結果をいろいろいじれます。
|
42
42
|
その際のSQLの主な方言(?作法?)は、
|
43
43
|
(01)SQL文の最後の「;」(セミコロン)をつけない
|
44
44
|
(02)テーブル名は「`」(バッククォート)で囲む。角カッコで囲むことはしない。
|