É muito mais simples ignorar a macro gravada e criar a modificação a partir do zero.
Na sua macro gravada, parece que seus produtos são delimitados por vírgulas, mesmo que seus dados de exemplo mostrem o contrário.
Portanto, supondo que esse seja realmente o caso, o código a seguir é modificado para "dividir" os produtos em linhas separadas:
'v0.1.0
Dim i As Long
Dim col As Integer
Dim DB_Sheet, Rec_Sheet As Object
Set DB_Sheet = ThisWorkbook.Worksheets("Sheet3")
Set Rec_Sheet = ThisWorkbook.Worksheets("Sheet2")
col = 1
For i = 2 To DB_Sheet.Range("A" & Rows.Count).End(xlUp).Row
If DB_Sheet.Rows(i).Hidden = False Then
Rec_Sheet.Cells(1, col) = DB_Sheet.Cells(i, 7)
Rec_Sheet.Cells(2, col) = DB_Sheet.Cells(i, 8)
Rec_Sheet.Cells(3, col) = DB_Sheet.Cells(i, 6)
Rec_Sheet.Cells(4, col) = DB_Sheet.Cells(i, 9)
Dim varProducts As Variant
varProducts = Split(DB_Sheet.Cells(i, 5).Value2, ",")
Rec_Sheet.Cells(5, col).Resize(RowSize:=UBound(varProducts) - LBound(varProducts) + 1).Value2 _
= WorksheetFunction.Transpose(varProducts)
col = col + 1
End If
Next i
A chave é, naturalmente, a função Split()
que converte a string de produtos delimitados por vírgulas em uma matriz de produtos.
É então uma simples questão de produzir esse array para o intervalo apropriado.
Observe que, se um delimitador diferente for necessário, apenas altere o segundo argumento da função Split()
.