2016-11-25 107 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

謝謝,這有很大的幫助。性能不是問題,只是爲了防止過多的手動輸入。 –

相關問題