2015-01-04 56 views
0

我有一個城市列表作爲搜索條件,我正在尋找拉取相應城市的郵政編碼。找到匹配項後選擇下一個條件

A列包含所有城市,B列爲郵編列表,D列爲用戶輸入要搜索的城市名稱的標準列。搜索後,相應的郵政編碼將列E列出。我有以下VBA中只抓取從D1的搜索條件,但我想知道是否有一種方法來搜索D2的標準後,初步搜索,並下降逐列,直到有上的空欄列D

Sub Test2() 
    Dim Find As String 
    Dim finalrow As Integer 
    Dim i As Integer 

    Find = Sheets("Test").Range("D1").Value 
    finalrow = Sheets("Test").Range("A10000").End(xlUp).Row 

    For i = 2 To finalrow 
     If Cells(i, 1) = Find Then 
      Range(Cells(i, 2), Cells(i, 3)).Copy 
      Range("E10000").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats 
     End If 
    Next i 
End Sub 
+0

要再次運行此子,但使用'D2'爲您的標準(依此類推,直到有在D中沒有值使用)? – NickSlash

+0

嗨,尼克,這是正確的。如何在列D中再次運行子行,直到列中有空單元格? – Sally

回答

0

試試這個:

Dim wsh as Worksheet 
Dim i As Integer 

Set wsh = ThisWorkbook.Worksheets("Sheet1") 
i = 0 
Do While wsh.Range("D1").Offset(ColumnOffset:=i)<>"" 
    'your code 
    i=i+1 
Loop 

始終上下文中使用的代碼。爲什麼?簡單範圍(「A1」)是指ActiveSheet。選中此項:

Sub CodeContext 
    Sheets(1).Activate 
    Range("A1") = 1 
    Sheets(2).Activate 
    Range("A1") = 2 
End Sub 
0

嘗試以下。您可以使用IsEmpty來確定列表的末尾,假設最後一個列表項目之後的單元格實際上是空的,並且列A中沒有列表中間爲空的空單元格。

Sub Test2() 

Dim rRngFind As Range 
Dim rRngCity As Range 
Dim rRngResult As Range 
Dim i As Integer 

'Set Input cell for Find, I chose D2 
Set rRngFind = Sheets("Test").Range("D2") 

'Set first city search row, presumably not the top row since you will have headings and such 
Set rRngCity = Sheets("Test").Range("A2") 

'Set Cell for first result, I chose E2 
Set rTngResult = Sheets("Test").Range("E2") 


Do Until IsEmpty(rRngCity) 

    If rRngFind.Value = rRngCity.Value Then 
     rTngResult.Value = Sheets("Test").Range("B" & rRngCity.Row).Value 
     i = rTngResult.Row + 1 
     Set rTngResult = Sheets("Test").Range("E" & i) 
    End If 
    'increment the row 
    i = rRngCity.Row + 1 
    Set rRngCity = Sheets("Test").Range("A" & i) 

Loop 

End Sub 
1

我知道您正在尋求一種基於VBA的解決方案,但標準公式可以完成同樣的事情。

Index First Second Third

在E2的標準公式,

=IFERROR(INDEX(B$2:B$999, SMALL(INDEX(ROW($1:$998)+(A$2:A$999<>D$2)*1E+99, ,), ROW(1:1))), "")

向下填充足夠數目的行,以捕獲所有可能的匹配。在D2中鍵入城市將立即返回全套匹配的拉鍊。當它用完匹配時,它將簡單地返回一個空字符串(因此需要填充足夠的行以容納最大的一組匹配)。我已經看到COUNTA用於比較列A中的匹配數量與列E中的匹配數量,並且如果公式未被充分填充以捕捉所有可能,則顯示紅色。

FWIW,如果我打算基於VBA的解決方案,我會用WorksheetFunction.Match,而不是通過每行循環,

+0

不錯 - 很高興有你在這裏! – brettdj

相關問題