2017-12-10 22 views
0

VBAの新機能です。私は、赤で同じ文字列を含むシートセルの2つの列のセルをハイライト表示するコードを作成しようとしています。そして、2つの赤いセルを持つ行を含むすべての行を削除します。2つのセルの色を比較して行を削除するVBA

私はこれについて非常に新しく、これは私がこれまでに思いついたことです。最初のステージはうまく動作しますが、その後、セルの色を比較しようとしましたが、動作しませんでした。

Option Explicit 

Sub Macro1() 

Dim WhatFor As String 

WhatFor = InputBox("Enter your search word to highlight", "Search Criteria") 
If WhatFor = Empty Then Exit Sub 


    Range("A1").Select 
    Selection.CurrentRegion.Select 
    Selection.FormatConditions.Add Type:=xlTextString, String:=WhatFor, _ 
     TextOperator:=xlContains 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    With Selection.FormatConditions(1).Font 
     .Color = -16383844 
     .TintAndShade = 0 
    End With 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .Color = 13551615 
     .TintAndShade = 0 
    End With 
    Selection.FormatConditions(1).StopIfTrue = False 

End Sub 


Sub Macro2() 


Dim i As Integer 
Dim cell As Range 

cell = ActiveWorkbook.ActiveSheet.Range 

i = 1 

Do While Cells("A, i").Value <> "" 

If cell("A, i").Interior And cell("F, i").Interior = 13551615 Then: 

Rows(i).EntireRow.Delete 

End If 


i = i + 1 
Loop 

End Sub 

example of my sheet

+3

は、それが細胞を着色する全く意味がありませんか?ちょうど行を削除してください – jsotola

+0

あなたはおそらく正しいですが、文字列の2つの部分を比較することは私のために複雑です。 **実際には** Equal **ではありませんが、ほとんどの場合、値は「類似」です。 – yaeer

+0

削除行は、指定された文字列が複数回、同じセル内で、同じ行内で、その文字列が大文字と小文字を区別しない場合に検出されましたか?別の文字列として存在し、長い文字列内の部分文字列ではありませんか?文字列はセル内の唯一の項目ですか? – QHarr

答えて

0

はあなたのコードのエラーがあなたのIF文の条件である:

If (Cells(i, "A").Interior.Color = 13551615) And (Cells(i, "F").Interior.Color = 13551615) Then 

は次のようになります。

If (cell("A, i").Interior = 13551615) And (cell("F, i").Interior = 13551615) Then: 

残念ながら、条件付き書式は影響しません。 .InteriorColor。それは細胞の色を変えますが、この方法では確認できません。

実際に表示されている色を確認することは現在できません。

セルのすべての条件付き形式で条件をエミュレートする関数を作成することは可能ですが、Microsoftが条件付き形式の別の種類の条件を追加するたびにその関数を更新する必要があります。それが行うことができるかの非常に良い例を見つけることができます:here:(この機能はむしろ色よりもcolorindezを返すことに注意してください)


もう一つの論理的な問題は、あなたが行を削除する方法である:

'This method does not check each row! 
i = 1 
Do While Cells(i, "A").Value <> "" 
    If '<your condition> 
     Rows(i).EntireRow.Delete 
    End If 
i = i + 1 
Loop 

i = 5とし、その行を削除したいとします。そしてiは6になる 元の行5が削除された行6列5なり、行7等

、行6なり、あなたがその行チェック(元々行7であった...)

そうすれば、元の行6は決してチェックされません。

このような場合は、一般的に最後の行から開始し、上向きに作業することをお勧めします。それとも、.rowsプロパティを使用することができますし、FOR EACH建設:

Dim row As Range 

For Each row In [A1].CurrentRegion.Rows 
    If Intersect(row, [B:B]).Value Like "*" & WhatFor & "*" Then 
    row.Delete 
    End If 
Next row 

(例として、列Bを使用して、このバージョンチェックのみ1列には、)


しかし、あなたの問題への答えは何ですかjsotolaは言った: は、「それは、細胞を着色する全く意味がないだけの行を削除しますか?」 - 17分前jsotola


セルを着色せずに行を削除したい場合 - 基本コードはどうすればよいですか?私は "検索"のような細胞を "同等"のように比較する必要があります。各セルの文字列の一部のみを比較します。

は:-)ありがとうございました - 1分前yaeer、

+1

'cell(" A、i ")' ???あなたは 'セル(" A "、私)'を意味しないのですか? – YowE3K

+0

私にチェックをさせてください... –

+0

OPのコードには他の問題があります - '' A、i "'の使用はそれらの1つだけです。 (それはあなたの答えに複製されたものなので、答えが解決策の一部になるように修正する必要があります。)私が気づいた別の問題は 'Dim cell As Range'' cell = ActiveWorkbook.ActiveSheet.Range'でした。それは私が諦めたときです。 – YowE3K

関連する問題