Sub test()
Application.ScreenUpdating = False
Dim sw As Workbook
Dim dw As Workbook
Dim srng As Range
swname$ = "Segmentation.xlsx"
swpath$ = ThisWorkbook.Path & "\" & swname
Set dw = ThisWorkbook
c& = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
Workbooks.Open (swpath)
Set sw = Workbooks(swname)
Set srng = sw.Sheets(1).Range("D:R")
    On Error Resume Next
    Sheet1.Range("Q2:Q" & c).Formula = "=VLookup(D2,[Segmentation.xlsx]Sheet1!" & srng.Address & ", 5, False)"
    On Error Resume Next
    Sheet1.Range("R2:R" & c).Formula = "=VLookup(D2,[Segmentation.xlsx]Sheet1!" & srng.Address & ", 8, False)"
    On Error Resume Next
    Sheet1.Range("S2:S" & c).Formula = "=VLookup(D2,[Segmentation.xlsx]Sheet1!" & srng.Address & ", 9, False)"
    On Error Resume Next
    Sheet1.Range("T2:T" & c).Formula = "=VLookup(D2,[Segmentation.xlsx]Sheet1!" & srng.Address & ", 10, False)"
    On Error Resume Next
    Sheet1.Range("U2:U" & c).Formula = "=VLookup(D2,[Segmentation.xlsx]Sheet1!" & srng.Address & ", 11, False)"
    On Error Resume Next
    Sheet1.Range("V2:V" & c).Formula = "=VLookup(D2,[Segmentation.xlsx]Sheet1!" & srng.Address & ", 13, False)"
    On Error Resume Next
    Sheet1.Range("W2:W" & c).Formula = "=VLookup(D2,[Segmentation.xlsx]Sheet1!" & srng.Address & ", 14, False)"
    On Error Resume Next
    Sheet1.Range("X2:X" & c).Formula = "=VLookup(D2,[Segmentation.xlsx]Sheet1!" & srng.Address & ", 15, False)"
   
    Sheet1.Range("Q2:X" & c).Copy
    Sheet1.Range("Q2").PasteSpecial xlValues
    Application.CutCopyMode = False
sw.Close
Application.ScreenUpdating = True
End SubSelect *
From(
SELECT  t1.`Primary SKU`, t1.Category, t1.Placement, t1.Segment, t1.Form,
t1.Size, t1.`Liquid Laundry Size`, t1.Manufacturer, t1.Brand,
COUNT(*) As [Ino Seq]
FROM `C:\FilePath\Segmentation.xlsx`.`Sheet1$` As t1
INNER JOIN
`C:\FilePath\Segmentation.xlsx`.`Sheet1$` As t2
    ON t2.`Primary SKU` = t1.`Primary SKU`
    AND t2.INO <= t1.INO
Group by t1.`Primary SKU`, t1.Category, t1.Placement, t1.Segment, t1.Form,
t1.Size, t1.`Liquid Laundry Size`, t1.Manufacturer, t1.Brand
Order by 2, 10
) as t
Where [Ino Seq] = 1Sub TestVBA()
    OptimizeVBA True
    Dim startTime As Single, endTime As Single
    startTime = Timer
  
    Dim sWb As Workbook
    Dim fWs As Worksheet, sWs As Worksheet
    Dim slRow As Long, flRow As Long
    Dim pSKU As Range, luVal As Range
    Dim lupSKU As Range, outputCol As Range
    Dim vlookupCol As Object
  
    Set sWb = Workbooks.Open(ThisWorkbook.Path & "\Segmentation.xlsx")
    Set sWs = sWb.Sheets("Sheet1")
    Set fWs = ThisWorkbook.Sheets("Sheet1")
  
    slRow = sWs.Cells(Rows.Count, 4).End(xlUp).Row
    flRow = fWs.Cells(Rows.Count, 4).End(xlUp).Row
  
    Set pSKU = sWs.Range("D2:D" & slRow)
    Set lupSKU = fWs.Range("D2:D" & flRow)
  
    For i = 17 To 24
        Set outputCol = fWs.Range(fWs.Cells(2, i), fWs.Cells(flRow, i))
        Select Case i
            Case 17
                Set luVal = sWs.Range("H2:H" & slRow)
            Case 18
                Set luVal = sWs.Range("K2:K" & slRow)
            Case 19
                Set luVal = sWs.Range("L2:L" & slRow)
            Case 20
                Set luVal = sWs.Range("M2:M" & slRow)
            Case 21
                Set luVal = sWs.Range("N2:N" & slRow)
            Case 22
                Set luVal = sWs.Range("P2:P" & slRow)
            Case 23
                Set luVal = sWs.Range("Q2:Q" & slRow)
            Case 24
                Set luVal = sWs.Range("R2:R" & slRow)
        End Select
  
    'Build Collection
        Set vlookupCol = BuildLookupCollection(pSKU, luVal)
  
    'Lookup the values
        VLookupValues lupSKU, outputCol, vlookupCol
    Next i
  
    endTime = Timer
    Debug.Print (endTime - startTime) & " seconds have passed [VBA]"
    OptimizeVBA False
    sWb.Close False
    Set vlookupCol = Nothing
End Sub
Function BuildLookupCollection(categories As Range, values As Range)
    Dim vlookupCol As Object, i As Long
    Set vlookupCol = CreateObject("Scripting.Dictionary")
    For i = 1 To categories.Rows.Count
        vlookupCol.Item(CStr(categories(i))) = values(i)
    Next i
  
    Set BuildLookupCollection = vlookupCol
End Function
Sub VLookupValues(lookupCategory As Range, lookupValues As Range, vlookupCol As Object)
    Dim i As Long, resArr() As Variant
    ReDim resArr(lookupCategory.Rows.Count, 1)
    For i = 1 To lookupCategory.Rows.Count
        resArr(i - 1, 0) = vlookupCol.Item(CStr(lookupCategory(i)))
    Next i
    lookupValues = resArr
End Sub
Sub OptimizeVBA(isOn As Boolean)
    Application.Calculation = IIf(isOn, xlCalculationManual, xlCalculationAutomatic)
    Application.EnableEvents = Not (isOn)
    Application.ScreenUpdating = Not (isOn)
    ActiveSheet.DisplayPageBreaks = Not (isOn)
End SubFor i = 17 To 24
        Set outputCol = fWs.Range(fWs.Cells(2, i), fWs.Cells(flRow, i))
        Select Case i
            Case 17
                Set luVal = sWs.Range("H2:H" & slRow)
            Case 19
                Set luVal = sWs.Range("L2:L" & slRow)
            Case 20
                Set luVal = sWs.Range("M2:M" & slRow)
            Case 21
                Set luVal = sWs.Range("N2:N" & slRow)
            Case 22
                Set luVal = sWs.Range("P2:P" & slRow)
            Case 24
                Set luVal = sWs.Range("R2:R" & slRow)
        End Select Set pSKU = sWs.Range("A2:A" & slRow)
    Set lupSKU = fWs.Range("A6:A" & flRow)
 
    For i = 17 To 24
    skipIt = False
    skipIt = skipIt Or (i = 18)
    skipIt = skipIt Or (i = 23)
    If Not skipIt Then
        Set outputCol = fWs.Range(fWs.Cells(2, i),fWs.Cells(flRow, i))
        Select Case i
            Case 17
                Set luVal = sWs.Range("H2:H" & slRow)
            Case 19
                Set luVal = sWs.Range("L2:L" & slRow)
            Case 20
                Set luVal = sWs.Range("M2:M" & slRow)
            Case 21
                Set luVal = sWs.Range("N2:N" & slRow)
            Case 22
                Set luVal = sWs.Range("P2:P" & slRow)
            Case 24
                Set luVal = sWs.Range("R2:R" & slRow)
        End Select
    End IfSub Lookup()
    OptimizeVBA True
    Dim startTime As Single, endTime As Single
    startTime = Timer
 
    Dim sWb As Workbook
    Dim fWs As Worksheet, sWs As Worksheet
    Dim slRow As Long, flRow As Long
    Dim pSKU As Range, luVal As Range
    Dim lupSKU As Range, outputCol As Range
    Dim vlookupCol As Object
    Dim i As Integer
 
    Set sWb = Workbooks.Open("C:\Users\america.xlsx")
    Set sWs = sWb.Sheets("source data")
    Set fWs = ThisWorkbook.Sheets("Destination")
 
    slRow = sWs.Cells(Rows.Count, 1).End(xlUp).Row
    flRow = fWs.Cells(Rows.Count, 1).End(xlUp).Row
 
    Set pSKU = sWs.Range("A2:A" & slRow)
    Set lupSKU = fWs.Range("A6:A" & flRow)
 
    For i = 17 To 24
    skipIt = False
    skipIt = skipIt Or (i = 18)
    skipIt = skipIt Or (i = 23)
    If Not skipIt Then
        Set outputCol = fWs.Range(fWs.Cells(6, i),fWs.Cells(flRow, i))
        Select Case i
            Case 17
                Set luVal = sWs.Range("H2:H" & slRow)
            Case 19
                Set luVal = sWs.Range("L2:L" & slRow)
            Case 20
                Set luVal = sWs.Range("M2:M" & slRow)
            Case 21
                Set luVal = sWs.Range("N2:N" & slRow)
            Case 22
                Set luVal = sWs.Range("P2:P" & slRow)
            Case 24
                Set luVal = sWs.Range("R2:R" & slRow)
        End Select
    End If
 
    'Build Collection
        Set vlookupCol = BuildLookupCollection(pSKU, luVal)
 
    'Lookup the values
        VLookupValues lupSKU, outputCol, vlookupCol
    Next i
 
    endTime = Timer
    Debug.Print (endTime - startTime) & " seconds have passed [VBA]"
    OptimizeVBA False
    sWb.Close False
    Set vlookupCol = Nothing
End Sub
Function BuildLookupCollection(categories As Range, values As Range)
    Dim vlookupCol As Object, i As Long
    Set vlookupCol = CreateObject("Scripting.Dictionary")
    For i = 1 To categories.Rows.Count
        vlookupCol.Item(CStr(categories(i))) = values(i)
    Next i
 
    Set BuildLookupCollection = vlookupCol
End Function
Sub VLookupValues(lookupCategory As Range, lookupValues As Range, vlookupCol As Object)
    Dim i As Long, resArr() As Variant
    ReDim resArr(lookupCategory.Rows.Count, 1)
    For i = 1 To lookupCategory.Rows.Count
        resArr(i - 1, 0) = vlookupCol.Item(CStr(lookupCategory(i)))
    Next i
    lookupValues = resArr
End Sub
Sub OptimizeVBA(isOn As Boolean)
    Application.Calculation = IIf(isOn, xlCalculationManual, xlCalculationAutomatic)
    Application.EnableEvents = Not (isOn)
    Application.ScreenUpdating = Not (isOn)
    ActiveSheet.DisplayPageBreaks = Not (isOn)
End Sub