Макрос для тексту в стовпчик, потім перекладає перетворений текст у стовпці та вставляє рядки


0

У мене є лист Excel з трьома стовпцями SKU, заголовком та розміром, як показано тут:

введіть тут опис зображення

Після запуску макроса мені потрібен аркуш, щоб виглядати так:

введіть тут опис зображення

Я застряг у додаванні рядків, щоб відповідати перетвореному тексту до стовпця.


1
Відповідь @BruceWayne є більш досконалою. Я намагався дати вам відповідь, яка дає вам деяке розуміння, щоб ви могли почати писати власні макроси.
М--

Відповіді:


0

Як це працює?

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

В основному, він просто переглядає кожен рядок, розміщує розміри в масив, додає рядки між ними, а потім заповнює клітинки розмірами.


0

Спробуйте це, але змініть назви аркушів (тобто Sheet1 and Sheet2) на аркуші робочої книги. Зауважте, що Sheet2це порожній аркуш, бажаний результат буде збережений у ньому.

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

0

Ви можете використовувати дані ► Отримати та перетворити ► З таблиці

  • Розділіть стовпчик "Розмір" на коми або пробіл із комою +
  • Виберіть стовпці SKU та назва
  • UNpivot "інші" стовпці
  • Видалити третій стовпчик; і перейменуйте новий третій стовпець "Розмір"
  • Збережіть запит
  • Використовуйте умовне форматування, щоб видалити відповідні записи у стовпцях A & B
    • Формула CF буде "= AND ($ A2 <> $ A1, $ B2 <> $ B1)
    • Формат користувальницького номера буде ;;;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.