See here a remake taking care of PID and flag2...
Result does not fit to your values ...!
Option Explicit
Sub Treat()
Dim ChildWS As Worksheet
Dim MasterWS As Worksheet
Dim LR As Long
Dim LC As Integer, I As Integer, II As Integer, ISt As Integer
Dim WkRg As Range, ProdRg As Range
Dim Rg As Range
Dim F
Dim FAdd As String
Dim AAA, BBB, CCC, DDD
Dim RR, RRR
Const PidCol As String = "B"
Const CtyCol As String = "C"
Const ProdCol As String = "F"
Const RoutCol As String = "H"
Set ChildWS = Sheets("Child")
Set MasterWS = Sheets("Master")
With MasterWS
Set WkRg = Range(.Cells(2, "C"), .Cells(2, "C"))
End With
'--- Prepa
With ChildWS
LR = .Cells(Rows.Count, "A").End(3).Row
LC = .Cells(1, Columns.Count).End(xlToLeft).Column
.Cells(1, LC + 1) = "My Output"
Range(.Cells(2, LC + 1), .Cells(LR, LC + 1)) = 0
End With
With ChildWS
LR = .Cells(Rows.Count, "A").End(3).Row
ISt = 2
For I = 2 To LR
If (.Cells(I + 1, PidCol) <> .Cells(I, PidCol)) Then
Set ProdRg = Range(.Cells(ISt, ProdCol), .Cells(I, ProdCol))
ProdRg.Select
For Each Rg In ProdRg
If (Len(Rg) <> "") Then
Set F = WkRg.Find(Rg.Value, LookIn:=xlValues, LookAt:=xlPart)
If (Not F Is Nothing) Then
FAdd = F.Address
Do
'--- Flag 1
If ((.Cells(F.Row, CtyCol) = F.Offset(0, 4)) And (.Cells(F.Row, RoutCol) = F.Offset(0, 3))) Then
.Cells(Rg.Row, LC + 1) = 1
End If
'--- Flag 2
If ((.Cells(F.Row, CtyCol) = F.Offset(0, 4)) And Len(.Cells(F.Row, RoutCol) = 0)) Then
.Cells(Rg.Row, LC + 1) = 2
End If
Set F = WkRg.FindNext(F)
Loop While (F.Address <> FAdd)
End If
End If
Next Rg
ISt = I + 1
End If
Next I
End With
End Sub
Bookmarks