Try this:
Code:
Sub LMP_Test()
Dim rngRange As Range
Dim varArrayData() As Variant
Dim varArrayFinal() As Variant
Dim lngLoop1 As Long
Dim lngLoop2 As Long
Dim lngCount As Long
Dim strValue1 As String
Dim strValue2 As String
Const strShtName As String = "Sheet1" 'Change Accordingly
Const strDataStartCell As String = "A1" 'Change Accordingly
Const strFinalDataCell As String = "P1" 'Change Accordingly
With Worksheets(strShtName)
Set rngRange = .Range(strDataStartCell).CurrentRegion
If rngRange.Rows.Count > 1 And rngRange.Columns.Count > 2 Then
varArrayData = rngRange.Value
ReDim varArrayFinal(1 To (UBound(varArrayData) * (UBound(varArrayData, 2) - 2)), 1 To 4)
lngCount = 1
For lngLoop1 = LBound(varArrayData) To UBound(varArrayData)
For lngLoop2 = LBound(varArrayData) + 2 To UBound(varArrayData, 2)
varArrayFinal(lngCount, 1) = varArrayData(lngLoop1, 1)
varArrayFinal(lngCount, 2) = varArrayData(lngLoop1, 2)
If lngLoop2 <= UBound(varArrayData, 2) Then
If varArrayData(lngLoop1, lngLoop2) <> "" Then
varArrayFinal(lngCount, 3) = varArrayData(lngLoop1, lngLoop2)
End If
End If
lngLoop2 = lngLoop2 + 1
If lngLoop2 <= UBound(varArrayData, 2) Then
If varArrayData(lngLoop1, lngLoop2) <> "" Then
varArrayFinal(lngCount, 4) = varArrayData(lngLoop1, lngLoop2)
End If
End If
lngCount = lngCount + 1
Next lngLoop2
Next lngLoop1
Set rngRange = .Range(strFinalDataCell).Resize(, UBound(varArrayFinal, 2))
rngRange.EntireColumn.ClearContents
rngRange.Resize(UBound(varArrayFinal), UBound(varArrayFinal, 2)).Value = varArrayFinal
End If
End With
Set rngRange = Nothing
Erase varArrayData
Erase varArrayFinal
lngLoop1 = Empty
lngLoop2 = Empty
lngCount = Empty
strValue1 = vbNullString
strValue2 = vbNullString
End Sub
Bookmarks