2017-09-23 7 views
1

Excelで小さなVBAプロジェクトを完成しようとしていますが、フィルタ/検索オプションを組み込むよりも簡単にデータをフィルタリングできます。基本的には、データヘッダーに関連したユーザー入力を持つフォームがあります。私は、検索される値に許容範囲の入力を持っています。例えば、入力は次のようになります。名目上の検索値。耐性。その後、その許容範囲内のデータのすべての行が検索されます。VBA他の2つの間で値を見つける

各行を実行して新しいシートにコピーするためにループしたいコードは次のとおりです。範囲 "fc"を、ssMinとssMaxの間にある最初に見つかったセルと等しくなるように設定したいとします。 Ifブロックを使用する方が良いですか?

Private Function searchCells(ifc) 
    Dim ss As Integer 
    Dim fc As Range 
    Dim ssMax As Integer 
    Dim ssMin As Integer 

    ss = lstboxChannelList.List(ifc, 1) 
    ssMax = ss + lstboxChannelList.List(ifc, 2) 
    ssMin = ss - lstboxChannelList.List(ifc, 2) 

    Set fc = Cells.Find(What:=(ssMin <= ssMax), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 
    fc.Select 

    End Function 
+0

あなた '何:そのアプローチが勝ったので= true'を、(' ssMin'がより小さいか 'ssMax'に等しいと仮定):=(ssMin <= ssMax)は'ほぼ確実に何を 'と同等です仕事はありません。はい、ループを使用してデータをループし、個々のセルをテストして条件を満たすかどうかを確認する方がよいでしょう。 (もしあなたが検索していたカラムが1つだけだったら**インデックスと 'Match'演算を使って**可能かもしれませんが、あなたのデータはワークシート全体のどこかにあるので、私は考えませんあなたのために可能になります。) – YowE3K

+0

ユーザーフォームからの入力を受け取り、それをExcelのシンプルまたはアドバンストフィルタの基準として使用することも考えられます。すべてのセルをループするよりも速くて、VBAを使用して条件を簡単に設定することができます。 Advanced Filterでは、 'CopyTo'パラメータを使うことができます。シンプルフィルタを使用すると、フィルタリング後に表示されているセルをコピーします。 –

+0

両方のおかげで、今日私はどのように私はそれを解決した上で取得し、うまくいけば投稿を参照してくださいこれらのアプローチを試してみます。 –

答えて

0

おかげで再びコメントを、私は今日の周りにプレイしていたが、私は欠けていたもの行うための高度なフィルタを得ることができませんでした。この小さなif文で解決したので、最初は.findで悩んでいた理由がわかりました。 "fr"は通過した前の関数で選択された範囲ですが、選択した場所の範囲としてこれを割り当てるのが賢明かどうかはわかりませんでしたが、どうやってそれを渡すのかちょっと混乱します関数からサブ関数に戻り、別の関数に戻りますが、このメソッドは機能しているようです。コメントした人にもう一度感謝します!

Private Function searchCells(ifc) 
Dim ss As Integer 
Dim fc As Range 
Dim ssMax As Integer 
Dim ssMin As Integer 
Dim cell As Range 
Dim fr As Range 

ss = lstboxChannelList.List(ifc, 1) 
ssMax = ss + lstboxChannelList.List(ifc, 2) 
ssMin = ss - lstboxChannelList.List(ifc, 2) 


Set fr = Selection 
For Each cell In fr 

    If cell.Value < ssMax And cell.Value > ssMin Then 
     cell.Select 
     'More code to come here 
     'MsgBox ("found one!") 

    End If 

Next cell 

End Function 
関連する問題