Разделить домашний адрес через запятую - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть около 15 адресов, отформатированных как, 1111 Really Cool Street, Sweet City, Awesome State Мне нужно разделить их на отдельные ячейки для их улицы, города и штата.

Проблема, которую я имею в настоящее время, заключается в сохранении улицы, городаи гос.Я попробовал что-то в этом роде ..

Dim addressArray() As String

posRow = 1
Do
posRow = posRow + 1
    addressFromCell= Sheet1.Cells(posRow , "C")
    addressArray() = Split(addressFromCell, ",")
        Sheet2.Cells(posRow , "A") = addressArray(0)
        Sheet2.Cells(posRow , "B") = addressArray(1)
        Sheet2.Cells(posRow , "C") = addressArray(2)
Loop Until posRow = 15

Я думал, что addressArray будет выглядеть как {"1111 Really Cool Street","Sweet City", "Awesome State"}, и я мог просто передать элемент, который хотел.Вместо этого я продолжаю получать

Ошибка времени выполнения '9': нижний индекс вне диапазона

Любая помощь будет отличной, спасибо!

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Попробуй,

Sub test()
    Dim vArray
    Dim vDB, vR()
    Dim i As Long, r As Long, j As Integer
    Dim k As Integer
    Dim s, e
    's = Timer
    vDB = Range("c2", "c15")
    r = UBound(vDB, 1)
    ReDim vR(1 To r, 1 To 3)
    For i = 1 To r
        vArray = Split(vDB(i, 1), ",")
        k = UBound(vArray)
        If k > 0 And k < 3 Then
            For j = 1 To k
                vR(i, j) = vArray(j - 1)
            Next j
        End If
    Next i
    With Sheet2
        .Range("a2").Resize(r, 3) = vR
    End With
    'e = Timer
    'Debug.Print "Test() time : " & (e - s)
End Sub
0 голосов
/ 07 декабря 2018

Как указал Кен Уайт, причина ошибки заключается в том, что одно из значений не содержит 2 запятых.

Вот как я бы это сделал:

Dim addressArray() As String

posRow = 1
Do
    posRow = posRow + 1
    addressArray() = Split(Sheet1.Cells(posRow, "C").Value, ",")
    Sheet2.Cells(posRow, "A").Resize(1, UBound(addressArray) + 1).Value = addressArray()
Loop Until posRow = 15

Этот код использует функцию UBound для получения верхней границы (номера последнего элемента) для массива и гарантирует, что диапазон всегда равен размеру массива.

0 голосов
/ 07 декабря 2018

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

posRow = 1
Do
posRow = posRow + 1
    addressFromCell = Sheet1.Cells(posRow, "C")
    If addressFromCell <> "" Then
        addressArray() = Split(addressFromCell, ",")
        If UBound(addressArray) = 2 Then
            Sheet2.Cells(posRow, "A") = addressArray(0)
            Sheet2.Cells(posRow, "B") = addressArray(1)
            Sheet2.Cells(posRow, "C") = addressArray(2)
        End If
    End If
Loop Until posRow = 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...