質問編集履歴

2

修正しました。

2019/09/25 09:02

投稿

cjapan35
cjapan35

スコア10

test CHANGED
File without changes
test CHANGED
@@ -21,369 +21,3 @@
21
21
 
22
22
 
23
23
  ### 該当のソースコード
24
-
25
-
26
-
27
- ```VBA
28
-
29
-
30
-
31
- Option Explicit
32
-
33
- Private writeRowIndex As Long
34
-
35
- Private trgWorkSheet As Worksheet
36
-
37
- Private rootPath As String
38
-
39
-
40
-
41
-
42
-
43
- '-----------------------------------------------------------------------
44
-
45
- ' ファイルの集計
46
-
47
- '-----------------------------------------------------------------------
48
-
49
- Public Sub ファイルをまとめる()
50
-
51
-
52
-
53
- Application.DisplayAlerts = False
54
-
55
- Application.ScreenUpdating = False
56
-
57
-
58
-
59
- Dim trgPath As String
60
-
61
-
62
-
63
- '-- ファイルのあるフォルダを選択
64
-
65
- With Application.FileDialog(msoFileDialogFolderPicker)
66
-
67
- If .Show = True Then
68
-
69
- trgPath = .SelectedItems(1)
70
-
71
- End If
72
-
73
-
74
-
75
- If trgPath = "" Then
76
-
77
- Application.ScreenUpdating = True
78
-
79
- Application.DisplayAlerts = True
80
-
81
- Exit Sub
82
-
83
- End If
84
-
85
- End With
86
-
87
-
88
-
89
- writeRowIndex = 2
90
-
91
-
92
-
93
- '-- 再帰的に全部のファイルを処理する
94
-
95
- Dim objFSO As FileSystemObject
96
-
97
- Dim strPATHNAME As String
98
-
99
-
100
-
101
- strPATHNAME = trgPath
102
-
103
-
104
-
105
- Set objFSO = New FileSystemObject ' FSO
106
-
107
-
108
-
109
- ' ルートフォルダから探索開始
110
-
111
- Call SEARCH_SUB_FOLDER(objFSO.GetFolder(strPATHNAME))
112
-
113
-
114
-
115
-
116
-
117
- ' 参照OBJECTを破棄
118
-
119
- Set objFSO = Nothing
120
-
121
-
122
-
123
-
124
-
125
- '-- 書式をコピー
126
-
127
- Dim r As Long
128
-
129
- If (writeRowIndex <> 2) Then
130
-
131
- trgWorkSheet.Rows(2).Copy
132
-
133
- For r = 2 + 1 To writeRowIndex
134
-
135
- trgWorkSheet.Rows(r).PasteSpecial (xlPasteFormats)
136
-
137
- Next
138
-
139
- Application.CutCopyMode = False
140
-
141
- End If
142
-
143
-
144
-
145
- Set trgWorkSheet = Nothing
146
-
147
-
148
-
149
- ' 処理完了(結果表示)
150
-
151
- Application.ScreenUpdating = True
152
-
153
- Application.DisplayAlerts = True
154
-
155
-
156
-
157
- MsgBox "終了"
158
-
159
-
160
-
161
- End Sub
162
-
163
-
164
-
165
-
166
-
167
-
168
-
169
- '-- 再帰用
170
-
171
- Private Sub SEARCH_SUB_FOLDER(ByVal objPATH As Folder)
172
-
173
- Dim objPATH2 As Folder
174
-
175
- Dim objFILE As File
176
-
177
-
178
-
179
- ' ■先ずサブフォルダを探索するループ処理
180
-
181
- For Each objPATH2 In objPATH.SubFolders
182
-
183
- ' フォルダ単位のサブ処理(再帰呼び出し)
184
-
185
- Call SEARCH_SUB_FOLDER(objPATH2)
186
-
187
- Next objPATH2
188
-
189
-
190
-
191
- For Each objFILE In objPATH.Files
192
-
193
- Dim wbk As Workbook
194
-
195
- Dim wbk_new As Workbook
196
-
197
-
198
-
199
- If InStr(objFILE.Type, "Excel") <= 0 Or InStr(objFILE.Name, "ファイル") <= 0 Then
200
-
201
- GoTo NextLoop
202
-
203
- End If
204
-
205
-
206
-
207
- '-- ファイルを開く
208
-
209
- Set wbk = Workbooks.Open(objFILE.Path, 0)
210
-
211
-
212
-
213
- '-- 結果ブック作成
214
-
215
- Set wbk_new = Workbooks.Add()
216
-
217
-
218
-
219
- Dim workBookName As String
220
-
221
-
222
-
223
- workBookName = ThisWorkbook.Path & "\" & Replace(objFILE.Name, ".xlsx", "") & "_集約"
224
-
225
-
226
-
227
- '-- 結果ブックに名前を付けて保存
228
-
229
- wbk_new.SaveAs (workBookName)
230
-
231
-
232
-
233
- '-- ファイルを開く
234
-
235
- Set wbk_new = Workbooks.Open(workBookName, 0)
236
-
237
-
238
-
239
- Set trgWorkSheet = wbk_new.Sheets(1)
240
-
241
-
242
-
243
- trgWorkSheet.Name = "集約"
244
-
245
-
246
-
247
-
248
-
249
- '-- 集約結果の集計
250
-
251
- Call Get集約(wbk)
252
-
253
-
254
-
255
- wbk_new.SaveAs (workBookName)
256
-
257
-
258
-
259
-
260
-
261
- '-- 結果ブックを閉じる
262
-
263
- wbk_new.Close savechanges:=True
264
-
265
-
266
-
267
- '-- 保存せずにブックを閉じる
268
-
269
- wbk.Close savechanges:=False
270
-
271
- NextLoop:
272
-
273
- '-- オブジェクトの破棄
274
-
275
- Set wbk = Nothing
276
-
277
-
278
-
279
- Next objFILE
280
-
281
-
282
-
283
- ' 参照OBJECTを破棄
284
-
285
- Set objPATH = Nothing
286
-
287
-
288
-
289
- End Sub
290
-
291
-
292
-
293
-
294
-
295
-
296
-
297
- '-- 実際にシートを舐めながらヘッダ情報を採取する
298
-
299
- Private Sub Get集約(ByRef wbk As Workbook)
300
-
301
- Dim wkst As Worksheet
302
-
303
- Dim sh As Worksheet
304
-
305
- Dim batchID As String
306
-
307
- Dim j As Integer
308
-
309
- Dim bol_copy As Boolean
310
-
311
- Dim bol_IsData As Boolean
312
-
313
- Const checkColCnt As Integer = 4
314
-
315
-
316
-
317
- '-- ヘッダ書き出し用のシートを対象に設定する
318
-
319
- Set wkst = trgWorkSheet
320
-
321
-
322
-
323
- j = 1
324
-
325
-
326
-
327
- '-- 項目定義のヘッダを取得
328
-
329
- Dim rowCnt As Long
330
-
331
- Dim colCnt As Long
332
-
333
- For Each sh In wbk.Sheets
334
-
335
-
336
-
337
- bol_copy = False
338
-
339
- bol_IsData = False
340
-
341
-
342
-
343
- Dim i As Integer
344
-
345
-
346
-
347
- If (InStr(1, sh.Name, "シート1") > 0) Then
348
-
349
- rowCnt = 5
350
-
351
-
352
-
353
- ' --セルをなめる
354
-
355
- For i = 1 To 5000
356
-
357
-
358
-
359
- End If
360
-
361
-
362
-
363
- End Sub
364
-
365
-
366
-
367
- ```
368
-
369
-
370
-
371
- Private Sub Get集約 以降の記述がわかりません。まだ最後までかけていません。
372
-
373
- 正直VBAの基礎すら学んでない状態で作成してるのでほとんど意味わかってませんが、おそらく中身が取り出せてないだけというところなので、Sub Get集約のところを記述できればいけるのかな?と思ってます。
374
-
375
- 助言いただけると幸いです。
376
-
377
- よろしくお願いします。
378
-
379
-
380
-
381
- ※7/29補足
382
-
383
- コピーはできたが、別の部分で質問があるので、補足させていただきます。
384
-
385
- subファイルをまとめるのところで、workBookName = ThisWorkbook.Path & "\" & Replace(objFILE.Name, ".xlsx", "") & "_集約"という部分をworkBookName = "ファイル_集約"という風に変更したところ、本来一つにまとめたいブックが二つ出来上がるということはなくなりましたが、代わりに二つあるブックのうち、一つのブックからしか表をコピーできていないという状況です。
386
-
387
- デバッグしてみたら、一度は一つ目のブックから表をコピーして貼り付けていたものの、二つ目のブックから表をコピーした際に、一つ目の表の上から上書きでコピーしていました。
388
-
389
- これはどういう風にコードを記述すれば一つ目の表の下に二つ目を足すことができますか?

1

補足しました。

2019/09/25 09:02

投稿

cjapan35
cjapan35

スコア10

test CHANGED
File without changes
test CHANGED
@@ -375,3 +375,15 @@
375
375
  助言いただけると幸いです。
376
376
 
377
377
  よろしくお願いします。
378
+
379
+
380
+
381
+ ※7/29補足
382
+
383
+ コピーはできたが、別の部分で質問があるので、補足させていただきます。
384
+
385
+ subファイルをまとめるのところで、workBookName = ThisWorkbook.Path & "\" & Replace(objFILE.Name, ".xlsx", "") & "_集約"という部分をworkBookName = "ファイル_集約"という風に変更したところ、本来一つにまとめたいブックが二つ出来上がるということはなくなりましたが、代わりに二つあるブックのうち、一つのブックからしか表をコピーできていないという状況です。
386
+
387
+ デバッグしてみたら、一度は一つ目のブックから表をコピーして貼り付けていたものの、二つ目のブックから表をコピーした際に、一つ目の表の上から上書きでコピーしていました。
388
+
389
+ これはどういう風にコードを記述すれば一つ目の表の下に二つ目を足すことができますか?