【发布时间】:2016-09-11 02:12:25
【问题描述】:
长期搜索,第一次提问..
目标: - 遍历包含地址的列 - 根据单元格包含的邮政编码为单元格偏移量 0,6 分配一个值(城市名称)
这是我目前得到的(缩短的数组长度):
Sub LabelCell()
Dim SrchRng As Range, cel As Range
Dim ZipA() As String
Dim ZipB() As String
Dim ZipC() As String
Dim ZipD() As String
ZipA = Array("12345", "12346", "12347", "12348", "12349")
ZipB = Array("22345", "22346", "22347", "22348", "22349")
ZipC = Array("32345", "32346", "32347", "32348", "32349")
ZipD = Array("42345", "42346", "42347", "42348", "42349")
Set SrchRng = Range("D6:D350")
For Each cel In SrchRng
If InStr(1, cel.Value, ZipA()) Then
cel.Offset(0, 6).Value = "City 1"
ElseIf InStr(1, cel.Value, ZipB()) Then
cel.Offset(0, 6).Value = "City 2"
ElseIf InStr(1, cel.Value, ZipC()) Then
cel.Offset(0, 6).Value = "City 3"
ElseIf InStr(1, cel.Value, ZipD()) Then
cel.Offset(0, 6).Value = "City 4"
End If
Next cel
End Sub
如您所见,有 4 个字符串数组,每个数组都包含与其所在地区相关的多个邮政编码。我尝试将数组声明为变体并使用拆分无济于事。上面的代码给了我一个类型不匹配的错误,而我尝试过的其他方法要么产生了相同的结果,要么产生了“下标超出范围”
我非常反对定义每个数组的长度并手动分配各个位置,因为总数超过 400 个邮政编码 - 更重要的是,这些代码看起来很可怕。
TLDR:是否有可能实现标题所暗示的内容?
谢谢
【问题讨论】:
-
只需将
InStr(1, cel.Value, ZipA())替换为IsNumeric(Application.Match(cel.Value, ZipA(),0))即可使用(其他城市也一样)。但是,如果所有邮政编码都在一个包含各个城市的二维表中会更快,这样你就可以像使用公式一样做到这一点:cel.Offset(0, 6).Value = Sheets("MyZips").Cells(Application.Match(cel.Value,Sheets("MyZips").Columns(1), 0), 2);)
标签: arrays excel vba parameters substring