2016-11-04 9 views
0

30,000を超えるエントリを持つテーブルがあります。 「 置き換える:私は、彼らが3行Dに基づく値の組み合わせと行F2行の条件に基づいて値を置き換えます。VBA

A   B  C   D   E  F 
10/11/2016 501 General  2   1  1795 to 2395 
10/11/2016 502 Public 1 to 2  1  675 to 750 
10/11/2016 503 Public 1 to 3  1  1450 

期待される結果、私が達成しようとしています何

A    B  C   D   E  F 
10/11/2016 501 General  2   1  1795 to 2395 
10/11/2016 502 Public 1 to 2  1  675 to 750 
10/11/2016 503 Public  1   1  1450 

が持っている行Dに興味とF.を行何の後に」[列D]何が存在しない場合に 『へ』(範囲)[列F]

私が試してみましたが、所望の結果取得していないコード:

Sub RemoveAfterTo() 


    Last = Cells(Rows.Count, "D").End(xlUp).Row 

For i = Last To 1 Step -1 
    If (Cells(i, "D").Value) Like "*to*" And (Cells(i, "F").Value) <> "*to*" 
    Then 

     Cells(i, "D").Replace What:="to*", Replacement:="", LookAt:=xlPart 

    End If 

    Next i 

End Sub 

ご協力いただければ幸いです。 ありがとうございます。

答えて

1

<>は、ワイルドカードでは使用できません。条件Not (Cells(i, "F").Value Like "*to*")

によって条件(Cells(i, "F").Value) <> "*to*"

を交換してください(グッド・プラクティスに従って変数を見当違いThenを固定し、宣言後に)この利回り:

あなたのサンプルデータに意図したとおりに動作します
Sub RemoveAfterTo() 
    Dim Last As Long, i As Long 

    Last = Cells(Rows.Count, "D").End(xlUp).Row 

    For i = Last To 1 Step -1 
     If (Cells(i, "D").Value) Like "*to*" And Not (Cells(i, "F").Value Like "*to*") Then 
      Cells(i, "D").Replace What:="to*", Replacement:="", LookAt:=xlPart 
     End If 
    Next i 
End Sub 

+0

It Works! <>がワイルドカードでどのように動作するかを修正し、明記してくれてありがとう。 :) – Chid

関連する問題