如果某个值在任意两行的列中匹配,我想使用 VBA 仅突出显示 Excel 中第二个行中的值。怎么办?

问题描述 投票:0回答:1

我正在尝试使用 VBA 在 Excel 中创建日历。看起来如图所示:

B 列是月份列。月份从该月第一天所在周(行)的 B 列开始。例如,二月从第 6 行开始,尽管同一行中有一些一月的最后几天。

我想强调一下假期。例如,我 1 月 1 日有假期,该假期以青色突出显示。我通过定义一个二维数组对象

my_holidays(x,y)
编写了一段代码。 x 指月份,y 指日期,基于以下内容:

我编写了一个代码,在 B 列中搜索月份,在 C 到 I 列中搜索日期,并突出显示是否找到匹配项:

Dim last_row As Integer
last_row = ws1.Range("B1").End(xlDown).row

Dim row As Integer
Dim column As Integer

For row = 1 To last_row
    For column = 3 To 9
        For i = 1 To num_holidays
            
            If ws1.Range("B" & row).Value = my_holidays(i, 1) And ws1.Cells(row, column).Value = my_holidays(i, 2) Then
                ws1.Cells(row, column).Interior.Color = vbCyan
            End If
            
            
        Next i
        
        
    Next column
    
Next row

我的问题是,如果我在 3 月 29 日这样的日子有假期,它会突出显示此处的两行 10 和 14,如上面的屏幕截图所示。然而,第 10 行中的 29 天对应于二月。

如何修改我的代码,以便如果假期对应一个月的两行,则应在 Excel 中使用 VBA 选择第二行?

excel vba algorithm excel-formula highlight
1个回答
0
投票

对于这个问题,可以添加一个条件来检查单元格值是否为最小值,直到行尾。这表明同一行中的日期数字没有重置,因此月份没有改变。

    If ws1.Range("B" & row).Value = my_holidays(i, 1) And ws1.Cells(row, column).Value = my_holidays(i, 2) And ws1.Cells(row, column).Value = WorksheetFunction.Min(Range(ws1.Cells(row, column), ws1.Cells(row, 9))) Then
        ws1.Cells(row, column).Interior.Color = vbCyan
    End If

但是你有没有想过:如果2月27日是假期怎么办?您没有任何同时包含 2 月和 27 日的行。如果您将第 10 行更改为 3 月,那么如果 2 月 27 日和 3 月 2 日都是假期怎么办?

© www.soinside.com 2019 - 2024. All rights reserved.