長時間搜索器,第一次提問者..VBA使用一個字符串數組作爲SUBSTRING參數InStr函數(Excel)中
目標: - 分配一個值(城市名)到細胞 - 通過含有地址 列環在此基礎上偏移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個字符串數組,每個都包含多個郵政編碼相對到其地區。我試過將數組聲明爲Variant並使用Split來無濟於事。上面的代碼給了我一個類型不匹配的錯誤,我試過的其他方法要麼產生相同的或「下標超出範圍」
我非常反對定義每個數組的長度和手動分配各個位置作爲總數超過400個郵政編碼 - 更重要的是,代碼看起來很可怕。
TLDR:是否有可能實現標題的建議?
謝謝
簡單地用'IsNumeric(Application.Match(cel.Value,ZipA(),0))'代替'InStr(1,cel.Value,ZipA())'',它會起作用(其他城市也一樣)。但是,如果所有的郵政編碼都在各自城市的二維表中,那麼速度會更快,這樣您可以像使用公式一樣來完成:'cel.Offset(0,6).Value = Sheets(「MyZips」)。單元格(Application.Match(cel.Value,Sheets(「MyZips」).Columns(1),0),2)';) –