Essas tarefas geralmente são mais rápidas com o VBA. Na verdade, levei ~ 10 minutos para configurá-lo.
Estou assumindo que seus dados estão na coluna A para a coluna H.
Vá para Excel » Developer » Visual Basic
»No painel esquerdo, abra sheet1
(ou) a planilha onde seus dados residem» Insira o código na janela da direita »Execute o código
código VBA
1 |Sub NewLayout()
2 | For i = 2 To Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
3 | For j = 0 To 2
4 | If Cells(i, 3 + j) <> vbNullString Then
5 | intCount = intCount + 1
6 | Cells(i, 1).Copy Destination:=Cells(intCount, 10)
7 | Cells(i, 2).Copy Destination:=Cells(intCount, 11)
8 | Cells(i, 3 + j).Copy Destination:=Cells(intCount, 12)
9 | Cells(i, 6 + j).Copy Destination:=Cells(intCount, 13)
10| End If
11| Next j
12| Next i
13|End Sub
Explicação
Minha intenção era manter o código o mais curto possível para explicá-lo melhor. Basicamente, usamos dois loops. O loop externo ( i
) é para as linhas e o loop interno ( j
) para as colunas de preço.
Nós usamos muito o cells(rowNumber,columnNumber)
para ler / gravar células.
-
Linha 2 | Inicie um loop da linha 2 para a última linha. Nós iteramos através de cada linha usada
-
Linha 3 | Inicie um segundo loop de 0 a 2 (que são na verdade 3 loops, um para cada coluna Price)
-
Linha 4 | Usamos esse loop interno para verificar valores em nossa linha e coluna atuais Preço A, depois Preço B e no último loop Preço C. Se encontrarmos um valor em uma coluna Preço, continuaremos e copiaremos as células. Se nenhum preço for inserido, não faremos nada e passaremos para a próxima coluna Preço
-
Linha 5 | Conte um contador para saber quantas linhas já copiamos,
então sabemos depois de qual linha podemos copiar nossa linha atual -
Linha 6 | Copie a coluna de nome
-
Linha 7 | Copie a coluna de descrição
-
Linha 8 | Copie a coluna Preço A ou B ou C, dependendo do loop interno que atualmente estamos
-
Linha 9 | Copie a coluna SKU A ou B ou C, dependendo do loop interno que estamos atualmente
Captura de tela do resultado