回答編集履歴

4

質問修正で不要になった部分を削除

2019/01/19 09:58

投稿

hatena19
hatena19

スコア33729

test CHANGED
@@ -53,14 +53,6 @@
53
53
 
54
54
 
55
55
  追記
56
-
57
- ---
58
-
59
- CSVファイルは、画像でなくて、テキストデータをそのままコピーして貼り付けてください。
60
-
61
- 回答者がサンプルデータを手入力する手間が省けます。
62
-
63
-
64
56
 
65
57
  ---
66
58
 

3

修正

2019/01/19 09:57

投稿

hatena19
hatena19

スコア33729

test CHANGED
@@ -82,7 +82,7 @@
82
82
 
83
83
 
84
84
 
85
- ```sql
85
+ ```vba
86
86
 
87
87
  sSql = "SELECT CODE1 & CODE2 & CODE3 AS CODE, NAME, FLAG1, FLAG2, FLAG3 " & _
88
88
 
@@ -110,7 +110,7 @@
110
110
 
111
111
 
112
112
 
113
- ```sql
113
+ ```vba
114
114
 
115
115
  sSql = "SELECT T.CODE, T.NAME, T.FLAG1, T.FLAG2, T.FLAG3 " & _
116
116
 
@@ -128,7 +128,7 @@
128
128
 
129
129
 
130
130
 
131
- ```sql
131
+ ```vba
132
132
 
133
133
  sSql = "SELECT T.CODE, A.NAME AS OLDNAME, T.NAME AS NEWNAME, " & _
134
134
 

2

追記

2019/01/19 07:07

投稿

hatena19
hatena19

スコア33729

test CHANGED
@@ -56,6 +56,96 @@
56
56
 
57
57
  ---
58
58
 
59
- CSVファイルは、画像でなくて、データをそのままコピーして貼り付けてください。
59
+ CSVファイルは、画像でなくて、テキストデータをそのままコピーして貼り付けてください。
60
60
 
61
61
  回答者がサンプルデータを手入力する手間が省けます。
62
+
63
+
64
+
65
+ ---
66
+
67
+ 列を結合したり、それで並べ替えたりという操作があるので、
68
+
69
+ 私なら、ADOを使って取り込みますね。
70
+
71
+ SQLで簡単にデータを加工して、それをシートに貼り付けることができますので。
72
+
73
+ 下記を参考にしてください。
74
+
75
+
76
+
77
+ [ADOを使って、CSVファイルを読み込む - VBA - TIL](https://tmg0525.hatenadiary.jp/entry/2018/04/24/113155)
78
+
79
+
80
+
81
+ 下記のようなSQLを実行して、
82
+
83
+
84
+
85
+ ```sql
86
+
87
+ sSql = "SELECT CODE1 & CODE2 & CODE3 AS CODE, NAME, FLAG1, FLAG2, FLAG3 " & _
88
+
89
+ "FROM [tera169663.csv] ORDER BY 1"
90
+
91
+
92
+
93
+ ```
94
+
95
+ 取得したレコードセットを CopyFromRecordset で作業用シート([TempSheet])に貼り付けます。
96
+
97
+
98
+
99
+ シート上のデータもADOでテーブルとして扱えますので、SQLで取得、加工できます。
100
+
101
+
102
+
103
+ [Excelファイルに接続(ADO) | ExcelWork.info](https://excelwork.info/excel/excelado/)
104
+
105
+
106
+
107
+ シートA と 作業用シート(取り込んだCSVデータ) の不一致データをSQLで抽出して、それをシートAに追記します。
108
+
109
+ 不一致データの取得は下記のようなSQLです(いわゆる不一致クエリというものです)。
110
+
111
+
112
+
113
+ ```sql
114
+
115
+ sSql = "SELECT T.CODE, T.NAME, T.FLAG1, T.FLAG2, T.FLAG3 " & _
116
+
117
+ "FROM [TempSheet$] AS T LEFT JOIN [シートA$B3:F] AS A " & _
118
+
119
+ "ON T.CODE = A.CODE " & _
120
+
121
+ "WHERE A.CODE IS NULL;"
122
+
123
+
124
+
125
+ ```
126
+
127
+ シートBに出力するデータは下記のSQL文になります。
128
+
129
+
130
+
131
+ ```sql
132
+
133
+ sSql = "SELECT T.CODE, A.NAME AS OLDNAME, T.NAME AS NEWNAME, " & _
134
+
135
+ "IIf(A.CODE IS NULL,'新規','更新') AS TYPE " & _
136
+
137
+ "FROM [TempSheet$] AS T LEFT JOIN [シートA$B3:F] AS A " & _
138
+
139
+ "ON T.CODE = A.CODE;"
140
+
141
+
142
+
143
+ ```
144
+
145
+
146
+
147
+ シート全体のデータを取り込む場合は、[TempSheet$] というように シート名$ とします。
148
+
149
+ 範囲を指定する場合は、[シートA$B3:F] というように$のあとに範囲を指定します。
150
+
151
+ [シートA$B3:F] というのは、シートA の B列からF列の3行目からデータの最後の行まで読み込みます。

1

追記

2019/01/19 07:06

投稿

hatena19
hatena19

スコア33729

test CHANGED
@@ -49,3 +49,13 @@
49
49
 
50
50
 
51
51
  以上であってますか。異なる部分があればご指摘ください。
52
+
53
+
54
+
55
+ 追記
56
+
57
+ ---
58
+
59
+ CSVファイルは、画像でなくて、データをそのままコピーして貼り付けてください。
60
+
61
+ 回答者がサンプルデータを手入力する手間が省けます。