循环并比较数组中的值

时间:2013-05-23 13:09:26

标签: arrays excel excel-vba vba

在Sheet1中,我有一个列,其中填充的单元格为1-20行,带有常规数字。看下面的图片:

enter image description here

在Sheet2中我还有一个列,单元格从5到25开始。如果我在这些单元格中输入一些值,则在Sheet1中从具有相同值到单元格“D”的单元格中更改背景颜色。看下面的图片,看看它是如何工作的:

enter image description here enter image description here

我正在使用这段代码:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 And Target.Row >= 5 Then
    If Target.Offset(0, 0).Text <> "" Then
    Dim n As Long
        For n = 5 To 25
            If Target.Offset(0, 0).Value = Worksheets("Sheet1").Range("A" & n).Value Then
                Worksheets("Sheet1").Range("A" & n & ":D" & n).Interior.ColorIndex = 3
            End If
        Next n
    End If
End If

End Sub

现在,我希望每次激活Sheet1时进行某种检查,如果单元格Interior.ColorIndex = xlNone中没有值,则范围内的所有单元格(“A1:A20”),如果这些单元格的某些单元格Interior.ColorIndex = 3中有值。我正在考虑将这些值放入一个数组,然后循环遍历它以比较值,但我是VBA的新手,所以欢迎提供帮助。如果有更好的解决方案,请启动它。

另外,如果我将值12替换为17,那么我想为一个情况编写一段代码,Interior.ColorIndex包含12的单元格转到xlNone和17 {{1} }转到“Interior.ColorIndex”。

所以,每个建议都是受欢迎的。

1 个答案:

答案 0 :(得分:2)

不需要VBA,正如pnuts所说。

对颜色执行此操作的最简单方法是使用公式使用条件格式来检查一张纸上A列中单元格的值与您希望颜色更改的行并应用格式。

请参阅:

如果您想要VBA,则可以在工作簿和工作表事件处理程序中执行此操作。

工作表选择/激活:

在Sheet1上的Excel中,右键单击底部的工作表名称,然后单击查看代码。这将在VB编辑器中打开Sheet1的类模块。

在左侧代码模块的顶部,从下拉列表中选择工作表,然后在右侧下拉列表中单击激活事件处理程序

这将创建一个空的子例程,每当您选择Sheet1工作表时,Excel将执行该子例程。

在该代码中,您可以进行检查。

在sheet2上更改单元格:

要在每次在sheet2上更改单元格时运行代码,您需要打开sheet2的类模块,从左侧的下拉列表中选择工作表,然后更改为活动。

此代码将在每次更改sheet2上的单元格时运行,在此处,您将编写代码,首先检查目标参数是否在您的范围内,如下所示:

If not Application.Intersect(Target, "A5:25") Then Exit Sub

接下来,您要编写代码以检查值是否不再匹配,并重置颜色。

HTH

菲利普