この問題を解決する方法を概念化するのに問題があります。シート1の有効な値の相互参照に基づいて、シート1、列Fの無効な値を除外します。シート1の値をフィルタリングするためのクロスリファレンスとして別のワークシートを使用
Excelでフィルタを使用した経験はありませんが、これは良い機会です。
シート1には複数の試行(列c)があり、各試行にはこれらのスクリーンショットに示すように複数の有効な値があります。
シート以外に、私は、私は辞書オブジェクトを作成し、シート1の列Cを使用して考えていたと不慣れいフィルタリング機能を使用してから2
、またはシート2の列Aをキーとして使用していますが、シート2のすべてのセルとシート1の列Fを繰り返す大きな長いネストループを使用せずに、プログラムが複数の値をチェックする方法がわかりません。
基本的なタス私が達成したいkのことである: For trial #, sheet 1, if column F =/= (a value in row #, sheet 2), then delete row.
更新:
Sub RemoveNonMatch()
Dim rngDel As Range, rw As Range
For Each rw In ThisWorkbook.Sheets("full test").Range("B7:Q" & lastrow).Rows
If Not IsMatch(rw.Cells(3).Value, rw.Cells(6).Value) Then
If Not rngDel Is Nothing Then
Set rngDel = Application.Union(rngDel, rw)
Else
Set rngDel = rw
End If
End If
Next rw
'remove any non-matches
If Not rngDel Is Nothing Then rngDel.Delete
End Sub
Function IsMatch(TrialNum, AreaNum) As Boolean
Dim t, a, rv
rv = False
With ThisWorkbook.Sheets("AOI crossref")
'try to find TrialNum in the first column
t = Application.Match(TrialNum, .Columns(1), 0)
If Not IsError(t) Then
'try to find AreaNum in the m'th row
a = Application.Match(AreaNum, .Rows(t), 0)
If Not IsError(a) Then rv = True 'match!
End If
End With
IsMatch = rv
End Function
Here is a sample of the data I am using.: 私はライン「それぞれの」にランタイム1004 appicationまたはオブジェクト定義のエラーを返します。このコードは、試してみました
(1)あなたが定義されていない 'ラそれを値する。 (2)ColBからColQまでの範囲を定義しているので、 'rw.Cells(3)'は「試行名」(ColC)ではなく「イベント名」(colD)です。エリア –
ファイルの「固定」バージョンについても同じ問題があります。https://dl.dropboxusercontent.com/u/15526711/full%20test%20TW.xlsm BTWファイルを共有して特定の質問 - この方法では、ファイルにマクロを有効にすることを決定する前に、複数のモジュールを確認する必要はありません。多くの人がコードを持つファイルをダウンロードすることさえありません。 –
@TimWilliamsは、あなたが提案した内容を修正して実行していたので、修正を投稿してうれしく思いましたが、列BをDから削除していました。コードを見ると、範囲やラストローをどう定義したのでしょうか。とにかく、マクロファイルについてのヘッドアップに感謝します。私はAOI crossrefシートにいくつかのコンテンツを追加しましたが、これは良いようです。ありがとうございました。 – shecodes