Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:如何从地址中提取中间字符串2个字符的状态?_Excel_Vba_Ms Access - Fatal编程技术网

Excel VBA:如何从地址中提取中间字符串2个字符的状态?

Excel VBA:如何从地址中提取中间字符串2个字符的状态?,excel,vba,ms-access,Excel,Vba,Ms Access,我正在寻找处理这个字符串的最佳方法:我们需要从我的Excel的invoice line description字段中提取一个状态。下面是我需要从中提取状态的行类型的示例: Managment Blvd.Philadelphia.PA.19103 Management EXECUTIVE CTJACKSONVILLE.FL.32216-4041 如您所见,州代码紧跟在右侧的邮政编码之后。以下是我的想法: IF(isnumeric(Right(mystring,5)) Then MyStri

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

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的邮政编码。感谢您的帮助

您需要反转字符串,并在state和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(反向字符串“.”)

这将找到周期。然后使用字符串的长度在原始字符串中查找该句点:

L2Position=len(mystring)-(len(mystring)-lpposition)


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

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

Dim vData
vData = Split(myString, ".")
myString = vData(ubound(vdata) - 1)
查找句点(“.”)(并存储最后找到的2个句点的位置),直到不再有while循环Instr


现在,状态代码位于找到的最后两个之间,因此应用:
mid(mystring,period1+1,period2-period1-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

除了邮政编码,字符串中还有其他数字吗?是的,有可能。由于这是一个广泛的地址数据库的编程,许多人会有其他的房子、套房等号码。我喜欢你的第一个建议,如果这样做有效的话-时段是一个很好的抓取它的地方,因为无论它是一个5位或9位的邮政编码,它总是在时段之后。我现在唯一关心的是实际上没有状态的字符串。在这之后,最好的选择是将两位数的州字符串与实际的州列表进行比较,以确保这两个字符与一个州匹配吗?检查的数量实际上取决于您需要州的数量以及字符串中的变化量,例如,如果有人在佛罗里达州而不是佛罗里达州键入,那么会发生什么情况,但如果总是如此呢一个两个字母的代码然后对照一个列表进行检查是可靠的。好的-所以我尝试将它实现到我的数据库中,直到导入到我的Access表中。如何将其放入表中,以便在select语句中为每个描述计算该值?表中是否已存在描述字符串?如果是,您可以使用上述函数执行更新查询(如果您想将其放入一个新表中,也可以使用Append)。需要更多细节才能提供帮助。表中已包含描述字符串。很抱歉,在SQL查询中间调用VBA函数时,我有点新手。在执行SQL查询以读取访问表时,如何调用该函数?类似的东西?更新描述集description=getState(table.description)?有一个InStrRev函数,不需要先反转字符串。