当单元格满足条件时,在单元格中插入文本

时间:2016-11-25 13:18:56

标签: excel vba excel-vba

我有一个小组全年的日程表。 第三行包含一年中的所有日期,接下来的几行具有每个组成员的名称。

A4:A9中指定的成员。 假期在单元格A20:A28中指定。

所以,我想要做的,可能是通过VBA,制定一个规则,如条件格式,在B4中插入单词“Holiday”:B9如果B3匹配20澳元的日期:28美元,然后进入C4:C9,如果C3匹配,依此类推。

现在我无法在每个单元格中写出这个条件,因为它是每个成员使用的时间表,这是我经常通过谷歌搜索获得的建议,我不能用条件格式化来做,所以我猜测VBA是要走的路,但到目前为止我发现的VBA代码似乎使用了特定的单元格而不会遍历每一列。

1 个答案:

答案 0 :(得分:0)

在不质疑您的一般方法的情况下,执行您计划执行的操作的简单代码可以如下工作:

Option Explicit

Sub markhd()

    ' get calendardays, holidays and employees somehow into collections
    ' that can be looped. Since that information is stored in a worksheet,
    ' using ranges is one way to achive that

    ' holidays
    Dim rhd As Range
    Set rhd = ActiveSheet.Range("A20:A28")

    ' group employees
    Dim remp As Range
    Set remp = ActiveSheet.Range("A4:A9")

    ' calendar days
    Dim rcal As Range
    Set rcal = ActiveSheet.Range("B3:NB3")

    Dim c As Object

    ' Loop every day (every c-object in your calendar days), 
    ' then write "Holiday", if it matches an entry in your holiday-range
    For Each c In rcal
        If Not IsError(Application.Match(c, rhd.Cells, False)) Then
            remp.Offset(0, c.Column - remp.Column).Value = "Holiday"
        End If
    Next c

End Sub

注意:

  • 提到的@EganWolf概念是寻找类似的对象(本例中的日历日)并迭代它们,如果通过检查(日历在假日范围内),则执行动作(写“假日”)。有很多不同的方法可以实现这一点,我只发布了一个易于理解的例子
  • 循环每一个日历日,我们在这里进行365次迭代,试图在9个假期中匹配每个日历。
  • 但是,我们可以反过来这样做:循环9个假期,在365个日历日内匹配它们,因此只循环9次。从理论上讲,性能可以双向摆动,因为尽管迭代次数较少,但单次迭代可能需要更长时间......但显然,在365天时,性能仅仅是一个理论问题。

希望有所帮助!