回答編集履歴

1

コード追加しました。こんな感じでどうでしょう?

2020/02/13 07:35

投稿

yuuskeccho
yuuskeccho

スコア97

test CHANGED
@@ -35,3 +35,201 @@
35
35
 
36
36
 
37
37
  ただ、新たにブックが作成されると新しいブックがアクティブになるので注意して下さい。
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+ --------------------------------------------------
46
+
47
+ 追記です。コードを書くとしたらこんな感じでしょうか。
48
+
49
+
50
+
51
+ ```VBA
52
+
53
+ Sub 抽出()
54
+
55
+ Dim ws1 As Worksheet, ws2 As Worksheet
56
+
57
+ Dim Sakusei As String
58
+
59
+ Dim StartRow As Long, EndRow As Long, tmpRow As Long
60
+
61
+ Dim i As Long
62
+
63
+ Dim strFilePath As String, strFileName As String
64
+
65
+ Dim intFFile As Integer
66
+
67
+ Dim blnWbOpen As Boolean
68
+
69
+ Dim varTmp As Variant
70
+
71
+
72
+
73
+ strFilePath = ThisWorkbook.Path & "\"
74
+
75
+ strFileName = "書類作成.xlsx"
76
+
77
+
78
+
79
+ '----- ファイルの存在確認
80
+
81
+ If Dir(strFilePath & strFileName) = "" Then
82
+
83
+ MsgBox strFilePath & strFileName & " が見つかりません", vbCritical
84
+
85
+ Exit Sub
86
+
87
+ End If
88
+
89
+
90
+
91
+ blnWbOpen = False
92
+
93
+
94
+
95
+ '----- 書き込みできる状態か?
96
+
97
+ On Error Resume Next
98
+
99
+ intFFile = FreeFile
100
+
101
+ Open strFilePath & strFileName For Binary Access Read Lock Read As #intFFile
102
+
103
+ Close #intFFile
104
+
105
+
106
+
107
+ If Err.Number = 0 Then
108
+
109
+ '開く!!
110
+
111
+ Workbooks.Open strFilePath & strFileName
112
+
113
+ Else
114
+
115
+ '開かれているか確認する!!
116
+
117
+ For Each varTmp In Workbooks
118
+
119
+ If varTmp.FullName = strFilePath & strFileName Then
120
+
121
+
122
+
123
+ blnWbOpen = True
124
+
125
+ End If
126
+
127
+ Next
128
+
129
+
130
+
131
+ '誰かに開かれている!!
132
+
133
+ If Not blnWbOpen Then
134
+
135
+ MsgBox strFilePath & " を開くことができません。" & vbCrLf _
136
+
137
+ & "誰かが開いている可能性があります"
138
+
139
+ Exit Sub
140
+
141
+ End If
142
+
143
+ End If
144
+
145
+ On Error GoTo 0
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+ 'シート名を変えてる場合は適宜変更
154
+
155
+ Set ws1 = Workbooks("契約情報").Sheets("契約情報")
156
+
157
+ Set ws2 = Workbooks(strFileName).Sheets("作成情報")
158
+
159
+
160
+
161
+ ws2.Range("2:11").ClearContents
162
+
163
+
164
+
165
+ '作成情報シートに指定されている抽出条件
166
+
167
+ Sakusei = ws2.Cells(1, "N")
168
+
169
+
170
+
171
+ EndRow = ws1.Cells(Rows.Count, "C").End(xlUp).Row
172
+
173
+
174
+
175
+ StartRow = 2
176
+
177
+ tmpRow = 2
178
+
179
+
180
+
181
+ For i = StartRow To EndRow
182
+
183
+ If (ws1.Cells(i, "M") = Sakusei) Then
184
+
185
+
186
+
187
+ ws2.Cells(tmpRow, "N") = Sakusei
188
+
189
+
190
+
191
+ ws2.Cells(tmpRow, "C") = ws1.Cells(i, "C")
192
+
193
+ ws2.Cells(tmpRow, "D") = ws1.Cells(i, "D")
194
+
195
+ ws2.Cells(tmpRow, "E") = ws1.Cells(i, "E")
196
+
197
+ ws2.Cells(tmpRow, "F") = ws1.Cells(i, "F")
198
+
199
+ ws2.Cells(tmpRow, "G") = ws1.Cells(i, "G")
200
+
201
+ ws2.Cells(tmpRow, "H") = ws1.Cells(i, "H")
202
+
203
+ ws2.Cells(tmpRow, "I") = ws1.Cells(i, "I")
204
+
205
+ ws2.Cells(tmpRow, "J") = ws1.Cells(i, "J")
206
+
207
+ ws2.Cells(tmpRow, "K") = ws1.Cells(i, "K")
208
+
209
+
210
+
211
+ tmpRow = tmpRow + 1
212
+
213
+ End If
214
+
215
+ Next
216
+
217
+
218
+
219
+
220
+
221
+ '処理完了メッセージ
222
+
223
+ MsgBox "処理が完了しました!", vbInformation
224
+
225
+
226
+
227
+ End Sub
228
+
229
+ ```
230
+
231
+
232
+
233
+ なお、対象ブック内のシート存在確認はしていません。
234
+
235
+ あと、作成後の保存等も記述していません。