1. Please rely on using the forum, and not Prive Messages
2. If I understand, something like this
Option Explicit
Sub test()
Dim wsDest As Worksheet, wsMap As Worksheet
Dim i As Long, hcell As Range, HeadersOne As Range
Dim colInstrumentType As Long, colProductType As Long, colProductSubType As Long, colProductCode As Long
Set wsDest = Sheets("Destination")
Set wsMap = Sheets("Mapping")
Application.ScreenUpdating = False
With Application.WorksheetFunction
colInstrumentType = .Match("Instrument Type", wsDest.Rows(1), 0)
colProductType = .Match("Product Type", wsDest.Rows(1), 0)
colProductSubType = .Match("Product sub Type", wsDest.Rows(1), 0)
colProductCode = .Match("Product Code", wsDest.Rows(1), 0)
End With
With wsDest
For i = 2 To wsMap.Cells(1, 1).CurrentRegion.Rows.Count
.Cells(i, colProductCode).Value = wsMap.Cells(i, 1).Value
.Cells(i, colInstrumentType).Value = wsMap.Cells(i, 2).Value
.Cells(i, colProductType).Value = wsMap.Cells(i, 3).Value
.Cells(i, colProductSubType).Value = wsMap.Cells(i, 4).Value
Next i
End With
Application.ScreenUpdating = True
End Sub
3. I always like to use meaningful names for variables, like wsDest instead of Sh1 since it helps me to follow my own code after 6 months.
4. If you need something else, just ask