質問するログイン新規登録

回答編集履歴

9

ミス

2019/04/15 01:14

投稿

komugi3333
komugi3333

スコア94

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

ミス

2019/04/15 01:14

投稿

komugi3333
komugi3333

スコア94

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

ミス修正

2019/04/13 00:38

投稿

komugi3333
komugi3333

スコア94

answer CHANGED
@@ -111,8 +111,9 @@
111
111
  Connection:=s_Cnn01, _
112
112
  Destination:=Worksheets("Sheet2").Range("B2"))
113
113
 
114
- '今回のこの例でのSQL文では、Sheet2に対して、
114
+ '今回のこの例では、今開いているブックの「Sheet2」シートに対して、
115
115
  '「B2」セルを起点としてMicrosoftQueryの結果の表を作成します。
116
+
116
117
  'この時点では、オブジェクトしては作成されているのですが、
117
118
  'まだ条件設定とかしてないので、Sheet2には何も表示されません。
118
119
 

6

ミス

2019/04/13 00:31

投稿

komugi3333
komugi3333

スコア94

answer CHANGED
@@ -130,7 +130,7 @@
130
130
 
131
131
 
132
132
  'QueryTablesオブジェクトのSQLを書き換え。
133
- '(このサンプルのこの分岐では、毎回、空っぽの状態にSQL文が入ります。)
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

ミス修正

2019/04/12 14:31

投稿

komugi3333
komugi3333

スコア94

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

ミス修正

2019/04/12 14:25

投稿

komugi3333
komugi3333

スコア94

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

ミス修正

2019/04/12 14:09

投稿

komugi3333
komugi3333

スコア94

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

ミス修正

2019/04/12 14:07

投稿

komugi3333
komugi3333

スコア94

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

ミス修正

2019/04/12 14:05

投稿

komugi3333
komugi3333

スコア94

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
- 例えば以下のサンプルコードは「同じフォルダ」にある「test01.xls」というファイルの「Sheet1」の表を覗きに行って、取り込みたいExcelファイルのSheet2に表示させます。
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」の「方言(?作法?)」で書くと、「MicrosoftQuery」の画面からも操作できます。そして、抽出結果をいろいろいじれます。
41
+ ※SQLの内容を、「MicrosoftQuery」の「方言(作法?)」で書くと、「MicrosoftQuery」の画面からも操作できます。そして、抽出結果をいろいろいじれます。
42
42
  その際のSQLの主な方言(?作法?)は、
43
43
  (01)SQL文の最後の「;」(セミコロン)をつけない
44
44
  (02)テーブル名は「`」(バッククォート)で囲む。角カッコで囲むことはしない。