Как извлечь строку между N-м и N+1-м вхождением символа в Excel 2010?

Как извлечь строку между N-м и N+1-м вхождением символа в Excel 2010?

У меня есть электронная таблица со столбцом, содержащим список из одного или нескольких имен баз данных. К сожалению, время выполнения для изменения этого отчета долгое. Поэтому мне нужно манипулировать данными.

Столбец содержит все базы данных, относящиеся к записи в одной ячейке, разделенные запятыми. Мне нужно разобрать этот список и поместить каждую базу данных в отдельную ячейку. Важное примечание: янетразрешено использовать макросы/код VBA в этом решении.

Первый простой: найдите первую запятую, верните все, что слева от нее. А вот со следующими у меня проблемы.

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

Как мне справиться со следующими?

решение1

Это не ответ функции рабочего листа, но он и не использует VBA.

Вы пробовали использовать функцию "Текст по столбцам"? В Excel 2010 это одна из кнопок на ленте "Данные".

  1. Выберите колонку.
  2. Нажмите кнопку «Текст по столбцам».
  3. На первой странице мастера выберите «С разделителями», затем «Далее».
  4. На второй странице отметьте «Запятая», чтобы выбрать ее в качестве разделителя. Вы можете отметить/снять отметки с некоторых других пунктов в зависимости от формата ваших данных.
  5. На этом этапе вы, вероятно, уже можете нажать кнопку «Готово», чтобы разбить данные на столбцы, но, возможно, вам захочется перейти на следующую страницу, чтобы изменить форматы столбцов.

решение2

С образцами данных вА1, вВ1входить:

=TRIM(MID(SUBSTITUTE($A1,",",REPT(" ",999)),COLUMNS($A:A)*999-998,999))

и скопируйте:

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

ПРАВКА №1:

Если мы начнем с материала в столбцахАиБтак:

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

и запустите этот короткий макрос:

Sub dural()
   Dim N As Long, i As Long, K As Long
   N = Cells(Rows.Count, "A").End(xlUp).Row
   K = 1

   For i = 2 To N
      v = Cells(i, "A").Value
      ary = Split(Cells(i, "B").Value, ",")
      For Each a In ary
         Cells(K, "C").Value = v
         Cells(K, "D").Value = a
         K = K + 1
      Next a
   Next i
End Sub

мы получим в итоге следующее:

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

Связанный контент