Как разделить ячейку, используя только пробелы и без точки в качестве разделителя

#excel #vba #split #delimiter

Вопрос:

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

например,

A
10.10.33.187 10.10.48.6 10.10.33.188
10.56.100.77 172.22.210.253
172.22.210.3 172.22.210.6 172.22.210.7 172.22.210.8

преобразуется в,

A B C D
10.10.33.187 10.10.48.6 10.10.33.188
10.56.100.77 172.22.210.253
172.22.210.3 172.22.210.6 172.22.210.7 172.22.210.8

Однако, когда я снова запускаю код, он также разбивает каждый IP-адрес на отдельные номера. Хотя в коде не используется разделитель периодов, почему IP-адрес разделяется по периодам?

Например,

A
10.10.33.187

преобразуется в,

A B C D
10 10 3 187

Я знаю, что это можно сделать с помощью простой функции excel. Однако мне нужен код VBA для более масштабной задачи, для которой это всего лишь один шаг. Итак, может ли кто-нибудь, пожалуйста, помочь мне предотвратить разделение периода (полная остановка)? Без разделителя периодов, почему он разбивает его на периоды?

 Sheets("Hosts").Activate
    Columns("A:A").Select
    Application.CutCopyMode = False
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=True
 

Комментарии:

1. Я бы использовал find() с левой() серединой() и правой (), чтобы разделить их. Подсказка: идите на пробелы…

2. docs.microsoft.com/en-us/office/vba/language/reference/…

3. @braX спасибо за ссылку. Я уже проверил это, прежде чем публиковать здесь. В нем не говорится о точке («.») в качестве разделителя. Поскольку я не использую его в своем коде, мне интересно, почему мой код разбивается на периоды.

Ответ №1:

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

Чтобы этого избежать, я рекомендую указать все параметры метода. Здесь отсутствует один Other:=False , чтобы убедиться, что никакие другие символы не используются для разделения.

 Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=True, Other:=False