この問題を解決する最善の方法を理解するのに何時間も費やしましたが、解決策はありません。私は、InStrを使ってループを試しましたが、ワイルドカード付きの条件付き書式設定を行っていますが、結果は決して欲しいものではありません。InStrを使用して2つの列を比較する
私は2つの値の列を持っています。私は検索したい値を持っていて、もう1つは長い値の文字列を持っていて、どこにでも置くことができるので、ワイルドカードが必要です。私がしたいのは、長い文字列の最初の行を取り出し、それを短い値の列のすべての値と比較することです。短い方の値のどれもが長い文字列で発見されていない場合は、長い文字列と行を削除し、次のいずれかに移動し...
私はこのような何かそれを設定する必要が思っている:
をFor i = 1 to lastrow,
If InStr(longvalue, shortvalue) Then
' Break loop to next i?
Else
If i = lastrow
longvalue.EntireRow.Delete
End If
End If
Next i
何か助けていただければ幸いです。この上に私の髪を引っ張ってきました。
もう1つ見てみると、私は2つのループが必要だと思います。最初のものは短い値をすべて循環させてから、それらをすべて循環させてから次の長い値に移動します。
EDIT:これで終了した:
i = 6
j = 2
Set sht = ThisWorkbook.Worksheets("SM Summaries")
lastrow = sht.Cells(sht.Rows.Count, "C").End(xlUp).Row
reallastrow = lastrow + 1
For i = 6 To reallastrow
For j = 2 To 82
If InStr(ActiveWorkbook.Sheets("SM Summaries").Range("C" & i).Value, ActiveWorkbook.Sheets("SM Reference Sheet").Range("H" & j).Value) Then
Exit For
Else
If j = 82 Then
ActiveWorkbook.Sheets("SM Summaries").Range("C" & i).EntireRow.ClearContents
End If
End If
Next j
Next i
おかげでマットを使用すると思います!私はちょうどそれを考え出した。あなたの最初のコードとほとんど同じ答えです。私は私のループを進んで、deleterowの代わりにclearcontentsを使用していました。なぜなら私のコードの終わりに、私はすべての空白と複製を削除してしまい、すべてが上に移動するからです。どんな作品でも! – dwirony
OK。良い。また、コードがより簡潔であるため、 'Find'を試してみてください。しかし、それを把握して、おめでとう。 –
'Find'は自動的にワイルドカードを利用するので、値が大きい文字列の部分文字列だったとしても、それは通るでしょうか? – dwirony