У меня есть столбец адресов и строки при том что возможны матчи:Extract каждого слова в ячейке
Я хотел бы быть в состоянии выделить (в зеленом цвете, говорит) строка что я думаю, что лучше всего соответствует «Lookup Address».
Итак, для A1, поскольку в «Lookup Address» нет состояния, это все догадывается, что является «правильным». Однако, скажем, что адрес поиска: «123 Пенсильвания, Пенсильвания». Я бы хотел, чтобы результаты «PA» ниже «Lookup Value» были выделены зеленым цветом.
Как вы можете видеть, у меня есть состояние каждого найденного адреса в колонке G.
Я был в состоянии создать цикл, который проходит через каждый найденный диапазон адресов, но у меня возникает проблемы мышление о том, как выполните согласование состояния.
Вот что я до сих пор:
Sub check_Location_State_Pick_Most_Likely()
'After you run the XML reader and have your data, run this to highlight the most likely match
Dim lastRow As Integer, locStartRow As Integer, locEndRow As Integer
Dim cel As Range, rng As Range
Dim locLookupState As String, locResultState As String
Dim stateArray() As Variant
stateArray = Array("Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming")
Dim stateAbbreviationArray() As Variant
stateAbbreviationArray = Array("AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY")
'If IsInArray("californa", stateArray) Then
' Debug.Print "California is found in the array"
'Else
' Debug.Print "Californa is not found in the arraay"
'End If
lastRow = ActiveSheet.UsedRange.Rows.Count
' Since each location in column A start with "Lookup Address", we can use that
Dim nextString As String
nextString = "Lookup Address"
Dim noAddresses As Integer
noAddresses = WorksheetFunction.CountIf(Range(Columns(1), Columns(1)), "Lookup Address*")
For i = 1 To noAddresses
If i = 1 Then
locStartRow = 1
Else
locStartRow = Columns(1).Find(what:=nextString, after:=Cells(locStartRow, 1)).row
End If
locEndRow = Columns(1).Find(what:=nextString, after:=Cells(locStartRow, 1)).row
If locEndRow = 1 Then locEndRow = Cells(60000, 1).End(xlUp).row ' Because, after cell 71, there is no Lookup Address, so it loops back to top
If locEndRow = lastRow Then
Set rng = Range(Cells(locStartRow + 1, 1), Cells(locEndRow, 1))
Else
Set rng = Range(Cells(locStartRow + 1, 1), Cells(locEndRow - 1, 1))
End If
' Do something with the ranges!
Dim stateRange As Range
Set stateRange = rng.Offset(0, 6)
' Now, loop through Cells(locStartRow,1) and try to see if this word exists in your StateArray.
Next i
End Sub
Я имею в виду: Для каждой ячейки с «Lookup Address», петля через каждое слово и посмотреть, если он существует в моем государстве массива.
Я не знаю, как пройти через каждое слово в ячейке/строке. Я знаю, как делать каждого персонажа, но я нажимаю на стену каждое слово. Хотел бы я как-нибудь использовать Mid()
, чтобы получить каждое слово?
Конечно, если есть какие-либо другие идеи о том, как это сделать (конечная цель - разумное предположение о том, какой из результатов адреса соответствует «адресу поиска»).
Надеюсь, это имеет смысл, спасибо за любые идеи!
Thanks cyboashu! Я был в состоянии принять ваш ответ и работать в этом, что то, что я хотел: D
Dim arrComma
arrComma = Split(Range(Cells(locStartRow, 1), Cells(locStartRow, 1)).Value2, " ")
Dim lCtr As Long
Dim arrSpace
Dim lookupState As String
For lCtr = LBound(arrComma) To UBound(arrComma)
arrSpace = Split(arrComma(lCtr), Space(1))
If Right(arrSpace(0), 1) = "," Then arrSpace(0) = Left(arrSpace(0), Len(arrSpace(0)) - 1)
Debug.Print "Looking for the word: " & arrSpace(0)
'If IsInArray(StrConv(CStr(arrSpace(0)), vbProperCase), stateArray) Then
For Each xstate In stateArray
If StrComp(CStr(xstate), arrSpace(0), vbTextCompare) = 0 Then
Debug.Print arrSpace(0) & " is found in the full State Name array"
lookupState = arrSpace(0)
Exit For
End If
Next xstate
' Since it didn't find any "Full Lenght" names, check the abbreviations
If lookupState = "" Then
Debug.Print arrSpace(0) & " was not found in full state name array, checking abbreviations..."
For Each xstate In stateAbbreviationArray
If StrComp(CStr(xstate), arrSpace(0), vbTextCompare) = 0 Then
Debug.Print arrSpace(0) & " is found in the Abbreviations array!"
lookupState = stateArray(Application.Match(arrSpace(0), stateAbbreviationArray, False) - 1)
Exit For
End If
Next xstate
If lookupState = "" Then Debug.Print arrSpace(0) & " was not found in abbreviations array either."
End If
If lookupState <> "" Then Exit For
Next lCtr
Debug.Print "The state in the Lookup Address is: " & lookupState
Спасибо! Я почти понял это. Быстрый вопрос - после того, как я вытащил каждое слово и получил его в 'arrSpace (0)', как проверить это значение и посмотреть, находится ли он в массиве? Я пытаюсь выполнить 'Compile Error: ByRef type type несоответствие' (сразу после' arrSpace = Split (arrComma ... '),' If IsInArray (arrSpace (0), stateArray) Тогда '.. Я предполагаю, что это потому, что' arrSpace (0) 'не является строкой, и мне нужна строка для сравнения? – BruceWayne
Замечание к предыдущему комментарию - я смог исправить это, преобразовывая' arrSpace (0) 'в строку:' CStr (arrSpace (0))). – BruceWayne
Хмм - Я иногда получаю ошибку при запуске. On В цикле 'For lCtr' у меня есть (сразу после строки' arrSpace = ')' Debug.print 'Looking for' & arrSpace (0) '. Я получаю сообщение об ошибке« Subscript out of Range ». Это потому, что он ищет ячейку, в которой есть ДВОЙНЫЕ пробелы (« это однократное расстояние, но у этого есть два фронта »). Как мне объяснить это ? – BruceWayne