沒有質疑你的一般方法,一個簡單的代碼,做你打算做的工作可能會像下面的內容:
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天時,性能僅僅是一個理論問題。
希望有幫助!
歡迎來到StackOverflow。請注意,這不是一個免費的代碼寫入服務,但我們渴望幫助其他程序員(和有志之士)編寫他們自己的代碼。請閱讀[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask「如何」)的幫助主題。您可能還想參加[遊覽](http://stackoverflow.com/tour「神奇之旅」),並在此過程中獲得徽章。之後,請使用您迄今編寫的'VBA'代碼更新您的問題,以完成您希望實現的任務。即使錄製宏也是一種開始的方式。 –
所有你需要解決你的問題是使用'爲每個'和'如果...然後...其他'的陳述。你可以在VBA幫助中閱讀它們(在Excel中按Alt + F11,然後F1)。 –
@EganWolf我會研究它。謝謝。 –