2017-01-27 13 views
1

誰かが助けてくれるのだろうか。2つのセル範囲の色を比較する[VBA]

私はCS教師であり、私の現在のY10スキームの一部として、イメージがどのようにバイナリで表現されているかを見ています。私は提供されたバイナリコードに基づいていくつかのピクセルアートを再現するようにユーザーを促すファイルを作成しました。

しかし、今ここで私は完全に固執しています。私は、ユーザーが最終的な結果と一致するかどうかを確認できるマクロを作成しようとしています。私は2つの色を比較する方法を理解していますが、私が持っている広い範囲で動作するようにすることは、それが落ちるところです。 私がこれまで持っているコードは次のとおりです。

Function Inc(ByRef i As Long) 
    i = i + 1 
End Function 


Sub CompareCellColors() 
    Dim Rng1 As Range 
    Set Rng1 = Range("C1:O19") 
    Dim Rng2 As Range 
    Set Rng2 = Range("AC1:AO19") 
    Dim x As Long 
    x = 0 

    For Each c1 In Rng1 
     For Each c2 In Rng2 
      If c1.Interior.ColorIndex = c2.Interior.ColorIndex Then 
       Inc x 
      End If 
     Next c2 
    Next c1 

    If x = 247 Then 
     Range("A3").Value = True 
    Else 
     Range("A3").Value = False 
    End If 
End Sub 

私はこの問題を回避する(それらが一致する場合は、変数をインクリメント)で私の試みを含めましたが、これはどちらか動作しません。

プログラムはコンパイルされて実行されますが、2つのセル範囲を正確に比較することはできません。 x増分の現在の結果は61009ですが、選択には247セルしかありません。

+0

2つのループのネストを解除し、行列インデックスを使用する必要があります。あなたのコードは現在、 'Rng1'のすべてのセルと' Rng2'のすべてのセルを比較します。 – Comintern

答えて

1

Rng1のすべてのピクセルと、Rng2のすべてのピクセルを比較するのは、ループがネストされているためです。あなたが望むのは、より1対1で比較することだと私は信じています。代わりにお試しください

For a = 1 to 19 'rows 
    for b = 3 to 13 'columns 
     If Cells(a, b).Interior.ColorIndex = Cells(a, b + 29).Interior.ColorIndex Then 
      Inc x 
     End If 
    Next b 
Next a 
+0

ありがとうございました。しかし、私が気付いたことのいくつか。 forループは、実際にはb = 13〜15であり、その後、行はCells(a、b + 26)です。そうでなければ、これは私が必要としていたものです。私のVBAの知識は非常に錆びているので、私は助けに感謝します。 – nyp

関連する問題