State Converter - Превращение Висконсина в WI и Wi в WI - PullRequest
1 голос
/ 11 марта 2020

В настоящее время возникает проблема, при которой, если я добавляю аббревиатуры состояний в свой код, он выдает N / A, если аббревиатура уже есть, но в нижнем регистре IE wi вместо WI.

Есть ли способ обратная проверка, основанная на приведенном ниже коде?

Sub Convert_States()
Dim Ws As Worksheet
Const StateNames As String = _
    "Alabama,Alaska,Alberta,Arizona,Arkansas,British Columbia,California,Colorado,Connecticut,Delaware,District of Columbia,Florida,Georgia,Hawaii,Idaho,Illinois,Indiana,Iowa,Kansas,Kentucky,Louisiana,Maine,Manitoba,Maryland,Massachusetts,Michigan,Minnesota,Mississippi,Missouri,Montana,Nebraska,Nevada,New Brunswick,New Hampshire,New Jersey,New Mexico,New York,Newfoundland,North Carolina,North Dakota,Nova Scotia,Ohio,Oklahoma,Ontario,Oregon,Pennsylvania,Prince Edward Island,Quebec,Rhode Island,saskatchewan,South Carolina,South Dakota,Tennessee,Texas,Utah,Vermont,Virginia,Washington,West Virginia,Wisconsin,Wyoming"
Const StateIds As String = _
    "AL,AK,AB,AZ,AR,BC,CA,CO,CT,DE,DC,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MB,MD,MA,MI,MN,MS,MO,MT,NE,NV,NB,NH,NJ,NM,NY,NF,NC,ND,NS,OH,OK,ON,OR,PA,PE,PQ,RI,SK,SC,SD,TN,TX,UT,VT,VA,WA,WV,WI,WY"
Dim StNames As Variant
Dim StIds As Variant
Dim c As Range

''''''LR Code is extraneous - Disabled for time being.
'Dim LR As Long
'LR = ActiveSheet.UsedRange.Find("*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
''''''

'dialogue box
    Dim rng As Range
    Set rng = Application.InputBox("Select State column", "Obtain Range Object", Type:=8)
'insert column to right
Columns(rng.Address).Offset(0, 1).Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

Application.ScreenUpdating = False
StIds = Split(StateIds, ",")
StNames = Split(StateNames, ",")

For Each c In Range(rng.Address)
    If c.Value <> "" Then
        c.Offset(0, 1).Value = Application.Index(StIds, Application.Match(c.Value, StNames, 0))
    End If
Next c

Columns.AutoFit
Range("B1").Select
Application.ScreenUpdating = True
End Sub


Правка - Уточнение

Мои извинения печатали это в течение последних 30 секунд, прежде чем я ушел на день. Итак, код уже выполняет поиск в строке полного имени штата Колорадо и выплевывает CO в ячейку на одну строку выше. Однако некоторые из полученных данных различаются и в одной ячейке будет находиться Колорадо, а в нескольких ячейках ниже будет CO, а CO будет выводиться как N / A, поскольку CO не совпадает с тем, что ищется. Ниже приведено представление о том, как выглядят входящие данные.

Входные коды Выходы
WI N / A
Висконсин WI
CA N / A
California CA
Айова ИА
МН N / A

1 Ответ

1 голос
/ 11 марта 2020

Надеюсь, я понял это лучше после вашего последнего редактирования, давайте попробуем это:

For Each c In Range(Rng.Address)
    If c.Value <> "" And Len(Trim(c.Value)) = 2 Then
        c.Offset(0, 1).Value = Application.Index(StIds, Application.Match(UCase(c.Value), StIds, 0))
    ElseIf c.Value <> "" And Len(Trim(c.Value)) <> 2 Then
          c.Offset(0, 1).Value = Application.Index(StIds, Application.Match(Trim(StrConv(c.Value, vbProperCase)), StNames, 0))
    End If
Next c

Дайте мне знать, если я на правильном пути.

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