#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