1

列 A と列 B の 2 つの列で動作する VBA コードがあります。基本的には、列 B をループし、列 A の各列 B の値を見つけようとします。さらに、列 A の一部の値にはセル (内部) があります。ブルーの色。

したがって、次の 3 つの結果が考えられます。

  1. 列 B の値が列 A に見つからない場合、その列 B の値のセル (内部) の色は赤に設定されます。
  2. 列 B の値が列 A にあり、列 A の値のセル (内部) の色が青の場合、その列 B の値のセル (内部) の色は黄色に設定されます。
  3. 列 B の値が列 A にあり、列 A の値のセル (内部) の色が青でない場合、その列 B の値のセル (内部) の色は緑に設定されます。

ポイント 1 は機能しますが、ポイント 2 と 3 を分離するための IF チェックは機能しません。そのような場合はすべて、自動的にポイント 3 に進みます。

誰かが問題を特定できますか?

コード:

Sub Looper()

Dim i As Integer
Dim Sel As String
Dim MoveDown As String
Dim sourceVal As String
Dim Program As String


Dim i2 As Integer
Dim MoveDown2 As String
Dim Sel2 As String
Dim destVal As String
Dim found As Boolean


i = 2

MoveDown = "YES"

MoveDown2 = "YES"
i2 = 2

Do Until MoveDown = "DONE"
    Sel = "B" + Replace(Str(i), " ", "")
    sourceVal = Range(Sel).Value
    If Range(Sel).Value = "" Then
        MoveDown = "DONE"
    Else
        MoveDown2 = "YES"
        i2 = 2
        found = False
        Do Until MoveDown2 = "DONE"
            Sel2 = "A" + Replace(Str(i2), " ", "")
            destVal = Range(Sel2).Value
            If Range(Sel2).Value = "" Then
                MoveDown2 = "DONE"
            Else
                If destVal = sourceVal Then
                    If Range(Sel2).Interior.Color = vbBlue Then
                        Range(Sel).Interior.Color = vbYellow
                    Else
                        Range(Sel).Interior.Color = vbGreen
                    End If
                    found = True
                End If
            End If
            i2 = i2 + 1
        Loop
        If found = False Then
            Range(Sel).Interior.Color = vbRed
        End If
    End If
    i = i + 1
Loop
End Sub
4

1 に答える 1

0

あなたのコードは正常に動作し、期待どおりの動作をしますが、ここで 2 つの潜在的な問題が見られます

  1. sourceValが 2 つ以上の一致を見つけた場合はどうなりますかdestVal...青destValは黄色に設定されますが、その後sourceValの青以外の一致では緑に戻ります。Exit Loopfound = True

  2. Excel 2010 では青は青ではありません!!! セルを手でシェーディングすると、ツールチップが青を示唆していても、実際には青ではありませんvbBlue....Debug.Print Range(Sel2).Interior.Color

ここに画像の説明を入力

于 2013-07-31T07:54:19.160 に答える