Sub MakeTable()
Dim mtxSite(), mtxInitCode, mtxBrandSite(), mtxTemp(), temp, rng As Range
Dim strSite As String, strInitCode As String, strBrandSite As String, str1 As String
Dim i As Long, j As Long, k As Long, l As Long, m As Long, n As Long
strSite = "Sheet3"
strInitCode = "Sheet1"
strBrandSite = "Sheet2"
'Get mtxSite
Set rng = Range(strSite & "!A1").CurrentRegion.Offset(1)
mtxSite = rng.Resize(rng.Rows.Count - 1).Value
'Get mtxInitCode
Set rng = Range(strInitCode & "!A2")
mtxTemp = Range(rng, rng.SpecialCells(xlCellTypeLastCell)).Value
For i = 1 To UBound(mtxTemp, 1)
If mtxTemp(i, 1) = "" Then
mtxTemp(i, 1) = mtxTemp(i - 1, 1)
End If
If mtxTemp(i, 2) <> "" Then
str1 = str1 & "," & mtxTemp(i, 2)
End If
Next i
temp = Split("ZZZ" & str1, ",")
ReDim mtxInitCode(1 To UBound(temp), 1 To 2)
For i = 1 To UBound(temp)
mtxInitCode(i, 1) = temp(i)
For j = 1 To UBound(mtxTemp, 1)
If InStr(1, mtxTemp(j, 2), temp(i)) > 0 Then
mtxInitCode(i, 2) = mtxTemp(j, 1)
Exit For
End If
Next j
Next i
'Get mtxBrandSite
Set rng = Range(strBrandSite & "!A1").CurrentRegion
mtxBrandSite = rng.Value
'Process
k = UBound(mtxSite, 1)
l = UBound(mtxInitCode, 1)
ReDim mtxTemp(1 To (k * l), 1 To 4)
For i = 1 To UBound(mtxTemp)
j = i Mod k: If j = 0 Then j = k
mtxTemp(i, 1) = mtxSite(j, 1)
mtxTemp(i, 2) = mtxSite(j, 2)
j = Int((i - 1) / k) + 1
mtxTemp(i, 3) = mtxInitCode(j, 1)
For m = 1 To UBound(mtxBrandSite, 2)
If mtxBrandSite(1, m) = mtxTemp(i, 1) Then
For n = 2 To UBound(mtxBrandSite, 1)
If mtxBrandSite(n, 1) = mtxInitCode(j, 2) Then
mtxTemp(i, 4) = mtxBrandSite(n + 1, m)
Exit For
End If
Next n
Exit For
End If
Next m
Next i
'Dump to screen
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
Range("A1:D1").Value = Array("Sites", "SiteCode", "InitCode", "Values")
Range("A2").Resize(UBound(mtxTemp, 1), UBound(mtxTemp, 2)) = mtxTemp
End Sub
Regards
Bookmarks