2017-08-07 40 views
0

我正試圖在工作表中查找特定值並從那裏獲取其他信息。但是,有時該值會多次出現。在這些情況下,我想總結另一組將在與找到的值相同的行中找到的值。下面的代碼很好地識別一個值的特定實例,然後提取信息(這就是「做東西」部分),但是我將如何去循環它來拉取值的所有實例並臨時存儲它們的地址?使用VBA查找多個值的實例

謝謝!

Dim AccountsListLength As Integer 
Dim AccountsLength As Integer 
Dim CurrentAccount As String 
Dim SearchISIN As String 
Dim CurrentAccountPage As Range 
Dim FoundISIN As Range 
Dim i As Integer 

SearchISIN = Worksheets("Search").Range("SearchISIN").Value 
AccountsListLength = (Worksheets("DataSheet").Range("AccountList").Count) 
AccountsLength = AccountsListLength - 1 
For i = 0 To AccountsLength - 1 

    CurrentAccount = Worksheets("DataSheet").Range("AccountList")(i + 2) 
    Set CurrentAccountPage = Worksheets(CurrentAccount).UsedRange 
    Set FoundISIN = CurrentAccountPage.Find(what:=SearchISIN, LookIn:=xlValues, _     
     LookAt:=xlPart, MatchCase:=False) 


    If Not FoundISIN Is Nothing Then 

     'Do stuff 

    End If 
+3

SUMIFS()將不起作用? –

+0

如何?我對VBA很新,所以請原諒我的無知。 – user8406272

+1

https://support.office.com/zh-cn/article/SUMIFS-function-c9e748f5-7ea7-455d-9406-611cebce642b –

回答

0

您也可以使用FindNext。

你需要有一個更多的變種,以確保您FindNext中,法犯規開始,當它到達最後一次出現

Dim nextISIN As Range 


For i = 0 To AccountsLength - 1 

CurrentAccount = Worksheets("DataSheet").Range("AccountList")(i + 2) 
Set CurrentAccountPage = Worksheets(CurrentAccount).UsedRange 
Set FoundISIN = CurrentAccountPage.Find(what:=SearchISIN, LookIn:=xlValues, _     
    LookAt:=xlPart, MatchCase:=False) 

Set nextISIN = CurrentAccountPage.FindNext(FoundISIN) 

If Not FoundISIN Is Nothing Then 

    Do Until FoundISIN == nextISIN 

     'Do stuff 

     Set nextISIN = CurrentAccountPage.FindNext(nextISIN) 

    Loop 

End If 

這應該工作全部結束。然而,我在乘坐火車時從我的手機寫信,所以可能會出現一些語法錯誤。

我希望它能幫助:)

編輯:只是想在這裏發表我的意見,對代碼

一個更明確的說法如果你有一個範圍已經那麼你可以循環瀏覽它,看看您的SearchISIN是否出現多次。如果不是,那麼do stuff就可以了。

Dim tempCell As Range 
Dim Occurrences As Int 

For Each tempCell In givenRange 
    If tempCell.Value == SearchISIN Then 
     Occurrences = Occurrences + 1 
    End If 
Next tempCell 

If Occurrences == 1 Then 
    'Find the cell and do stuff to it 
End If 

我不是100%確定你想做什麼。嘗試下次張貼一些數據結構,這將會更容易讓人們幫助:)

+0

謝謝,確實有幫助!我如何修改這個以遍歷給定範圍內的所有唯一值,而不是指定的值(即,對於範圍中的每個唯一的SearchISIN)? – user8406272

+0

如果你已經有一個範圍,那麼你可以遍歷它,看看你的'SearchISIN'是否出現多次。如果不是這樣,那就對它做「事情」。 昏暗tempCell作爲範圍 昏暗出現次數爲INT 對於每個tempCell在givenRange 如果tempCell.Value == SearchISIN然後 出現次數=出現次數+ 1 結束如果 接着tempCell 如果出現次數== 1然後 「查找細胞,並做它的東西 結束如果 我不是100%確定你想要做什麼。下次嘗試發佈一些數據結構,人們可以更容易地幫助:) –

+0

請參閱我的答案中的編輯。 :) –