Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1960to1964
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Einzelnen Wert aus einer Zelle erkennen - VBA Lösung

Einzelnen Wert aus einer Zelle erkennen - VBA Lösung
31.01.2024 17:14:46
Thomas
Hallo zusammen,

für mein Problem habe ich bereits eine gute Lösung erhalten, jedoch fehlt das Zünglein an der Waage.

Beispieldatei:
https://www.herber.de/bbs/user/166651.xlsx

In der ersten Tabelle in der Beispieldatei werden in der Spalte E Terminüberschneidungen angezeigt. Diese Formel funktioniert prima, so lange nur ein Wert in der Spalte D steht.

Es ist nun so, dass in Spalte D, in den Zellen mehrere Werte (Buchstaben) stehen bswp. D14.
Eine Lösung könnte sein, dass man die einzelnen Werte in die nachfolgenden Spalten oder Zeilen verschiebt, dadüruch wird das Tabellenblatt nach rechts oder nach unten sehr umfangreich und unüberischtlich.

Deshalb meine Frage, ob hier mit VBA eine "schlanke" Lösung möglich ist.
Diese könnte in etwa aussehen wie in Zelle E15 E16

Schöne Grüße
Thomas

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einzelnen Wert aus einer Zelle erkennen - VBA Lösung
01.02.2024 09:23:51
Thomas
Hallo Uwe,

einfach perfekt, vielen Dank!

Vor dem Start deines Codes muss noch ein Code vorwerg, der die Einträge der Spalte E löscht.
Bei Korrektur der Terminkonflikte bleibt sonst der vorherige Eintrag stehen.
Aber das bekomme ich selbst hin.

Vielen Dank nochmal!
Thomas
VBA Code anpassen
02.02.2024 10:25:55
Thomas
Hallo zusammen,

Uwe hat mir einen Code für mein Anliegen geschrieben - siehe Datei im Link:
https://www.herber.de/bbs/user/166657.xlsm

Ich schaffe es leider nicht, diesen Code in für eine geänderte Struktur umzuformulieren.
Wäre dankbar, wenn das jemand hinbekommt und einen erklärenden Satz dazuschreibt auf welche Zellen sich die folgenden Zeilen beziehen:

   For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row - 1

If .Cells(i, 1) = .Cells(i + 1, 1) Then ' auf gleiches Datum prüfen
min = .Cells(i, 2) ' min max Zeitzahl ermitteln
If .Cells(i + 1, 2) min Then min = .Cells(i + 1, 2)


Neue Struktur
https://www.herber.de/bbs/user/166709.xlsm

Schöne Grüße
Thomas
Anzeige
AW: VBA Code anpassen
03.02.2024 22:51:29
Pappawinni
Da steht


With Tabelle2
For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row - 1
....
....

Das With bedeutet dass nachfolgende Punkt-Referenzen wie diese .Cells sich auf Tabelle2 beziehen.
.Cells(Rows.Count, 1).End(xlUp).Row

liefert die letzte Zeile mit Inhalt in der ersten Spalte in Tabelle2
Da steht aber noch -1 dahinter, also soll
FOR mit I = 1 begonnen werden und bis i = 4 laufen
(letzte gefüllte Zelle der Spalte 1 ist Zeile 5)



If .Cells(i, 1) = .Cells(i + 1, 1) Then

hier wird dann immer der Wert der Zelle aktuellen Zelle (Zeile I, Spalte 1) mit dem Wert der nachfolgenden Zelle ( Zeile I+1, Spalte 1) verglichen und
wenn gleich dann



min = .Cells(i, 2) ' min max Zeitzahl ermitteln
If .Cells(i + 1, 2) min Then min = .Cells(i + 1, 2)
max = .Cells(i, 3)
If .Cells(i + 1, 3) max Then max = .Cells(i + 1, 3)

werden die Werte der Spalte 2 verglichen und der kleinere Wert landet in der Variablen min.
und der kleinere aus dem Vergleich der Werte der Spalte3 landet in der Variablen max.

Hilft das schon was ?
Anzeige
AW: VBA Code anpassen
05.02.2024 09:07:26
Thomas
Hallo Papawinni,

danke für deine Erklärung die mir sicher weiterhilft.
Aber Code, so wie ich ihn nun geänder habe, liefert kein Ergebnis.
Wo sind denn meine Fehler?

https://www.herber.de/bbs/user/166790.xlsm

Schöne Grüße
Thomas
AW: VBA Code anpassen
05.02.2024 14:28:32
Pappawinni
Da waren so einige, primär mal falsche Spalten.
was allerdings zuerst schief lief war, dass schon die Schleife nicht lief, weil da ja der letzte Wert in der ERSTEN Spalte gesucht wird.
Wenn da aber nur ein Titel steht, dann kommt halt FOR i = 2 TO 0 heraus.
Denn lief der Vergleich beim ersten if schief, weil du statt .Cells(i+1,2) eben .cells(i+2,1) stehen hattest, oder sowas.
Ich habe halt erst mal diverse debug.print dazwischen gesetzt und nach und die Fehler eingegrenzt.
Ich hoffe es waren alle.
Sub TerminKonflikt()

Dim i&, j&, k&, tmpA, tmpB, min#, max#
With Tabelle2
For i = 2 To .Cells(Rows.Count, 2).End(xlUp).Row - 1
If .Cells(i, 2) = .Cells(i + 1, 2) Then ' auf gleiches Datum prüfen
min = .Cells(i, 3) ' min max Zeitzahl ermitteln
If .Cells(i + 1, 3) min Then min = .Cells(i + 1, 3)
max = .Cells(i, 4)
If .Cells(i + 1, 4) max Then max = .Cells(i + 1, 4)
' prüfen auf Zeitfenster zwischen min und max
If .Cells(i, 3) >= min And .Cells(i + 1, 3) >= min And .Cells(i, 4) = max And .Cells(i + 1, 4) = max Then
tmpA = Split(.Cells(i, 8), ",")
tmpB = Split(.Cells(i + 1, 8), ",")
For j = 0 To UBound(tmpA)
For k = 0 To UBound(tmpB)
If tmpA(j) = tmpB(k) Then ' prüfen auf doppellten Eintrag(getrennt durch Komma)
.Cells(i, 9) = "Terminkonflikt"
.Cells(i + 1, 9) = "Terminkonflikt " & tmpB(k) & " - gleicher Tag - gleiches Zeitfenster"
End If
Next k
Next j
End If
min = 0
max = 0
End If
Next i
End With
End Sub
Anzeige
AW: VBA Code anpassen
05.02.2024 17:52:06
Thomas
Perfekt!
Vielen Dank für deine Mühe und Erklärung.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige