質問編集履歴

2

修正

2020/10/05 22:02

投稿

icecleam
icecleam

スコア46

test CHANGED
File without changes
test CHANGED
@@ -19,289 +19,3 @@
19
19
  fpath = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
20
20
 
21
21
  ```
22
-
23
-
24
-
25
- 現在のコード
26
-
27
- ```VBA
28
-
29
- Public Sub Sample()
30
-
31
-
32
-
33
- Dim fname As String ' ファイル名の取得
34
-
35
- Dim fpath As String '検索するフォルダのパス
36
-
37
- Dim xlsFrom As New Excel.Application ' 転記元Excelファイル
38
-
39
- Dim wbFrom As Workbook ' 転記元Excelブック
40
-
41
- Dim wsFrom As Worksheet ' 転記元Excelシート
42
-
43
- Dim FromSheetNo As Long ' 転記元のシート番号
44
-
45
- Dim wsTo As Worksheet ' 転記先Excelシート
46
-
47
- Dim FromRowsNo As Long ' 検索する行位置
48
-
49
- Dim ToRowsNo As Long ' 書きこむ行位置
50
-
51
- Dim Kaihatsu As Variant ' 開発の値を格納
52
-
53
-
54
-
55
- ' 検索するフォルダのパスを取得
56
-
57
- fpath = Range("D1").Value
58
-
59
- '試したコード ここではコメントアウトしています
60
-
61
- 'fpath = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
62
-
63
-
64
-
65
- ' 転記先の設定
66
-
67
- Set wsTo = ActiveSheet
68
-
69
-
70
-
71
- ' 転記先の開始行は2行目から
72
-
73
- ToRowsNo = 2
74
-
75
-
76
-
77
- ' 転記元となるExcelファイル名を取得(この時現在開いているファイル名を取得)
78
-
79
- fname = Dir(fpath & "*.xls")
80
-
81
-
82
-
83
- ' Excelファイルが見つからなくなるまで検索
84
-
85
- Do Until fname = ""
86
-
87
-
88
-
89
- ' 見つかったExcelブックを開く
90
-
91
- Set wbFrom = Workbooks.Open(fpath & fname)
92
-
93
-
94
-
95
- ' 見つかったExcelブックのシートを順番に検索していき「最新」のシートの時、以下の処理を実行
96
-
97
- 'FromSheetNo はインデックス番号(シート番号)
98
-
99
- For FromSheetNo = 1 To wbFrom.Worksheets.Count
100
-
101
- If wbFrom.Worksheets(FromSheetNo).name = "最新" Then
102
-
103
-
104
-
105
- ' 転記元のシートを設定
106
-
107
- Set wsFrom = wbFrom.Worksheets(FromSheetNo)
108
-
109
-
110
-
111
- ' 転記元のシートを1行目から検索していく
112
-
113
- For FromRowsNo = 1 To wsFrom.UsedRange.Rows.Count
114
-
115
-
116
-
117
- ' C列 が結合セルの場合
118
-
119
- If wsFrom.Cells(FromRowsNo, 3).MergeCells = True Then
120
-
121
-
122
-
123
- 'セルが結合されているかどうかで処理を分岐させる
124
-
125
- Select Case wsFrom.Cells(FromRowsNo, 3).MergeArea.Count
126
-
127
-
128
-
129
- ' C列が4セル結合している場合
130
-
131
- Case 4
132
-
133
-
134
-
135
- 'C列に"担当者"という文字列が入っている場合
136
-
137
- If wsFrom.Cells(FromRowsNo, 3).Value = "担当者" Then
138
-
139
-
140
-
141
- ' [年 月日]の値を転記先に転記する。
142
-
143
- 'C列に「担当者」(文言)を転記
144
-
145
- wsTo.Cells(ToRowsNo, 3).Value = "担当者"
146
-
147
-
148
-
149
- '[年 月日]の値を以下で転記
150
-
151
- wsTo.Cells(ToRowsNo, 4).Value = wsFrom.Cells(FromRowsNo, 5).Value
152
-
153
- wsTo.Cells(ToRowsNo, 5).Value = wsFrom.Cells(FromRowsNo, 8).Value
154
-
155
- wsTo.Cells(ToRowsNo, 6).Value = wsFrom.Cells(FromRowsNo, 11).Value
156
-
157
- wsTo.Cells(ToRowsNo, 7).Value = wsFrom.Cells(FromRowsNo, 14).Value
158
-
159
- wsTo.Cells(ToRowsNo, 8).Value = wsFrom.Cells(FromRowsNo, 17).Value
160
-
161
- wsTo.Cells(ToRowsNo, 9).Value = wsFrom.Cells(FromRowsNo, 20).Value
162
-
163
- wsTo.Cells(ToRowsNo, 10).Value = wsFrom.Cells(FromRowsNo, 23).Value
164
-
165
- wsTo.Cells(ToRowsNo, 11).Value = wsFrom.Cells(FromRowsNo, 26).Value
166
-
167
- wsTo.Cells(ToRowsNo, 12).Value = wsFrom.Cells(FromRowsNo, 29).Value
168
-
169
- wsTo.Cells(ToRowsNo, 13).Value = wsFrom.Cells(FromRowsNo, 32).Value
170
-
171
-
172
-
173
- '転記先の処理を1行下へ
174
-
175
- ToRowsNo = ToRowsNo + 1
176
-
177
-
178
-
179
- End If
180
-
181
-
182
-
183
- ' C列が2セル結合している場合
184
-
185
- Case 2
186
-
187
-
188
-
189
- ' C列に値が設定れている場合、担当者が記載されている場合(担当者が未記載の場合にスキップするため)
190
-
191
- If IsNull(wsFrom.Cells(FromRowsNo, 3).Value) = False And wsFrom.Cells(FromRowsNo, 3).Value <> "" Then
192
-
193
-
194
-
195
- ' 担当者と工数の値を転記先へ設定する。
196
-
197
- 'A列にファイル名を設定
198
-
199
- wsTo.Cells(ToRowsNo, 1).Value = fname
200
-
201
-
202
-
203
- 'B列に開発名を設定
204
-
205
- wsTo.Cells(ToRowsNo, 2).Value = Kaihatsu
206
-
207
-
208
-
209
- 'C列に担当者名を設定
210
-
211
- wsTo.Cells(ToRowsNo, 3).Value = wsFrom.Cells(FromRowsNo, 3).Value
212
-
213
-
214
-
215
- 'D列以降に列に工数を設定
216
-
217
- wsTo.Cells(ToRowsNo, 4).Value = wsFrom.Cells(FromRowsNo, 5).Value
218
-
219
- wsTo.Cells(ToRowsNo, 5).Value = wsFrom.Cells(FromRowsNo, 8).Value
220
-
221
- wsTo.Cells(ToRowsNo, 6).Value = wsFrom.Cells(FromRowsNo, 11).Value
222
-
223
- wsTo.Cells(ToRowsNo, 7).Value = wsFrom.Cells(FromRowsNo, 14).Value
224
-
225
- wsTo.Cells(ToRowsNo, 8).Value = wsFrom.Cells(FromRowsNo, 17).Value
226
-
227
- wsTo.Cells(ToRowsNo, 9).Value = wsFrom.Cells(FromRowsNo, 20).Value
228
-
229
- wsTo.Cells(ToRowsNo, 10).Value = wsFrom.Cells(FromRowsNo, 23).Value
230
-
231
- wsTo.Cells(ToRowsNo, 11).Value = wsFrom.Cells(FromRowsNo, 26).Value
232
-
233
- wsTo.Cells(ToRowsNo, 12).Value = wsFrom.Cells(FromRowsNo, 29).Value
234
-
235
- wsTo.Cells(ToRowsNo, 13).Value = wsFrom.Cells(FromRowsNo, 32).Value
236
-
237
-
238
-
239
- '転記先の処理を1行下へ
240
-
241
- ToRowsNo = ToRowsNo + 1
242
-
243
-
244
-
245
- End If
246
-
247
- End Select
248
-
249
-
250
-
251
- ' C列 が結合セル出ない場合
252
-
253
- Else
254
-
255
-
256
-
257
- ' 開発を取得して格納しておく
258
-
259
- Kaihatsu = wsFrom.Cells(FromRowsNo, 2).Value
260
-
261
-
262
-
263
- End If
264
-
265
-
266
-
267
- Next FromRowsNo
268
-
269
-
270
-
271
- ' 1つのExcelファイルには同じ名前のシートが作成できないのでシート検索処理を終了する
272
-
273
- Exit For
274
-
275
-
276
-
277
- End If
278
-
279
-
280
-
281
- Next FromSheetNo
282
-
283
-
284
-
285
- ' 開いているExcelを閉じる
286
-
287
- wbFrom.Close (True)
288
-
289
-
290
-
291
- ' 次のファイルの処理へ
292
-
293
- fname = Dir()
294
-
295
- Loop
296
-
297
-
298
-
299
- MsgBox ("完了")
300
-
301
-
302
-
303
- End Sub
304
-
305
-
306
-
307
- ```

1

修正

2020/10/05 22:02

投稿

icecleam
icecleam

スコア46

test CHANGED
File without changes
test CHANGED
@@ -8,6 +8,10 @@
8
8
 
9
9
 
10
10
 
11
+ 動作環境はMACのエクセルになります。
12
+
13
+
14
+
11
15
  試したコード
12
16
 
13
17
  ```VBA