Sub test()
Dim a, i As Long, ii As Long, iii As Long, n As Long, t As Long
Dim x, w, mySize, dic As Object
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("iso entry")
a = .Range("a3", .Range("a" & Rows.Count).End(xlUp)).Resize(, 4).Value
End With
With CreateObject("VBScript.RegExp")
.IgnoreCase = True
.Pattern = "^(\d+"")-?([A-Z]{2}\d{4})-?([A-Z])-?([A-Z]+\d+)-?(\d+[A-Z]*)$"
For i = UBound(a, 1) To 1 Step -1
If .test(a(i, 1)) Then
a(i, 1) = .Replace(a(i, 1), "$1-$2-$3-$4-$5")
ElseIf a(i, 1) = "" Then
a(i, 1) = a(i + 1, 1)
End If
Next
For i = 1 To UBound(a, 1)
If Not dic.exists(a(i, 1)) Then
Set dic(a(i, 1)) = CreateObject("Scripting.Dictionary")
End If
If a(i, 4) <> "" Then
If a(i, 3) Like "*X*" Then
x = Split(Replace(a(i, 3), """", ""), "X")
mySize = Application.Max(Evaluate(x(0)), Evaluate(x(1)))
Else
mySize = Evaluate(Replace(a(i, 3), """", ""))
End If
If Not dic(a(i, 1)).exists(mySize) Then
x = Split(a(i, 1), "-")
ReDim w(1 To 13)
w(1) = x(2): w(1) = x(1): w(3) = x(3)
w(4) = a(i, 1): w(5) = mySize: w(6) = Val(x(4))
dic(a(i, 1))(mySize) = w
End If
.Pattern = "\b((PIPE)|(90s|90LR)|(Mics|TEE|CAP)|(Valves?|STRAINER)|(FLANGES?)|(45s|45LR))\b"
If .test(a(i, 4)) Then
w = dic(a(i, 1))(mySize)
For ii = 1 To .Execute(a(i, 4))(0).submatches.Count - 1
If .Execute(a(i, 4))(0).submatches(ii) <> "" Then Exit For
Next
If ii = 1 Then ii = ii - 1
w(ii + 7) = w(ii + 7) + a(i, 2): dic(a(i, 1))(mySize) = w
End If
End If
Next
End With
With Sheets("line #").Cells(1).CurrentRegion
.Offset(1).ClearContents
a = .Offset(1).Resize(UBound(a, 1)).Value
For i = 0 To dic.Count - 1
For ii = 0 To dic.items()(i).Count - 1
n = n + 1
For iii = 1 To 13
a(n, iii) = dic.items()(i).items()(ii)(iii)
Next
Next
Next
.Offset(1).Resize(n).Value = a
End With
End Sub
Bookmarks