|
▼凪 さん:
WorkSheetFunctionを2回使って抽出してみました。
IV列,IU列は空けておいてください。
Option Explicit
'各IV列,IU列を作業列に使う。
Sub Test()
Dim Ran1 As Range
Application.ScreenUpdating = False
With Worksheets(1)
Set Ran1 = .Range(.Range("A1"), .Range("A65536").End(xlUp)).Offset(, 255)
End With
Ran1.Formula = "=CONCATENATE(A1,B1,C1,D1)"
Ran1.Value = Ran1.Value
On Error Resume Next
With Worksheets(2)
With .Range(.Range("A1"), .Range("A65536").End(xlUp))
'4つのセルで比較。一致するモノがなければ非表示
.Offset(, 255).Formula = "=CONCATENATE(A1,B1,C1,D1)"
.Offset(, 255).Value = .Offset(, 255).Value
.Offset(, 254).Formula = "=IF(COUNTIF(Sheet1!" & Ran1.Address & ",IV1)=0,"""",1)"
.Offset(, 254).Value = .Offset(, 254).Value
.Offset(, 254).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
'可視セルを5つのセルで比較。一致していれば非表示
Ran1.Formula = "=CONCATENATE(A1,B1,C1,D1,E1)"
Ran1.Value = Ran1.Value
.Offset(, 255).SpecialCells(xlCellTypeVisible).Formula = _
"=CONCATENATE(A1,B1,C1,D1,E1)"
.Offset(, 255).Value = .Offset(, 255).Value
.Offset(, 254).SpecialCells(xlCellTypeVisible).Formula = _
"=IF(COUNTIF(Sheet1!" & Ran1.Address & ",IV1)=0,1,"""")"
.Offset(, 254).Value = .Offset(, 254).Value
.Offset(, 254).SpecialCells(xlCellTypeBlanks).EntireRow.EntireRow.Hidden = True
'残って表示されているセルをSheet3にコピー
.Resize(, 5).SpecialCells(xlCellTypeVisible).Copy Worksheets(3).Range("A1")
'後処理
.EntireRow.Hidden = False
.Offset(, 255).Delete xlShiftToLeft
.Offset(, 254).Delete xlShiftToLeft
End With
Ran1.Delete xlShiftToLeft
Set Ran1 = Nothing
End With
On Error GoTo 0
Application.ScreenUpdating = True
End Sub
|
|