2017-05-26 17 views
0

この問題を解決する最善の方法を理解するのに何時間も費やしましたが、解決策はありません。私は、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 

答えて

0

ループ内の行を削除する場合、ループが正しい行を追跡することができますので、あなたが後方ループする必要があります。だから、

For i=lastrow to 1 step -1 
    If InStr(longvalue, shortvalue) Then 
     GoTo Nexti 
    end if 
    if i=1 then 
     longvalue.entirerow.delete 'this assumes longvalue is a cell reference 
    end if 
Nexti: 
Next i 

しかし、私は私がFind

With Worksheets(1).Range("b1:b500") 
for i=lastrow to 1 step -1 
    Set c = .Find(cells(i,1), lookin:=xlValues, lookat:=xlPart) 'xlPart returns true if just part of the string matches 
    If c Is Nothing Then 'didn't find your string 
     cells(i,2).entirerow.delete 
    end if 
next i 
End With 
+0

おかげでマットを使用すると思います!私はちょうどそれを考え出した。あなたの最初のコードとほとんど同じ答えです。私は私のループを進んで、deleterowの代わりにclearcontentsを使用していました。なぜなら私のコードの終わりに、私はすべての空白と複製を削除してしまい、すべてが上に移動するからです。どんな作品でも! – dwirony

+0

OK。良い。また、コードがより簡潔であるため、 'Find'を試してみてください。しかし、それを把握して、おめでとう。 –

+0

'Find'は自動的にワイルドカードを利用するので、値が大きい文字列の部分文字列だったとしても、それは通るでしょうか? – dwirony

関連する問題