2015-08-21 3 views
1

У меня есть столбец адресов и строки при том что возможны матчи:Extract каждого слова в ячейке

enter image description here

Я хотел бы быть в состоянии выделить (в зеленом цвете, говорит) строка что я думаю, что лучше всего соответствует «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 

ответ

3

Как об использовании split функции. Сначала разделите адрес на разделителе «,».

Dim arrComma 

arrComma=Split(range("A2").value2,",") 'Your cell address here 

Затем проведите все элементы массива и разделите каждый массив на пробел.

Dim lCtr as Long 
    Dim arrSpace 
    For lCtr= lbound(arrComma) to ubound(arrComma) 
     arrSpace=Split(arrComma(lctr),space(1)) 
    Next 

Тогда в результате массив arrSpace через петлю каждого слова.

+0

Спасибо! Я почти понял это. Быстрый вопрос - после того, как я вытащил каждое слово и получил его в 'arrSpace (0)', как проверить это значение и посмотреть, находится ли он в массиве? Я пытаюсь выполнить 'Compile Error: ByRef type type несоответствие' (сразу после' arrSpace = Split (arrComma ... '),' If IsInArray (arrSpace (0), stateArray) Тогда '.. Я предполагаю, что это потому, что' arrSpace (0) 'не является строкой, и мне нужна строка для сравнения? – BruceWayne

+1

Замечание к предыдущему комментарию - я смог исправить это, преобразовывая' arrSpace (0) 'в строку:' CStr (arrSpace (0))). – BruceWayne

+0

Хмм - Я иногда получаю ошибку при запуске. On В цикле 'For lCtr' у меня есть (сразу после строки' arrSpace = ')' Debug.print 'Looking for' & arrSpace (0) '. Я получаю сообщение об ошибке« Subscript out of Range ». Это потому, что он ищет ячейку, в которой есть ДВОЙНЫЕ пробелы (« это однократное расстояние, но у этого есть два фронта »). Как мне объяснить это ? – BruceWayne

Смежные вопросы