Also ich komme super klar.

Ich habe aber auch vor 3 Jahren ernsthafter angefangen VBA zu lernen weil mir die normalen Excel-Funnktionen und Formeln mir nicht mehr ausgereicht haben. Davor konnte ich in VBA nur rudimentäre Sachen wie Zellen formatieren, kopieren, löschen blah.

Eigentlich ist Excel gar nicht so schwer, wie bei allem anderen muss man sich halt erstmal (intensiver) damit beschäftigen. Außerdem gibt es zB zu jeder Formel direkt eine Hilfe die man einblenden kann. Man muss halt klein anfangen mit einfachen Formeln.

Im Grunde hat man einen Input A und möchte aber am Ende Output B. Dann überlegt man sich Schritt für Schritt was man tun muss um am Ende Output B zu bekommen, man dröselt das Ganze in kleinere, für sich genommen leichter lösbare Probleme auf. Am Ende fügt man die Einzel-Lösungen zusammen und erhält im Idealfall am Ende den gewünschten Output.
Auf diese Weise lassen sich mit etwas Übung relativ mühelos lange verschachtelte Formeln bauen. Ich gehe da immer von innen nach außen vor und löse halt die innersten Probleme zuerst. Das andere baue ich nach und nach drumherum.

Ich muss aber gestehen dass ich zu 75% nur noch VBA benutze weil es einfach mehr und bessere Möglichkeiten bietet in eigentlich allen Bereichen. Sei es Formatierung, Datenverarbeitung, Automatisierung zB zum massenhaften Erstellen von Etiketten etc. Man kann sogar direkt automatisiert E-Mails verschicken an eine Empfängerliste.

Wenn man viel mit Excel arbeitet lohnt sich das Lernen von VBA auf jeden Fall da es viele neue Möglichkeiten schafft. Ist halt nur sehr umfangreich und man lernt eigentlich jeden Tag irgendwas Neues während man damit arbeitet.

...zur Antwort

Es wäre hilfreich mehr vom Code zu sehen als nur ein Schnippsel (die Schleife mit i zB und die Variablen Deklaration).

Ich nehmen mal an arList zieht der sich aus der GetAreaList() Funktion oder ist arList ein mehrdimensionales Array oder eine Collection oder Dictionary??

Ich verstehe dein ganzes Vorhaben nicht so ganz. Das sieht mir reichlich verkompliziert aus nur um ein paar Spalten und Zeilen zu färben.
Was genau ist in arList enthalten? Warum iterierst du mit i in der äußeren Schleife darüber? Bitte mehr/vollständigere Infos.

Aus diesen Fetzen kann man sich keinen vernünftigen Reim machen.

...zur Antwort

Das geht nur manuell oder mit VBA.

Automatisch mit VBA würde das wie folgt aussehen:

Den Code im Tabellenblatt-Code einfügen:
Rechtsklick auf den Tabellenblattreiter und "Code anzeigen" klicken. Ein VBA Fenster öffnet sich. In den leeren Code Editor dann den Code einfügen.

Egal wo im Text das Wort "Zugfahrt" steht, alle Zeichen danach werden farbig gemacht . In dem Fall rot --> RGB(255, 0, 0) , kann man beliebig anpassen.

Von hier aus kann man das noch weiter treiben aber das wäre schon mal ein Start.

Das Makro reagiert in dieser Version nur auf Änderungen in Spalte C (Column 3). Das kann man auf eine andere Spalte legen oder auf einen ganzen Bereich ausweiten, z.B. Spalten B und C oder A5 bis E36 etc.

in der ersten Zeile vom Code kann man das Auslösewort definieren ("Zugfahrt") und in der zweiten Zeile die Spaltennummer angeben in der die betreffenden Zellen sind. A = 1, B = 2, C = 3 etc.


Const strTrigger As String = "Zugfahrt"
Const intTargetCol As Integer = 2


Private Sub Worksheet_Change(ByVal Target As Range)

Dim strInput As String
Dim intLenTrigger As Integer
Dim intColorStart As Integer
Dim intColorEnd As Integer


If Target.Column = intTargetCol Then

    lngTextColor = RGB(255, 0, 0)
    strInput = Range(Target.Address).Value
    intLenTrigger = Len(strTrigger)
    intColorStart = InStr(1, strInput, strTrigger, vbTextCompare) + intLenTrigger
    
    If intColorStart > intLenTrigger Then
    
        intColorEnd = Len(strInput) - intColorStart + Len(strTrigger)
        Range(Target.Address).Characters(intColorStart, intColorEnd).Font.Color = lngTextColor
    
    End If

End If

End Sub
...zur Antwort

Du könntest das ganze auch mit VBA machen wenn du bock auf sowas hast. Dich in VBA einzuarbeiten würde dir generell viel mehr Möglichkeiten eröffnen und Flexibilität für deine Tabellen geben. Ist anfangs allerdings ein massives Thema aber lohnt sich wenn man viel mit Excel arbeiten will/muss.

Ich würde dein Problem folgendermaßen in VBA lösen:

  1. Markiere den Zellenbereich mit den Zellen die gefärbt werden sollen. Rechtsklick und "Namen definieren" klicken und dann einen aussagekräftigen Namen wählen.
  2. Rechtsklick unten auf den Tabellenreiter und "Code anzeigen" klicken. Nun öffnet sich der VBA Code-Editor. Jedes Tabellenblatt kann eigenen Code ausführen, man kann aber auch Module erstellen, aber in diesem Fall reicht der Code direkt "im" Tabellenblatt. Das VBA Fenster lässt sich auch mit ALT+F11 öffnen aber dann muss man noch das entsprechende Tabellenblatt links aus der Liste suchen und doppelklicken.
  3. Den Code unten kopieren und in den leeren Code-Editor einfügen. "Bereich_Daten" durch den Namen von deinem benannten Bereich aus Punkt 1 ersetzen. "$B$35" ist deine Bezugszelle wo du die Zellen reinschreibst, kann auch nach belieben geändert werden. Und "$A$35" ist die Zelle mit der gewünschten Zellfarbe. Auch hier kann eine beliebige andere Zelle gewählt werden. Hierfür füllst du diese Zelle mit einer beliebigen Farbe die dann als gewünschte Zellfarbe dient. Man kann die Farbe auch "hardcoden" mit einem RGB Wert. Für Flexibilität würde ich das aber nicht machen.
  4. Das erste (obere) Makro füllt deine Bezugszelle nun mit den Zelladressen aus dem Zellenbereich den du benannt hast und erstellt automatisch eine Dropdown-Liste jedes mal wenn du das Tabellenblatt aktivierst (wäre das nun auch schonmal abgehakt). Wenn du den benannten Zellenbereich änderst im Namensmanager dann wird die Änderung somit im Makro übernommen.
  5. Das zweite (untere) Makro reagiert auf eine geänderte Auswahl im Dropdown und füllt die Zelle mit der in Zelle A35 definierten Farbe.
  6. Im Trust Center müssen Makros aktiviert sein und die Datei muss als .xlsm gespeichert werden.
Public rngData As Range
Const strNamedRange As String = "Bereich_Daten"
Const strTarget As String = "$B$35"
Const strColor As String = "$A$35"


Private Sub Worksheet_Activate()

Dim arrCells() As String 'dynamisches Array initiieren
Dim i As Integer

i = 0

Set rngData = Range(strNamedRange)

'Eine Schleife die jede Zelle im gewünschten Zellenbereich durchgeht
For Each c In rngData
    ReDim Preserve arrCells(i)  'das Array immer wieder erweitert bis die Schleife durchgelaifen ist
    arrCells(i) = c.Cells.Address 'Zelladresse wird ins Array aufgenommen
    i = i + 1
Next c

'Das Dropdown wird erstellt und mit den Daten aus dem Array gefüllt
With Range(strTarget).Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
    Operator:=xlNotEqual, Formula1:=Join(arrCells, ",")
    .InCellDropdown = True
End With

End Sub


Private Sub Worksheet_Change(ByVal Target As Range)

Dim intFillColor As Integer

On Error Resume Next

If Target.Address = strTarget Then

    intFillColor = Range(strColor).Interior.ColorIndex
    
    Set rngData = Range(strNamedRange)


    rngData.Interior.color = xlNone
    Range(Range(Target.Address).Text).Interior.ColorIndex = intFillColor
    
End If

End Sub
...zur Antwort

Zufällig hier drüber gestolpert.
vergiss VERKETTEN. Benutze "TEXTVERKETTEN" stattdessen.

=TEXTVERKETTEN(ZEICHEN(10);WAHR; AA8;AC11;AC14;AC20;AC27;AC35;AC40;AB48)

Bei Textverketten gibt man als erstes Argument ein Trennzeichen an welches wie der Name schon sagt, jeden Eintrag voneinander trennt. So muss man den Zeilenumbruch "ZEICHEN(10)" nur einmal als Trennzeichen angeben. Das zweite Argument legt fest ob leere Zellen ignoriert werden oder nicht (WAHR oder FALSCH).
2 sog. "Experten" in den Antworten und keiner nennt Textverketten?

...zur Antwort