Escape-символ в vba

Я видел похожие темы в Интернете, но не могу найти подходящую для моей проблемы. Я сокращу свое обсуждение, так как это слишком долго, чтобы обсуждать. Поэтому мне нужно объединить столбец A, столбец B и столбец C, разделенные знаком «¦». Мне нужно разделить с помощью «» (не нужно спрашивать, почему мне нужно объединить ¦, а затем разделить его с помощью ¦ - это долгий процесс. Это только суть), но есть вероятность, что данные содержат «¦ ". Можно ли игнорировать или сначала убрать символ "¦" в данных, чтобы он не считался разделителем? Изменение разделителя также может появиться в данных. Я делаю форму, поэтому мне нужно использовать VBA.

Например,

Column A     | Column B     | Column C     | Column D
111          | AAA          | 1A1          | 111¦AAA¦1A1
222          | BBB          | 2B2          | 222¦BBB¦2B2
333          | CC¦C         | 3C3          | 333¦CC¦C¦3C3 

Если я разделю приведенный выше пример, он будет выглядеть так, а это неверно.

Column A     | Column B     | Column C     | Column D
111          | AAA          | 1A1          | 
222          | BBB          | 2B2          | 
333          | CC           | C            | 3C3

По какой причине вы должны использовать этот конкретный разделитель?

Rory 31.10.2018 12:22

Разве вы не можете использовать «Фиксированную ширину» при использовании мастера импорта текста? После импорта текста в Excel вы можете заменить символ | пустым символом.

Dominique 31.10.2018 12:24

@Rory - Я не могу вспомнить другие символы, которые невозможно использовать в данных. Но, не ожидал, когда я попытался создать отчет и потерпел неудачу. Итак, когда я проверил данные клиента, есть. Я делаю форму, поэтому мне нужно использовать VBA.

pinkpanther 31.10.2018 12:28

@Dominique - я создаю форму, поэтому мне нужно использовать VBA.

pinkpanther 31.10.2018 12:32
2
4
474
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Откровенно говоря, ваши данные плохо сформированы, но это life :)! Вам необходимо использовать так называемые «квалификаторы текста», которые позволят символу, который вы используете в качестве разделителя, появляться в текстовых элементах, которые вы хотите разделить, и не рассматривать его как разделитель.

Пример того, что вам нужно:

"111"|"AAA"|"1A1" "222"|"BBB"|"2B2" "333"|"CC|C"|"3C3"

Скопируйте / вставьте третью строку данных в новый лист, а затем запустите на ней мастер текста в столбцы (TtCW) для текста с разделителями. На втором этапе вы увидите раскрывающийся список «Классификатор текста» с правой стороны.

Возможно, вам понадобится использовать VBA для объединения данных с текстовыми квалификаторами, а затем снова разделить их с помощью TtCW. Запишите макрос, чтобы увидеть, как вы можете его автоматизировать, и вы сможете включить его в свой код.

Я делаю форму, поэтому мне нужно использовать VBA.

pinkpanther 31.10.2018 12:30

Мое решение использует Get & Transform без vba (требуется недавнее дополнение Excel или Power Query). Я отлично работал с вашими данными, оставив CC¦C в столбце B.

Получить данные из диапазона

Разделить все с помощью | разделитель

Щелкните правой кнопкой мыши последний столбец -> Разделить по разделителю ¦

Переименовать заголовки столбцов

Я делаю форму, поэтому мне нужно использовать VBA.

pinkpanther 31.10.2018 12:30

Преобразование текста в столбцы с VBA - ваш лучший выбор, тогда другой ответ выглядит хорошо.

OwlsSleeping 31.10.2018 12:42
Ответ принят как подходящий

вы можете заменить | на символ, который вы не используете, например, на ^ (или с каким-либо шаблоном, например, [ThisIsPipe]), а во время split() (или после) заменить обратно ^ (или введенный шаблон), например, на |.

ИМХО, для [конкатенации ~~> split] лучше использовать те символы, которые не отражаются в листе

Согласовано. Мне нравится использовать что-то из непечатаемого диапазона, например Chr$(30) (разделитель записей) или Chr$(7) (звонок) для подобных вещей.

Comintern 31.10.2018 13:52

@Vasily - спасибо :). Сейчас я использую вашу идею.

pinkpanther 31.10.2018 14:31

Другие вопросы по теме