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

То, что мне нужно, является более переменным, чем это. Я получаю данные, экспортированные в список в одной ячейке, где данные, которые должны находиться в одной и той же ячейке, разделяются запятыми с пробелами (например, «собака, кошка», а не «собака, кошка»). Мне нужно, чтобы расщепление происходило во втором («собака, кошка»), но не в первом («собака, кошка»). Это происходит разное количество раз на основе самих данных.

Например, одна ячейка может сказать это:

Прогулка с собаками, Разговор и виля, Кошка-мяу, Хисс и Мур, Попугай Сквок и Разговор, Утка Шарлатан и Разговор

Где мне нужно, чтобы это выглядело так:

ячейка 1: выгула собак, разговоры и вифы

клетка 2: кошка мяу, хисс и мур

Ячейка 3: Попугай Сквок и Talk

клетка 4: утка крякать и говорить

Но в другой ячейке будут другие слова и разное расположение запятых.

Есть какой-либо способ сделать это?

Спасибо!!

2 ответа2

1

Когда мне приходилось делать что-то подобное, я использовал функцию « Найти и заменить», чтобы временно "спрятать" комбинацию символов перед разделением столбцов.

Процесс идет в основном так:

  1. Выделите весь текст, который нужно разбить на столбцы.
  2. Используйте Find and Replace, чтобы изменить все комбинации запятых на что-то еще, что не найдено в данных (я обычно использую что-то вроде @@@).
  3. Запустите функцию « Текст в столбцы» , разделив запятые.
  4. Выберите все вновь созданные столбцы.
  5. Запустите Find и Replace снова, но поменяйте местами, чтобы @@@ были заменены парой запятой-пробела.
0

Это макрос VBA, реализующий решение techturtle. Выберите ячейки, которые вы хотите обработать, и запустите этот короткий макрос:

Sub splitText()
    Dim rng As Range, r As Range, a As Variant, i As Long
    Set rng = Selection.Cells.SpecialCells(2)

    For Each r In rng
        v = r.Value
        If InStr(1, v, ",") > 0 Then
            ary = Split(Replace(v, ", ", Chr(1)), ",")
            i = 1
            For Each a In ary
                r.Offset(0, i).Value = Replace(a, Chr(1), ", ")
                i = i + 1
            Next a
        End If
    Next r
End Sub

Исходные данные нетронуты.

НОТА:

Этот код относится к ячейкам, содержащим константы, а не формулы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .