Розбийте вміст комірок на кілька окремих рядків у Excel


3

Припустимо, в комірці A1 у мене є кілька розділених комами букв.

content(A1 cell) = A, W, L, F

Я хотів би отримати такий результат:

content(A2 cell) = A
content(A3 cell) = W
content(A4 cell) = L
content(A5 cell) = F

Однак якщо я набираю в комірці A1 таке:

content(A1 cell) = S, E, U, F, H, R, T

Я хотів би бути результатом:

content(A2 cell) = S
content(A3 cell) = E
content(A4 cell) = U
content(A5 cell) = F
content(A6 cell) = H
content(A7 cell) = R
content(A8 cell) = T

Чи є функція, яка буде виконувати цю роботу? Наприклад, я хотів би, щоб формула функції у комірці B1, яка перевіряє вміст комірки А1 та її вихідні результати, були вищезазначеними результатами. Будь-яка допомога вдячна.


1
Я можу це зробити з Python, хоча, можливо, це можна зробити і з VBA. Можливо, замість введення цих значень, розділених комами, в Excel, ви могли б помістити їх у текстовий файл із розширенням .CSV та імпортувати його?
Мавг

1
Я не можу придумати простий спосіб зробити це за один крок, але відчувається, що ви можете скористатися вбудованою функцією Excel у тексті до стовпців Excel, а потім скопіювати Копіювати> Спеціальна вставка> Перенести, щоб потрапити в рядки залежно від обсягу даних
RickyTillson

1
На вкладці DATA ви можете використовувати це "Текст до стовпців", щоб зробити це.
Кевін Ентоні Оппегаард піднявся

Відповіді:


2

формула

=INDEX(MID(SUBSTITUTE($A$1,", ",""),ROW($A$1:INDIRECT("a"&LEN(SUBSTITUTE($A$1,", ","")))),1),ROWS($A$1:A1))

1
щоб видалити помилку (#REF!), додайте функцію iferror. щось на кшталт: IFERROR (вище формули, "")
vivek

0

Розділити клітинку в рядки

Функції не працюють так, як ви описали можливу функціональність у своєму запитанні, але ось "подібне" рішення VBA за допомогою події зміни робочого листа .

Основні моменти

  • У Worksheet_Changeви можете вибрати (забезпечувати) Split Range Cell Адреса , що містить дані з роздільниками ( cStrCell) і Split Роздільник ( cStrDel).
  • Змінюючи дані в діапазоні розділених комірок , рішення скопіює розмежовані дані нижче розділеного діапазону комірок у розділений діапазон даних та видалить усі дані нижче.
  • Зміна будь-якої комірки в розділеному діапазоні даних неможлива.

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

Скопіюйте наступний код у потрібне вікно коду аркуша, наприклад, Sheet1 (Код).

Код

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Const cStrCell As String = "A1"   ' Split Cell Range Address
    Const cStrDel As String = ","     ' Split Delimiter

    Application.EnableEvents = False

    ' Check if changed cell range is contained in Split Range.
    If Not Intersect(Target, Range(cStrCell).Resize(UBound(Split( _
            Range(cStrCell), cStrDel)) + 2)) Is Nothing Then

        On Error GoTo ProcedureExit

        ' Check if changed cell range address
        ' is equal to Split Cell Range Address.
        If Target.Address = Range(cStrCell).Address Then
            ' Clear contents of data below Split Range.
            Range(Range(cStrCell).Offset(1), Cells(Rows.Count, _
                    Range(cStrCell).Column).End(xlUp)).ClearContents
        End If

        ' Fill Split Range with Split Data
        ' i.e. copy Split Data below Split Cell Range.
        SplitToRows Range(cStrCell), cStrDel

    End If

ProcedureExit:
    Application.EnableEvents = True

End Sub

Sub SplitToRows(SplitCellRange As Range, Optional Delimiter As String = ",")

    Dim vntS As Variant   ' Source Array
    Dim vntT As Variant   ' Target Array
    Dim i As Long         ' Arrays Row Counter

    ' Split first cell in SplitCellRange by Delimiter into Source Array.
    vntS = Split(SplitCellRange.Cells(1, 1), Delimiter)

    ' Resize 2D one-based Target Array.
    ReDim vntT(1 To UBound(vntS) + 1, 1 To 1)

    ' Trim and copy from Source to Target Array.
    For i = 0 To UBound(vntS)
        vntT(i + 1, 1) = Trim(vntS(i))
    Next

    ' Copy Target Array to Target Range below SplitCellRange.
    SplitCellRange.Cells(1, 1).Offset(1).Resize(UBound(vntT)) = vntT

End Sub

Шановні. Дуже дякую за відповіді. Позначена відповідь мені легше.
Домдамо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.