VBA:从范围2的范围1中查找日期->如果匹配,则颜色单元格

时间:2018-08-02 12:45:02

标签: excel vba excel-vba calendar

为了组织我的项目,我创建了一个excel工作表,它基本上是一个日历,但是日期不是固定的,并且因项目而异。某些日期应以不同的方式上色。到目前为止,我使用条件格式来实现此目的,但是我发现CF并不总是能按我希望的那样工作。此外,由于我做了很多复制和粘贴操作,因此CF规则随着时间的推移会加起来很大,从而减慢了工作表的速度。 VBA最终可能还会更灵活。

我首先使用以下代码为包含今天日期的单元格着色(我是VBA /编码初学者;该代码来自另一个网站,我刚刚对其进行了修改以满足自己的需求)。

Option Explicit

Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Dim Dates As Range
Set Dates = Range("B2:H2," & _
                    "B6:H6")

For Each cell In Dates

If Not IsDate(cell.Value) Then
End If

If IsEmpty(cell.Value) Then
End If

If cell.Value = Date Then
  cell.Interior.ColorIndex = 3

'Include more conditions e.g. lookup date in list of holidays; if date = holiday then different color

ElseIf cell.Value - Date <> 0 Then
  cell.Interior.ColorIndex = 0
End If

Next cell
End Sub

现在,我还希望宏将range.1“日期”中的日期与其他日期列表(range.2)(例如假期)进行比较。如果“日期”中的单元格与range.2中的单元格匹配,则匹配的单元格将获得另一种颜色。 CF没问题,但是我真的很茫然。

我尝试通过添加手动完成

ElseIf cell.Value = cell(1, 1).Value Then
  cell.Interior.ColorIndex = 2

但是,这会为所有单元格着色,不仅为与cell(1,1)中的日期匹配的单元格着色。

非常感谢您的帮助。

亲切的问候 丹尼斯

2 个答案:

答案 0 :(得分:0)

这是一个例子;代码会将ColA中的值检查为ColB中的值,如果找到匹配项,则为ColA中的单元格着色,根据需要更改引用。

Dim xcel As Range
Dim ycel As Range

With Worksheets("Sheet1")
    For Each xcel In .Range("A1", .Cells(.Rows.Count, "A").End(xlUp))
        For Each ycel In .Range("B1", .Cells(.Rows.Count, "B").End(xlUp))
            If xcel.Value = ycel.Value Then
                xcel.Interior.Color = RGB(255, 255, 0)
            End If
        Next ycel
    Next xcel
End With

答案 1 :(得分:0)

如果适当地定义range1和range2,则可以完成以下操作:

 <a-entity
  cursor-logic
  cursor="rayOrigin: mouse"
  raycaster="objects: .item">
 </a-entity>