2013-07-17 2 views
0

У меня есть CSV-файл, импортированный в Excel 2010. Одна ячейка содержит часть текста, которую я хочу, но она имеет разные длины и местоположения внутри ячейки. Не каждая запись имеет данные в ячейке. Каждый фрагмент текста разделяется точкой с запятой (;), но все же внутри одной ячейки. Итак:Как выбрать только некоторые данные из ячейки с несколькими значениями?

  • В2 = text_I_want
  • В3 =
  • пустым
  • В4 = text_I_don't_want; text_I_want_that_has_a_different_length; more_text_I_don't_want
  • B5 = text_I_don't_want; text_I_don't_want; text_I_don't_want; text_I_want_now;

Столбец M той же строки должен содержать весь текст, который я хочу, но только то, что я хочу. Итак:

  • M2 = text_I_want
  • M3 = пустой
  • M4 = text_I_want_that_has_a_different_length
  • M5 = text_I_want_now

Есть более 10000 записей, чтобы пройти и был бы признателен за помощь.

EDIT: Я не объяснял себя четко. Столбец B содержит строку текста, содержащую различные гиперссылки. Каждая ячейка может содержать нулевые гиперссылки, одну гиперссылку, 2, 3, 4 и так далее. Каждая гиперссылка разделяется точкой с запятой. Я хочу только гиперссылки amazon.com, а не amazon.ca или amazon.co.uk или любые другие гиперссылки. Надеюсь, это более ясный пример, с тем, что я хочу в отдельном поле, выделено жирным шрифтом. -B2 = amazon.com/12345 -B3 = amazon.ca/search? Keywords = William + Shatner -B4 = amazon.ca/12AB; amazon.com/AB1; loc.gov/fubar -B5 = amazon.com/978037346; amazon.de/search?VX123 EDIT # 2 - Поскольку я могу преобразовать текст в столбцы, как насчет этих вопросов: как мне искать столбцы столбцов строки com для любой ячейки, содержащей amazon.com, а затем копировать содержимое этой ячейки в столбец M?

+0

от того, что я вижу, я думаю, что есть образец? .. как его отдаляется 1 точку с запятой в то время –

+0

@FrancisFuerte Узор было бы полезно, но по-видимому, это не будет повторяться в 10000 раз? – pnuts

ответ

0

Вы можете использовать Find/FindB (в зависимости от того, является ли ваш контент одиночным байтом или данными MBCS - те, которые заканчиваются на B, предназначены для данных MBCS).

В N2, к примеру, вы можете использовать

=Find(M2, B2) 

N2 будет содержать смещение (индекс) текста в M2 в B2 или ноль, если он не найден.

Для извлечения текста используйте Mid/MidB и Len/LenB.Вы можете добавить это в P2, например:

=IF(N2 > 0, MID(B2, N2, LEN(M2)), "") 

Это проверяет, является ли значение в N2 больше нуля, и если она копирует текст из B2 начиная с позиции, указанной в N2 для числа символов, возвращаемых как длина текста в M2. Если N2 равно нулю, он возвращает пустое пространство.

You может, на самом деле, объединить обе операции в один (это немного сложнее читать):

=IF(Find(M2, B2) > 0, Mid(B2, Find(M2, B2), Len(M2)), "")  
+0

Я боюсь, что хотя бы один из нас совершенно неправильно понял вопрос! – pnuts

+1

Да, это так. Похоже, что вопрос полностью изменился с помощью редактирования, сделанного после того, как я опубликовал свой ответ (это принципиально другой вопрос, чем то, что изначально было изложено здесь). Пока неясно, что на самом деле спрашивает плакат, а искаженный текст в отредактированном разделе не очень помогает. Плакат должен приложить усилия, чтобы решить это в VBA, а затем опубликовать * ясный образец *, код, который не работает, и более четко сформулировать вопрос. Однако, похоже, это не произойдет. Мой ответ все еще легко адаптируется к части «EDIT # 2», поэтому я оставлю это. –

+0

Ссылки на M2 в формуле для размещения в столбце M выглядят сомнительными. – pnuts

-1

на основе первого редактирования, с amazon.com/ в B1 (ради гибкости) затем:

=IF(AND(IFERROR(FIND(";",B2,IFERROR(FIND($B$1,B2),"")),"")="",IFERROR(FIND($B$1,B2),"")<>""),B2,IFERROR(MID(B2,IFERROR(FIND($B$1,B2),""),IFERROR(FIND(";",B2,IFERROR(FIND($B$1,B2),"")),"")-IFERROR(FIND($B$1,B2),"")),"")) 

(скопировано по мере необходимости) должно работать.

SO17689216 example

Смежные вопросы