Нахождение следующего вхождения чего-либо с использованием InStr в той же строке ввода - PullRequest
0 голосов
/ 12 апреля 2019

В настоящее время я читаю данные адреса в CSV-файле, разделенных запятыми.Данные выглядят так:

123 Main St, Rubber Boots, MANITOBA

Порядок данных всегда является адресом улицы, городом, провинцией.

Я пытаюсь использовать InStr, чтобы найти местоположение запятой, котораяЯ легко могу сделать первый, но с его помощью можно найти второе вхождение.Я пытаюсь взять каждую подстроку и обрезать ее для вывода в свою собственную ячейку в Excel.При обрезке средней подстроки я все еще остаюсь с остальной частью строки, есть ли способ обойти это так, чтобы "MANITOBA" находился в своей собственной ячейке?Спасибо!

city = ""
province = ""
streetAddress = ""
shippingAddress = CStr(Sheet1.Cells(currRawRow, "C"))
commaPos = InStr(1, shippingAddress, ",")
If (commaPos > 0) Then
     streetAddress = Trim(Left(shippingAddress, (commaPos - 1)))
     commaPos = InStr(commaPos, shippingAddress, ",")
     city = Trim(Mid(shippingAddress, (commaPos + 1)))
End If

ТЕКУЩИЙ ВЫХОД: enter image description here

ОБНОВЛЕННЫЙ КОД С ИСПОЛЬЗОВАНИЕМ РАЗДЕЛА:

city = ""
province = ""
streetAddress = ""
shippingAddress = CStr(Sheet1.Cells(currRawRow, "C"))
shippingParts = Split(shippingAddress, ",")
streetAddress = shippingParts(0)
city = shippingParts(1)
province = shippingParts(2)

ОБНОВЛЕННЫЙ ВЫХОД:

enter image description here

Ответы [ 2 ]

3 голосов
/ 12 апреля 2019

Используйте Split вместо Instr, если это возможно.

Sub tester()
    Dim s As String
    Dim a() As String

    s = "123 Main St, Rubber Boots, MANITOBA"

    a = Split(s, ",")

    Debug.Print a(0)
    Debug.Print a(1)
    Debug.Print a(2)
End Sub
0 голосов
/ 12 апреля 2019
Sub manitoba()
Const addressString = "123 Main St, Rubber Boots, MANITOBA"
Dim str1 As String
Dim str2 As String
Dim str3 As String
Dim tempString As String
tempString = addressString

str1 = Mid(tempString, 1, InStr(tempString, ",") - 1)
tempString = Mid(tempString, InStr(tempString, ",") + 1, Len(tempString))
Debug.Print str1

str2 = Mid(tempString, 1, InStr(tempString, ",") - 1)
Debug.Print str2

str3 = Mid(tempString, InStr(tempString, ",") + 1, Len(tempString))
Debug.Print str3
End Sub

Я уверен, что кто-то может даже разработать более элегантную рекурсивную функцию. Я слишком устал для этого: P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...