2016-11-25 253 views
0

我有一个组的全年时间表。 第三行包含一年中的所有日期,接下来的几行包含每个组成员的名称。当单元格满足条件时,在单元格中插入文本

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

所以,我想要做的,可能通过VBA,是制定一个规则,如条件格式,插入单词“假日”在B4:B9如果B3匹配日期在A $ 20:A $ 28,和然后如果C3匹配成C4:C9等等。

现在我不能在每个单元格中写入这个条件,因为它是每个成员使用的时间表,这是我经常从Google搜索获得的建议,而且我无法通过条件格式来实现,所以我猜VBA是要走的路,但迄今为止我发现的VBA代码似乎使用特定的单元格,并且不会经过每列。

+0

欢迎来到StackOverflow。请注意,这不是一个免费的代码写入服务,但我们渴望帮助其他程序员(和有志之士)编写他们自己的代码。请阅读[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask“如何”)的帮助主题。您可能还想参加[游览](http://stackoverflow.com/tour“神奇之旅”),并在此过程中获得徽章。之后,请使用您迄今编写的'VBA'代码更新您的问题,以完成您希望实现的任务。即使录制宏也是一种开始的方式。 –

+0

所有你需要解决你的问题是使用'为每个'和'如果...然后...其他'的陈述。你可以在VBA帮助中阅读它们(在Excel中按Alt + F11,然后F1)。 –

+0

@EganWolf我会研究它。谢谢。 –

回答

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是寻找类似的对象(在这个例子中是日历日)并遍历它们,如果通过了一个支票(calendarday在节假日范围内),则执行一个动作(写作“假日”)。有很多不同的方式来实现这一点,我只是发布了一个易于遵循示例
  • 循环每个日历日我们在这里做365次迭代,试图匹配9个假期中的每个日历。
  • 但是,我们可以用相反的方法做到这一点:循环9个假日,在365个日历日内匹配它们,因此仅循环9次。性能在理论上可以摆动两种方式,因为尽管迭代次数较少,但单次迭代可能需要更长的时间......但显然,在365天时,性能仅仅是一个理论问题。

希望有帮助!

+0

谢谢,这有很大的帮助。性能不是问题,只是为了防止过多的手动输入。 –

相关问题