Excel - как разбить список в ячейке на отдельные ячейки - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь разделить эти имена так, чтобы они были в каждой ячейке.Я пробовал текст в столбцы, и это не делает работу.

enter image description here

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Вот способ сделать это без VBA в Excel 2016:

  • Используйте =TEXTJOIN(), чтобы объединить все значения следующим образом:

=TEXTJOIN(CHAR(10,TRUE,$A$2:$A$5)

  • Теперь у нас есть полная текстовая строка, которую мы хотим объединить с формулой, чтобы получить части из этой строки, которые находятся между CHAR(10) переводом строки.Таким образом, в ячейке B2 вы можете написать:

=TRIM(MID(SUBSTITUTE(TEXTJOIN(Chr(10,TRUE,$A$2:$A$5),CHAR(10),REP(" ",99)),(ROW()-1)*99-98,99))

Перетащите вниз формулу ....

0 голосов
/ 24 февраля 2019

Вы можете использовать код ниже, чтобы разделить строку на chr (10), который представляет символ перевода строки.Обратите внимание на предположение, лежащее в основе заголовка входных данных и столбца вывода.Также обратите внимание, что словарь в этом случае работает только потому, что словари в VBA каким-то образом поддерживают порядок - это вряд ли будет в других языках программирования.

Public Sub sub_test()

    Dim wsThis As Worksheet: Set wsThis = ActiveSheet
    Dim vData As Variant
    Dim dicOutput As Object: Set dicOutput = CreateObject("scripting.dictionary")
    Dim vTemp As Variant
    Dim vLine As Variant
    Dim i As Long


    With wsThis
        ' Read data into memory - assume no header
        vData = .Range(.Range("A1"), .Range("A1").End(xlDown))

        ' Loop through each row
        For i = LBound(vData, 1) To UBound(vData, 1)
            ' Split by new line
            vTemp = Split(vData(i, 1), Chr(10))
            For Each vLine In vTemp
                ' Check if new line is empty string
                If Trim(vLine) <> vbNullString Then
                    dicOutput(vLine) = 1
                End If
            Next vLine
        Next i
        vTemp = Application.Transpose(dicOutput.keys)

        ' Output into worksheet - assume column C
        .Range("C1").Resize(UBound(vTemp, 1) - LBound(vTemp, 1) + 1, UBound(vTemp, 2) - LBound(vTemp, 2) + 1) = vTemp
    End With



End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...