0

我正在寻找处理这个字符串的最佳方法:我们需要从我的 Excel 的发票行描述字段中提取一个状态。这是我需要从中提取状态的行类型的示例:

Managment Blvd.Philadelphia.PA.19103
Management EXECUTIVE CTJACKSONVILLE.FL.32216-4041

如您所见,州代码紧跟在右侧的邮政编码之后。这是我的想法:

IF(isnumeric(Right(mystring,5)) 

Then 
MyString = Right(mystring,8)
MyString =Left(mystring,2)

End If

那会给我国家的2个字符吗?还是有更好的方法来做到这一点?甚至可以通过添加州缩写表来比较字符以确保它们与州匹配,从而添加一些检查。

但是,目前,我不知道如何处理第二个示例中包含 +4 的邮政编码。任何帮助表示赞赏!

4

4 回答 4

1

假设状态总是倒数第二个

 Function getState(description As String) As String
     Dim s() As String
     s = Split(description, ".")
     getState = s(UBound(s) - 1)
 End Function

如果状态可以在字符串中的任何位置,但始终是 2 个字母并且更接近字符串的结尾,那么

 Function getState(description As String) As String
     Dim i As Long
     Dim s() As String
     s = Split(description, ".")
     For i = UBound(s) To LBound(s) Step -1
         If Len(s(i)) = 2 Then
             getState = s(i)
             Exit For
         End If
     Next
 End Function
于 2013-06-18T15:42:40.400 回答
0

您需要反转字符串并在状态和 zip 之间的时间段内执行 InStr。

下面是一个反转字符串的函数示例:

Option Explicit

Private Sub CommandButton1_Click()

'Define Variables

Dim Original_String As String
Dim Reversed_String As String
Dim Next_Char As String

Dim Length As Integer
Dim Pos As Integer

'Get the Original String

Original_String = InputBox("Pls enter the original string: ")

'Find the revised length of the string

Length = Len(Original_String)

'Set up the reversed string
Reversed_String = ""

'Progress through the string on a character by character basis
'Starting at the last character and going towards the first character

For Pos = Length To 1 Step -1

    Next_Char = Mid(Original_String, Pos, 1)
    Reversed_String = Reversed_String & Next_Char
Next Pos

MsgBox "The reversed string is " & Reversed_String

End Sub

一旦你有反转的字符串,做这样的事情:

LPosition = InStr(Reversed_String, ".")

这将找到期间。然后使用字符串的长度在原始字符串中找到那个句点:

L2Position = len(mystring) - (len(mystring)-LPosition)

然后使用您的 Mid 函数查找您的州缩写。

于 2013-06-18T15:35:02.470 回答
0

根据您的示例数据,您可以使用 split

Dim vData
vData = Split(myString, ".")
myString = vData(ubound(vdata) - 1)
于 2013-06-18T15:35:03.153 回答
0

找到句点(“。”)(并存储找到的最后 2 个句点的位置),直到没有更多句点时循环 Instr。

现在状态代码在找到的最后两个之间,所以应用:mid(mystring,period1+1, period2-period1-1)

于 2013-06-18T15:35:35.560 回答