2017-08-07 28 views
0

ワークシート内の特定の値を見つけようとしています。ただし、その値が複数回発生することがあります。そのような場合は、見つかった値と同じ行にある別の値のセットを合計します。以下のコードは、値の特定のインスタンスを特定して情報を取得する(「do stuff」部分です)がうまく機能しますが、値のインスタンスをすべてプルしてアドレスを一時的に保存するにはどうすればよいでしょうか?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/en-us/article/SUMIFS-function-c9e748f5-7ea7-455d-9406-611cebce642b –

答えて

0

また、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 

に達したときに、あなたのfindNext-方法は、すべての上に起動does notのを確認するために1つのより多くのVARを持っている必要があります。しかし、電車に乗っている間に私の携帯電話から書いているので、構文エラーがあるかもしれません。

私はそれが役に立てば幸い:)

編集:ちょうどあなたが範囲を持っている場合は、すでに、あなたはできるコード

の詳細クリアな視界のためにここに私のコメントを投稿したかったですループして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'が複数回出現するかどうかを確認することができます。そうでなければ、それに 'してください。 givenRange の各tempCellについては 点心tempCellとして、範囲は 薄暗い出現としてのInt tempCell.Value == SearchISIN場合、 出現=オカレンス+ 1 エンド 次tempCell 場合、オカレンス== 1 は、[検索した場合私はあなたがが何をしたいの100%わからないんだけど 場合、セルとそれにものを行うには、エンド 。次回のデータ構造を投稿してみてください。人々が手助けするのがより簡単になります:) –

+0

私の答えの編集をご覧ください。 :) –

関連する問題