2015-06-30 5 views
0

У меня есть адрес в поле ниже формате:EXCEL - расщепленные Австралийские адреса в несколько колонок

67 Sydney Road 
Coburg 
Vic 3058 

Есть ли способ, что я разделил этот адрес на 4 колонки в Excel сам по себе, такие как:

Address Line 1 : 67 Sydney Road 
City: Coburg 
State: VIC 
Postcode: 3058 

Все мои адреса отформатированы аналогичным образом. Фактически есть возврат каретки между адресной линией и городом, а также городом и штатом.

Благодаря

ответ

1

В качестве альтернативы вы можете также написать матричную функцию, которая возвращает массив. Выберите четыре ячейки в строке, введите формулу

=addr(<cell-reference>) 

и подать с <shift><cntrl><return>. Затем матричная функция вернет четыре строки поля ввода в четыре отдельных столбца в одной строке, которые затем можно обрабатывать в соответствии с вашими требованиями.

Функция addr() может быть что-то вроде этого

Function addr(v) 
Dim i%, a 
a = split(v, Chr(10)) ' option base 0 is in effect ... 
ReDim out(1 To 1, 1 To UBound(a) + 1) 
For i = 0 To UBound(a) 
out(1, i + 1) = a(i) ' matrix functions need to return a 2D array 
Next i 
addr = out    ' this puts the separated values into your table 
End Function 

function addr in VB macro editor

+0

Я пробовал этот метод, но все, что я получаю, это #NAME? во всех четырех столбцах – Saj

+0

Вам необходимо иметь эту функцию в разделе «Модули» вашей книги, см. мой отредактированный пост. – cars10m

+0

Что-то, должно быть, ускользнуло от меня. Я снова переписал сценарий, и на этот раз он сработал. Спасибо тебе за это! – Saj

1

Я бы рекомендовал использовать регулярное выражение для решения этой задачи. Но сначала более простой метод:

Чтобы разделить детали, вы можете использовать метод Split(text_string, delimiter). Сначала вы могли бы разделить на возврат каретки, тогда вы могли бы разделить на пробелы, чтобы отделить сами данные.

Но этот метод имеет один большой недостаток, если у вас есть «нечистые» данные с более чем одним пробелом или другими проблемами. Если у вас более одного белого, вам нужно будет использовать Trim(), чтобы избавиться от них.

Чтобы быть в безопасности и иметь возможность анализировать «более сложные» случаи, я бы рекомендовал использовать регулярные выражения. Сложнее учиться, но у вас есть больше возможностей для анализа текстов. Большим преимуществом является то, что вы можете группировать свои результаты, чтобы вы могли работать с именами групп, такими как «улица» или «город». Это гораздо легче читать, чем Array [0].

+0

Я читал о регулярных выражениях, и это звучит как путь. Тем не менее, я пытаюсь выполнить эту задачу до завтрашнего утра, и я не думаю, что могу написать что-то достаточно быстрое. – Saj

0

Если вы полностью уверены, что формат адреса останется прежним, то это должно решить вашу проблемно

Sub splitAddress() 
    Dim WrdArray() As String 
    Dim WrdArray2() As String 
    Dim text_string, temp, strg As String 
    text_string = "67 Sydney Road\nCoburg\nVic 3058" 
    WrdArray() = Split(text_string, "\n") 
    temp = Split(text_string, "\n")(2) 
    WrdArray2() = Split(temp, " ") 
    ReDim Preserve WrdArray(1) 
    ReDim Preserve WrdArray(3) 
    WrdArray(2) = WrdArray2(0) 
    WrdArray(3) = WrdArray2(1) 
    strg = "Address Line 1 : " & WrdArray(0) & vbNewLine & "City: " & WrdArray(1) & vbNewLine & "State: " & WrdArray(2) & vbNewLine & "Postcode: " & WrdArray(3) 
    MsgBox strg 
End Sub 
Смежные вопросы