Macro para texto para coluna, em seguida, transpondo o texto convertido para colunas e inserindo linhas

0

Eu tenho uma planilha do Excel com três colunas SKU, título e tamanho, conforme mostrado aqui:

Depoisdeexecutaramacro,precisoqueafolhafiqueassim:

Estou preso a adicionar linhas para corresponder ao texto convertido à coluna.

    
por Preetam Reddy Pothala 13.04.2017 / 11:16

3 respostas

0

Como isso funciona?

Sub splitBySize()
Dim lastRow As Long, i As Long, k As Long
Dim sizes() As String

lastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = lastRow To 2 Step -1
    sizes = Split(Cells(i, 3), ", ") 'Add sizes to an array
    If UBound(sizes) <> 0 Then ' If there's more than one size, then...
        Range(Cells(i + 1, 1), Cells(i + UBound(sizes), 1)).EntireRow.Insert
        For k = LBound(sizes) To UBound(sizes) ' This will add the sizes to the new cells inserted
            Cells(i, 3).Offset(k, 0).Value = sizes(k)
        Next k
    End If
Next i

End Sub

Basicamente, ele apenas olha para cada linha, coloca os tamanhos em uma matriz, adiciona linhas no meio e preenche as células com os tamanhos.

    
por 13.04.2017 / 16:40
0

Tente isso, mas altere os nomes das planilhas (ou seja, Sheet1 and Sheet2 ) para as planilhas em sua pasta de trabalho. Observe que Sheet2 é uma planilha vazia cujo resultado desejado será armazenado nela.

Option Explicit

Dim wshI As Worksheet
Dim wshO As Worksheet
Dim i As Integer
Dim j As Integer
Dim r As Integer

Sub delimited()

Set wshI = Worksheets("Sheet1") 'change this to the sheet that has your data
Set wshO = Worksheets("Sheet2") 'make a new sheet and change this to its name

'This extract each size to a column (text to columns)
    wshI.Activate
 'Change "100" to the last column of your data
  wshI.Range("C2:C100").TextToColumns Destination:=Range("C2"), DataType:=xlDelimited, _
  TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
  Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
  :=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2)), TrailingMinusNumbers:= _
        True

i = 1
j = 3
r = 1
'This put the desired outcome into the sheet2
While wshI.Cells(i, 1) <> ""
    Do While wshI.Cells(i, j) <> ""
        If j = 3 Then
            wshO.Cells(r, 1) = wshI.Cells(i, 1)
            wshO.Cells(r, 2) = wshI.Cells(i, 2)
            wshO.Cells(r, 3) = wshI.Cells(i, 3)
        Else
            wshO.Cells(r, 3) = wshI.Cells(i, j)
        End If
        j = j + 1
        r = r + 1
    Loop
    j = 3
    i = i + 1
Wend

i = 2
j = 4

'This put the data into its original format
While wshI.Cells(i, 1) <> ""
    Do While wshI.Cells(i, j) <> ""
        wshI.Cells(i, 3) = wshI.Cells(i, 3) & ", " & wshI.Cells(i, j)
        wshI.Cells(i, j).Clear
        j = j + 1
    Loop
j = 4
i = i + 1
Wend

End Sub
    
por 13.04.2017 / 16:41
0

Você pode usar dados ► Obter e transformar ► da tabela

  • Divida a coluna Tamanho por vírgula ou vírgula + espaço
  • Selecione as colunas SKU e título
  • Desativar as "outras" colunas
  • Exclua a terceira coluna; e renomeie a nova terceira coluna "Tamanho"
  • Salve a consulta
  • Use a formatação condicional para eliminar as entradas apropriadas nas colunas A & B
    • A fórmula do CF seria '= AND ($ A2 < > $ A1, $ B2 < > $ B1)
    • O formato numérico personalizado seria ;;;
por 15.04.2017 / 03:20