2016-11-25 1 views
0

Ich habe einen Zeitplan für das ganze Jahr für eine Gruppe. Die dritte Zeile enthält alle Daten des Jahres, die nächsten paar Zeilen haben den Namen jedes Gruppenmitglieds.Fügen Sie Text in Zellen ein, wenn die obige Zelle die Bedingung erfüllt

In A4 angegebene Elemente: A9. Feiertage sind in Zellen A20: A28 angegeben.

Also, was ich tun möchte, wahrscheinlich durch VBA, ist eine Regel wie mit bedingter Formatierung, die das Wort "Holiday" in B4: B9 fügt, wenn B3 ein Datum in A $ 20: A $ 28, und dann in C4: C9 wenn C3 übereinstimmt und so weiter.

Jetzt kann ich diese Bedingung nicht in jeder Zelle schreiben, da es ein Zeitplan ist, der von jedem Mitglied verwendet wird. Dies ist der Vorschlag, den ich oft vom googlen bekomme, und ich kann das nicht mit bedingter Formatierung machen, also schätze ich VBA Der Weg zu gehen, aber der VBA-Code, den ich bisher gefunden habe, scheint spezifische Zellen zu verwenden und würde nicht jede Spalte durchlaufen.

+0

Willkommen bei StackOverflow. Bitte beachten Sie, dass es sich hierbei nicht um einen kostenlosen Code-Write-Service handelt, sondern dass wir anderen Programmierern (und Aspiranten) helfen wollen, ihren eigenen Code zu schreiben. Bitte lesen Sie die Hilfethemen zu [Wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask "How to"). Vielleicht möchten Sie auch die [Tour] (http://stackoverflow.com/tour "Magical Mystery Tour") besuchen und sich dabei ein Abzeichen verdienen. Danach aktualisieren Sie bitte Ihre Frage mit dem Code "VBA", den Sie bisher geschrieben haben, um die Aufgaben zu erledigen, die Sie erreichen möchten. Selbst die Aufzeichnung eines Makros ist eine Möglichkeit, zu beginnen. –

+0

Alles, was Sie brauchen, um Ihr Problem zu lösen, ist die Verwendung von 'für jede' und 'wenn ... dann ... sonst' Anweisungen. Sie können über sie in der VBA-Hilfe lesen (in Excel drücken Sie Alt + F11, dann F1). –

+0

@EganWolf Ich werde es untersuchen. Vielen Dank. –

Antwort

0

Ohne Ihren allgemeinen Ansatz, einen einfachen Code in Frage zu stellen, das tut, was Sie wie folgt zu tun planen, arbeiten könnte:

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 

Hinweis:

  • Das erwähnte Konzept @EganWolf zu suchen ist ähnliche Objekte (in diesem Beispiel Kalendertage) und iterieren diese, indem Sie eine Aktion ausführen (Schreiben von "Holiday"), wenn ein Check übergeben wurde (Kalender liegt im Bereich von Feiertagen). Es gibt eine Vielzahl von Möglichkeiten, dies zu implementieren, ich postete lediglich ein einfach zu folgen Beispiel
  • Looping jeden einzelnen Kalendertag machen wir 365 Iterationen hier, versuchen, jeden Kalender in den 9 Ferien übereinstimmen.
  • Wir könnten das aber andersherum machen: die 9 Feiertage durchgehen, sie in den 365 Kalendertagen abgleichen, also nur 9 mal loopen. Die Performance könnte theoretisch auf beide Arten schwanken, da trotz einer geringeren Anzahl von Iterationen eine einzelne Iteration länger dauern könnte. Aber natürlich ist die Performance an 365 Tagen nur ein theoretisches Problem.

Hoffe, dass hilft!

+0

Danke, das hat mir sehr geholfen. Leistung ist kein Problem, es ist nur etwas, um zu viel manuelle Eingabe zu verhindern. –

Verwandte Themen