如果单元格值包含在另一个工作表中,则为Excel vba

时间:2018-03-29 00:19:07

标签: excel vba excel-vba

我的工作表名为'1Q FY 18',这是第二张,'Holiday'是第7张。

'1Q FY 18'第12行包含4/1至6/30的日期。 从'B20'到'B35'的细胞包含2018年的假期。

我想突出显示第二张表中具有匹配值的列(“B20:B35”)。换句话说,我想为假期的列着色。

我的代码是这样的。

   Sub Holiday()
    lastr = Worksheets(2).UsedRange.Rows.Count
    lastc = Worksheets(2).UsedRange.Columns.Count
    Worksheets(2).Activate
    Set ws7 = Worksheets("Holiday")
    Set rng1 = ws7.Range("B20:B35")
    For i = 15 To lastc
    If Not IsEmpty(Application.WorksheetFunction.VLookup(Cells(12, i).Value, rng1, 1)) Then
    Range(Cells(13, i), Cells(lastr - 2, i)).Interior.ColorIndex = 6
    End If
    Next i
    End Sub

但是这个错误发生了。 当我调试时,它会突出显示

****如果不是IsEmpty(Application.WorksheetFunction.VLookup(Cells(12,i).Value,rng1,1))那么****

我该怎么办?

1 个答案:

答案 0 :(得分:0)

这是一个执行您描述的简单宏。我已在其中放置了.select语句,因此您可以单步执行代码以查看其工作原理,但之后应将其删除。了解它的工作原理后,您可以根据自己的需要进行更改。如果您有疑问,请告诉我。动画gif显示工作簿的每个工作表,然后运行宏。在我的例子中,我每周都选择假期,但你可以改变它。我还包括一个sub来方便地重置颜色。 (你说你想要"为列着色"但我只是为单元格着色。如果你真的想要为整个列着色,你将替换cell.interior ..和r.interior .. 。Columns(cell.Column).interior ...)

Sub test()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim r1 As Range, r2 As Range, cell As Range, holidayCell As Range
Set sh1 = Worksheets("1Q FY 18")
Set sh2 = Worksheets("Holiday")
Set r1 = sh1.Range("A12")
Set r1 = sh1.Range(r1, r1.End(xlToRight))
Set r2 = sh2.Range("B20:B35")
resetColor r1
For Each cell In r1
  cell.Select
  For Each holidayCell In r2
    If cell = holidayCell Then
      cell.Interior.Color = vbYellow
      Exit For
    End If
  Next
Next cell
End Sub

Sub resetColor(r As Range)
    With r.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub

enter image description here