|
こんな感じでどうでしょ。
文字列をくっつけて検索にしてみました。
ちょっとですが注釈も入れたので解析してみてください。
Sub test()
Dim ws As Worksheet
Dim CV_r As Long 'CVPARTSのRow
Dim Mas_r As Long 'マスターのRow
Dim R As Range '集めた目録のRange
Dim F As Variant '検索用
'IV列に検索文字列作成
With Worksheets("集めた目録").Range(Range("A1"), Range("A65536").End(xlUp)).Offset(, 255)
.Formula = "=CONCATENATE(A1,B1)"
.Value = .Value
End With
For Each ws In ThisWorkbook.Worksheets
If InStr(1, ws.Name, "マスター") <> 0 Then
With ws.Range(ws.Range("A1"), ws.Range("A65536").End(xlUp)).Offset(, 255)
.Formula = "=CONCATENATE(D1,G1)"
.Value = .Value
End With
End If
Next ws
CV_r = 10 'CV_rは10行目から
'集めた目録のIV列をループ
For Each R In Range(Worksheets("集めた目録").Range("IV1"), Worksheets("集めた目録").Range("IV65536").End(xlUp))
'マスターを含むWorkSheetsをループ
For Each ws In ThisWorkbook.Worksheets
If InStr(1, ws.Name, "マスター") <> 0 Then
'マスターIV列でRを検索してあったら、CVRARTSに書き込み
Set F = ws.Range("IV:IV").Find(R.Value, , xlValues, xlWhole)
If Not F Is Nothing Then
With Worksheets("CVPARTS")
.Range(.Cells(CV_r, 5), .Cells(CV_r, 19)).Value = _
ws.Range(ws.Cells(F.Row, 4), ws.Cells(F.Row, 18)).Value
End With
'CV_r を1行移動
CV_r = CV_r + 1
Exit For
End If
End If
Next ws
Next R
'IV列を削除
Worksheets("集めた目録").Range("IV:IV").Clear
For Each ws In ThisWorkbook.Worksheets
If InStr(1, ws.Name, "マスター") <> 0 Then
ws.Range("IV:IV").Clear
End If
Next ws
End Sub
|
|