質問編集履歴

1

修正しました。

2019/09/25 09:05

投稿

cjapan35
cjapan35

スコア10

test CHANGED
File without changes
test CHANGED
@@ -33,423 +33,3 @@
33
33
  " LastRw2 = wbk_new.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row "
34
34
 
35
35
  のところで表示されます。
36
-
37
-
38
-
39
- ### 該当のソースコード
40
-
41
-
42
-
43
- ```VBA
44
-
45
- Option Explicit
46
-
47
- Private writeRowIndex As Long
48
-
49
- Private trgWorkSheet As Worksheet
50
-
51
- Private rootPath As String
52
-
53
- Private wbk As Workbook
54
-
55
- Private wbk_new As Workbook
56
-
57
- Private workBookName As String
58
-
59
-
60
-
61
-
62
-
63
- '-----------------------------------------------------------------------
64
-
65
- ' ファイルの集計
66
-
67
- '-----------------------------------------------------------------------
68
-
69
- Public Sub ファイルをまとめる()
70
-
71
-
72
-
73
- Application.DisplayAlerts = False
74
-
75
- Application.ScreenUpdating = False
76
-
77
-
78
-
79
- Dim trgPath As String
80
-
81
-
82
-
83
- '-- ファイルのあるフォルダを選択
84
-
85
- With Application.FileDialog(msoFileDialogFolderPicker)
86
-
87
- If .Show = True Then
88
-
89
- trgPath = .SelectedItems(1)
90
-
91
- End If
92
-
93
-
94
-
95
- If trgPath = "" Then
96
-
97
- Application.ScreenUpdating = True
98
-
99
- Application.DisplayAlerts = True
100
-
101
- Exit Sub
102
-
103
- End If
104
-
105
- End With
106
-
107
-
108
-
109
- writeRowIndex = 2
110
-
111
-
112
-
113
- Set wbk = ActiveWorkbook
114
-
115
-
116
-
117
- '-- 結果ブック作成
118
-
119
- Set wbk_new = Workbooks.Add()
120
-
121
-
122
-
123
- workBookName = "ファイル_集約"
124
-
125
-
126
-
127
- '-- ファイルを開く
128
-
129
- Set wbk_new = Workbooks.Open(workBookName, 0)
130
-
131
-
132
-
133
- Set trgWorkSheet = wbk_new.Sheets(1)
134
-
135
-
136
-
137
- trgWorkSheet.Name = "集約"
138
-
139
-
140
-
141
- '-- 結果ブックに名前を付けて保存
142
-
143
- wbk_new.SaveAs (workBookName)
144
-
145
-
146
-
147
- '-- 結果ブックを閉じる
148
-
149
- wbk_new.Close savechanges:=True
150
-
151
-
152
-
153
-
154
-
155
- '-- 再帰的に全部のファイルを処理する
156
-
157
- Dim objFSO As FileSystemObject
158
-
159
- Dim strPATHNAME As String
160
-
161
-
162
-
163
- strPATHNAME = trgPath
164
-
165
-
166
-
167
- Set objFSO = New FileSystemObject ' FSO
168
-
169
-
170
-
171
- ' ルートフォルダから探索開始
172
-
173
- Call SEARCH_SUB_FOLDER(objFSO.GetFolder(strPATHNAME))
174
-
175
-
176
-
177
-
178
-
179
- ' 参照OBJECTを破棄
180
-
181
- Set objFSO = Nothing
182
-
183
-
184
-
185
- '-- 書式をコピー
186
-
187
- Dim r As Long
188
-
189
- If (writeRowIndex <> 2) Then
190
-
191
- trgWorkSheet.Rows(2).Copy
192
-
193
- For r = 2 + 1 To writeRowIndex
194
-
195
- trgWorkSheet.Rows(r).PasteSpecial (xlPasteFormats)
196
-
197
- Next
198
-
199
- Application.CutCopyMode = False
200
-
201
- End If
202
-
203
-
204
-
205
- Set trgWorkSheet = Nothing
206
-
207
-
208
-
209
- ' 処理完了(結果表示)
210
-
211
- Application.ScreenUpdating = True
212
-
213
- Application.DisplayAlerts = True
214
-
215
-
216
-
217
- MsgBox "終了"
218
-
219
-
220
-
221
- End Sub
222
-
223
-
224
-
225
-
226
-
227
-
228
-
229
- '-- 再帰用
230
-
231
- Private Sub SEARCH_SUB_FOLDER(ByVal objPATH As Folder)
232
-
233
- Dim objPATH2 As Folder
234
-
235
- Dim objFILE As File
236
-
237
-
238
-
239
- ' ■先ずサブフォルダを探索するループ処理
240
-
241
- For Each objPATH2 In objPATH.SubFolders
242
-
243
- ' フォルダ単位のサブ処理(再帰呼び出し)
244
-
245
- Call SEARCH_SUB_FOLDER(objPATH2)
246
-
247
- Next objPATH2
248
-
249
-
250
-
251
- For Each objFILE In objPATH.Files
252
-
253
-
254
-
255
-
256
-
257
- If InStr(objFILE.Type, "Excel") <= 0 Or InStr(objFILE.Name, "ファイル") <= 0 Then
258
-
259
- GoTo NextLoop
260
-
261
- End If
262
-
263
-
264
-
265
- '-- ファイルを開く
266
-
267
- Set wbk = Workbooks.Open(objFILE.Path, 0)
268
-
269
-
270
-
271
-
272
-
273
- '-- データの集計
274
-
275
- Call Get集約(wbk)
276
-
277
-
278
-
279
- wbk_new.SaveAs (workBookName)
280
-
281
-
282
-
283
-
284
-
285
- '-- 保存せずにブックを閉じる
286
-
287
- wbk.Close savechanges:=False
288
-
289
- NextLoop:
290
-
291
- '-- オブジェクトの破棄
292
-
293
- Set wbk = Nothing
294
-
295
-
296
-
297
- Next objFILE
298
-
299
-
300
-
301
- ' 参照OBJECTを破棄
302
-
303
- Set objPATH = Nothing
304
-
305
-
306
-
307
- End Sub
308
-
309
-
310
-
311
-
312
-
313
-
314
-
315
- '-- 実際にシートを舐めながらヘッダ情報を採取する
316
-
317
- Private Sub Get集約(ByRef wbk As Workbook)
318
-
319
- Dim wkst As Worksheet
320
-
321
- Dim sh As Worksheet
322
-
323
- Dim batchID As String
324
-
325
- Dim j As Integer
326
-
327
- Dim bol_copy As Boolean
328
-
329
- Dim bol_IsData As Boolean
330
-
331
- Const checkColCnt As Integer = 4
332
-
333
-
334
-
335
-
336
-
337
- '-- ヘッダ書き出し用のシートを対象に設定する
338
-
339
- Set wkst = trgWorkSheet
340
-
341
-
342
-
343
- j = 1
344
-
345
-
346
-
347
- '-- 項目定義のヘッダを取得
348
-
349
- Dim rowCnt As Long
350
-
351
- Dim colCnt As Long
352
-
353
- For Each sh In wbk.Sheets
354
-
355
-
356
-
357
- bol_copy = False
358
-
359
- bol_IsData = False
360
-
361
-
362
-
363
- Dim i As Integer
364
-
365
-
366
-
367
- If (InStr(1, sh.Name, "SD") > 0) Then
368
-
369
- rowCnt = 5
370
-
371
-
372
-
373
-
374
-
375
- Dim LastRw1 As Long '元データの最終行
376
-
377
- Dim LastRw2 As Long '新規ブックの最終行
378
-
379
-
380
-
381
- wbk.Activate
382
-
383
-
384
-
385
-
386
-
387
- '元データの最終行を取得
388
-
389
- LastRw1 = wbk.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
390
-
391
-
392
-
393
- '新規ブックの最終行を取得
394
-
395
- LastRw2 = wbk_new.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
396
-
397
-
398
-
399
- If LastRw1 >= 2 Then
400
-
401
- Range(Rows(2), Rows(LastRw1)).Copy Destination:=wbk_new.Sheets(1).Cells(LastRw2 + 1, 1)
402
-
403
- End If
404
-
405
-
406
-
407
-
408
-
409
-
410
-
411
- End If
412
-
413
-
414
-
415
- Next
416
-
417
-
418
-
419
- End Sub
420
-
421
-
422
-
423
-
424
-
425
-
426
-
427
-
428
-
429
- ```
430
-
431
-
432
-
433
- 現在やろうとしていることは、以前までのコードだと一つ目のブックの表を貼り付けた後に二つ目のブックの表をそのまま上書きで貼り付けてしまっていたので、1つ目の表の1行下に次の表を貼り付けるというやり方をしたいのですが、エラーも出てうまくいきません。
434
-
435
- 修正箇所であったり、何か別の適切なコードがあればそちらを教えていただきたいです。
436
-
437
-
438
-
439
- ちなみに以下が以前までのコードです。
440
-
441
- ```
442
-
443
- sh.Range("R" & i).MergeCells = False
444
-
445
- sh.Columns("A:R").Copy
446
-
447
- wkst.Rows(j).PasteSpecial
448
-
449
- ```
450
-
451
- 現コードの"Dim LastRw1 As Long '元データの最終行"から"End If"の間にこのコードを入れていたときは、エラーは出なかったものの、表を上書きで貼り付けてしまっていました。
452
-
453
-
454
-
455
- よろしくお願いします。