回答編集履歴

4

追記

2021/06/14 10:19

投稿

jinoji
jinoji

スコア4585

test CHANGED
@@ -57,3 +57,99 @@
57
57
  End Sub
58
58
 
59
59
  ```
60
+
61
+
62
+
63
+ ---
64
+
65
+ <追記>
66
+
67
+ コメントの1.にあったような、対象のブックがA2、A3、、、と複数ある場合は、
68
+
69
+ 以下のようにFor Nextをひとつ増やしてあげる感じでいけるのではないかと思います。
70
+
71
+ (試せていないのでおかしなところがあったら適宜直してください。)
72
+
73
+ なお、以下の例ではOffsetで出力セルをずらしていますが、
74
+
75
+ 出力セルの行番号を保持する変数を用意して、都度カウントアップするほうが
76
+
77
+ わかりやすいかもしれません。
78
+
79
+
80
+
81
+ ```VBA
82
+
83
+ Sub Sample2()
84
+
85
+
86
+
87
+ '2つのブックがあり、
88
+
89
+ Dim wb1 As Workbook, wb2 As Workbook
90
+
91
+
92
+
93
+ '1つのブックのセル値(A2,A3...)に入力しているブックを開き、
94
+
95
+ Set wb1 = ThisWorkbook
96
+
97
+ Dim r, wbName
98
+
99
+ For r = 2 To wb1.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
100
+
101
+ wbName = wb1.Path & "\" & wb1.Worksheets(1).Cells(r, 1).Value
102
+
103
+ Set wb2 = Workbooks.Open(wbName)
104
+
105
+
106
+
107
+ '"シート1"
108
+
109
+ Dim ws As Worksheet
110
+
111
+ Set ws = wb2.Worksheets("シート1")
112
+
113
+
114
+
115
+ 'コピー先セル : ("集計表.xlsm")の(I2,I3...)
116
+
117
+ Dim destCell As Range
118
+
119
+ Set destCell = Workbooks("集計表.xlsm").Worksheets(1).Cells(Rows.Count, 9).End(xlUp).Offset(1)
120
+
121
+
122
+
123
+ Dim i, wsName As String
124
+
125
+ For i = 1 To ws.Cells(ws.Rows.Count, 3).End(xlUp).Row
126
+
127
+
128
+
129
+ '"シート1"、C列のセル値(C1)に入力しているシートに移動し
130
+
131
+ wsName = ws.Cells(i, 3).Value
132
+
133
+ If wsName <> "" Then
134
+
135
+ '(E3)をコピーし("集計表.xlsm")の(I2,I3...)に貼付
136
+
137
+ destCell.Value = wb2.Worksheets(wsName).Range("E3").Value
138
+
139
+ Set destCell = destCell.Offset(1)
140
+
141
+ End If
142
+
143
+ Next
144
+
145
+
146
+
147
+ Next
148
+
149
+
150
+
151
+ End Sub
152
+
153
+
154
+
155
+ ```

3

追記

2021/06/14 10:19

投稿

jinoji
jinoji

スコア4585

test CHANGED
@@ -3,6 +3,8 @@
3
3
  Sub Sample()
4
4
 
5
5
 
6
+
7
+ '2つのブックがあり、1つのブックのセル値(A2)に入力しているブックを開き、
6
8
 
7
9
  Dim wb1 As Workbook, wb2 As Workbook
8
10
 
@@ -12,11 +14,15 @@
12
14
 
13
15
 
14
16
 
17
+ '"シート1"
18
+
15
19
  Dim ws As Worksheet
16
20
 
17
21
  Set ws = wb2.Worksheets("シート1")
18
22
 
23
+
24
+
19
-
25
+ '("集計表.xlsm")の(I2)
20
26
 
21
27
  Dim destCell As Range
22
28
 
@@ -28,11 +34,17 @@
28
34
 
29
35
  For i = 1 To ws.Cells(ws.Rows.Count, 3).End(xlUp).Row
30
36
 
37
+
38
+
39
+ '"シート1"、C列のセル値(C1)に入力しているシートに移動し
40
+
31
41
  wsName = ws.Cells(i, 3).Value
32
42
 
33
43
  If wsName <> "" Then
34
44
 
45
+ '(E3)をコピーし("集計表.xlsm")の(I2)に貼付
46
+
35
- wb2.Worksheets(wsName).Range("E3").Copy destCell
47
+ wb2.Worksheets(wsName).Range("E3").Copy destCell
36
48
 
37
49
  Set destCell = destCell.Offset(1)
38
50
 

2

修正

2021/06/12 06:05

投稿

jinoji
jinoji

スコア4585

test CHANGED
@@ -1,44 +1,40 @@
1
- たとえばこんな感じでどうでしょう。
2
-
3
1
  ```VBA
4
2
 
5
- Sub ブック()
3
+ Sub Sample()
6
-
7
- '
8
-
9
- ' ブック Macro
10
-
11
- '
12
-
13
- Dim mySheet As Worksheet
14
-
15
- Set mySheet = Workbooks("集計表.xlsm").Worksheets(1)
16
4
 
17
5
 
18
6
 
19
- Dim wb As Workbook
7
+ Dim wb1 As Workbook, wb2 As Workbook
20
8
 
9
+ Set wb1 = ThisWorkbook
10
+
21
- Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & mySheet.Range("A2").Value)
11
+ Set wb2 = Workbooks.Open(wb1.Path & "\" & wb1.Worksheets(1).Range("A2").Value)
22
12
 
23
13
 
24
14
 
25
15
  Dim ws As Worksheet
26
16
 
27
- Set ws = wb.Worksheets("シート1")
17
+ Set ws = wb2.Worksheets("シート1")
28
18
 
29
19
 
30
20
 
31
- Dim i As Long, r As Range
21
+ Dim destCell As Range
32
22
 
33
- For i = 2 To Rows.Count
23
+ Set destCell = Workbooks("集計表.xlsm").Worksheets(1).Range("I2")
34
24
 
35
- Set r = ws.Cells(i, "C")
25
+
36
26
 
37
- If Not IsEmpty(r) Then
27
+ Dim i, wsName As String
38
28
 
39
- mySheet.Range("I2").Value = r.Value
29
+ For i = 1 To ws.Cells(ws.Rows.Count, 3).End(xlUp).Row
40
30
 
41
- Exit For
31
+ wsName = ws.Cells(i, 3).Value
32
+
33
+ If wsName <> "" Then
34
+
35
+ wb2.Worksheets(wsName).Range("E3").Copy destCell
36
+
37
+ Set destCell = destCell.Offset(1)
42
38
 
43
39
  End If
44
40
 
@@ -46,10 +42,6 @@
46
42
 
47
43
 
48
44
 
49
- wb.Close SaveChanges:=False
50
-
51
-
52
-
53
45
  End Sub
54
46
 
55
47
  ```

1

修正

2021/06/12 05:59

投稿

jinoji
jinoji

スコア4585

test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  If Not IsEmpty(r) Then
38
38
 
39
- mySheet.Range("I3").Value = r.Value
39
+ mySheet.Range("I2").Value = r.Value
40
40
 
41
41
  Exit For
42
42