根据另一个工作表

时间:2017-03-23 10:25:16

标签: vba excel-vba excel-formula excel

我正在尝试根据工作表2中的同一组值更改工作表1中某些单元格的背景颜色。

我希望它能够搜索工作表2到工作表1中的值,如果值相同则颜色应根据我们给出的颜色代码进行更改。下面是sheet1(绿色)的屏幕截图,我想要应用格式,其他是sheet2是我输入的地方

我在下面有这个代码,但它正在选择数据不可用的单元格,请解释。

Option Explicit

Public Sub tmpSO()

    Dim cell As Range

    For Each cell In Sheet1.Range("A1:B10")
        If cell.Value2 <> Sheet2.Cells(cell.Row, cell.Column).Value2 Then
            cell.Interior.Color = vbRed
        End If
    Next cell

End Sub

@Peh,请根据sheet2中的值检查下面的屏幕截图,了解我的输出在sheet1中应该是什么样的。

输出(Sheet1)

enter image description here

输入(Sheet2)

enter image description here

1 个答案:

答案 0 :(得分:1)

您的代码运行正常。在第1页中,它将Range("A1:B10")的每个单元格与第2页不同。如果您不希望第1页的空单元格被着色,则还需要检查空单元格。

Option Explicit

Public Sub tmpSO()

    Dim cell As Range

    For Each cell In Sheet1.Range("A1:B10")
        If cell.Value2 <> Sheet2.Cells(cell.Row, cell.Column).Value2 And _
           cell.Value2 <> vbNullString Then
            cell.Interior.Color = vbRed
        End If
    Next cell

End Sub

更新更新的问题: 因此,您需要第二个循环。第一个循环遍历要格式化的单元格,第二个循环遍历输入值并将它们与第一个循环的每个单元格进行比较。

Option Explicit

Public Sub tmpSO()
    Dim iCell As Range, jCell As Range

    Dim FormatRange As Range
    Set FormatRange = Sheet1.Range("A1:H11") 'the range you want to format

    Dim InputRange As Range
    Set InputRange = Sheet2.Range("B4:B10") 'the range where your input values are

    For Each iCell In FormatRange
        For Each jCell In InputRange

            If iCell.Value2 = Sheet2.Cells(jCell.Row, jCell.Column).Value2 And _
               iCell.Value2 <> vbNullString Then 'compare cell with all input values but left out empty cells
                iCell.Interior.Color = vbRed
                Exit For ' we can abort compairing with other input values if one is found.
            End If

        Next jCell
    Next iCell

End Sub