Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1604to1608
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

Mehrere Werte in einer Zelle auswerten

Mehrere Werte in einer Zelle auswerten
01.02.2018 10:46:16
mt94
Hallo,
ich habe folgenden Fall und komme nicht weiter:
In einer Zelle stehen mehrere Datumswerte untereinander, z.B.
15.12.2010
28.06.2012
23.05.2013
18.10.2013
11.05.2015
(in einer Zelle und nur durch neuen Absatz getrennt)
02.09.2009
01.01.2013
09.04.2013
27.03.2015
(in anderer Zelle - die Abstände müssen auch so beibehalten werden)
12.12.2009
(in anderer Zelle dann wieder nur ein Wert)
Gibt es eine Möglichkeit, per Formel den aktuellsten Datumswert pro Zelle herauszufinden und den dann "+15 Monate" in Ergebniszelle anzuzeigen?
Tausend Dank für Eure Hilfe!!!

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Werte in einer Zelle auswerten
01.02.2018 11:21:38
Burak
schonmal ein kleiner Ansatz:

Sub Rüstwechsel()
Dim i As Long
Range("C1").Value = VBA.Replace(Range("A1").Value, Chr(10), "")
For i = 1 To 5
Range("B" & i).Value = Left(Range("C" & i).Value, 10)
Range("C" & i + 1).Value = Right(Range("C" & i).Value, Len(Range("C" & i).Value) - 10)
Next i
End Sub
Dieses Makro kopiert die Werte in eine Zelle, entfernt die Zeilenumbrüche und spaltet die mehreren Daten in einzelne Daten.
Also aus
15.12.2010
28.06.2012
23.05.2013
18.10.2013
11.05.2015
in Zelle A1
würde dann in Spalte B untereinander von B1 bis B5 jedes Datum einzeln stehen.
Dabei ist es egal ob sie direkt untereinander stehen, eine Leerzeile zwischen ist oder nur ein Wert drin steht.
Dann kannst du über If gucken welches die größte ist und sie kopieren.
PS: Die Länge der Schleife gibt an, wie viele Daten untereinander in einer Zelle stehen.
Anzeige
AW: Mehrere Werte in einer Zelle auswerten
01.02.2018 11:24:44
Peter(silie)
Hallo,
per Formel weiß ich nicht ob das geht...
Habe aber eine VBA Lösung.
Einfach ein Modul erstellen und den unten stehenden Code einfügen.
Der Aufruf in der Tabelle sieht z.B. so aus: =MostFrequentDate(A1;15)
Der erste Parameter ist die Zelle mit den Datumswerten, der zweite ist Optional und
stellt die Anzahl der Monate dar, die hinzugefügt werden sollen.
Hier Beispiel Mappe: https://www.herber.de/bbs/user/119459.xlsm
Hier Code:
Function MostFrequentDate(ByRef Target As Range, Optional ByVal MonthsToAdd As Long = 0) As  _
String
Dim i As Long, tmp As Date
Dim patter_ As String, value_ As String
Dim rx As Object, matches As Object
'Date pattern
pattern_ = "\d{2}.\d{2}.\d{4}"
'Define the value to look in
If Target.Rows.Count > 1 Then
value_ = Join(Application.Transpose(Target.Value), "")
ElseIf Target.Columns.Count > 1 Then
value_ = Join(Application.Transpose(Application.Transpose(Target.Value)), "")
Else
value_ = Target.Value
End If
'Create a Regexp Object
Set rx = CreateObject("vbscript.regexp")
With rx
.Global = True
.IgnoreCase = True
.MultiLine = False
.Pattern = pattern_
'Get all matches
Set matches = .Execute(value_)
End With
'If he found something
If matches.Count > 0 Then
'check for biggest Date
For i = 0 To matches.Count - 1
If CDate(matches(i)) > tmp Then
tmp = CDate(matches(i))
End If
Next i
'Add the amount of months
MostFrequentDate = CStr(DateAdd("m", MonthsToAdd, tmp))
Else
'if he found nothing
MostFrequentDate = "NoDateFound"
End If
End Function

Anzeige
per Formel und Hilfszellen
01.02.2018 11:47:10
WF
Hi,
in Zelle A1 stehen 1 bis viele Datümer
in K1 (Hilfszelle) schreibst Du:
=GLÄTTEN(TEIL(WECHSELN(GLÄTTEN($A1);ZEICHEN(10);WIEDERHOLEN(" ";199));SPALTE(A1)*199-198;199))*1
weit genug nach rechts kopieren
das aktuellste Datum in B1 ist dann:
=MAX(K1:S1)
+ 15 Monate:
=DATUM(JAHR(B1);MONAT(B1)+15;TAG(B1))
WF
AW: per Formel und Hilfszellen
01.02.2018 12:06:06
mt94
Hallo WF,
das klingt vielversprechend!
Habe es gerade getestet und es funktioniert soweit. Einziger Haken dabei ist, dass ich manuell die Anzahl der Hilfszellen an die Anzahl der Daten anpassen müsste, damit kein #WERT! Error in Zelle B1 erscheint.... Konnte das mit =KGRÖSSTE(K1:S1;1) in Zelle B1 lösen.
Vielen, vielen Dank für deine Hilfe!!
mt94
Anzeige
AW: per Formel und Hilfszellen
01.02.2018 12:27:25
mt94
Hallo WF,
das Problem, dass ich manuell die Anzahl der Hilfszellen an die Anzahl der Daten anpassen muss bzw. manuell #WERT! löschen muss, damit kein #WERT! Error in Zelle B1 und folglich in C1 erscheint, ist doch nicht gelöst.
Hast du einen Vorschlag?
mt94
WENNFEHLER kennst Du nicht ?
01.02.2018 12:47:29
WF
Hi,
in K1 also:
=WENNFEHLER(GLÄTTEN(TEIL(WECHSELN(GLÄTTEN($A1);ZEICHEN(10);WIEDERHOLEN(" ";199));SPALTE(A1)*199-198; 199))*1;0)
WF
AW: WENNFEHLER kennst Du nicht ?
01.02.2018 13:26:44
mt94
Danke!
ohne Hilfszellen
01.02.2018 16:43:35
lupo1
WF hat netterweise die hier erklärte Formel verwendet:
http://www.office-hilfe.com/support/showthread.php/22254-String-oder-csv-mit-Trennzeichen-per-Formel-auf-Zellen-aufteilen
Ohne Hilfszellen geht es übrigens so:
=EDATUM(MAX(INDEX(--GLÄTTEN(TEIL(WECHSELN($A1;ZEICHEN(10);WIEDERHOLEN(" ";199)); ZEILE(INDIREKT("1:"&(LÄNGE($A1)-LÄNGE(WECHSELN($A1;ZEICHEN(10);))+1)))*199-198;199));)) ;15)
... und zwar auch für in der Zelle nicht aufsteigend verkettete Datümer.
Ohne EDATUM (ist erst seit xl2007 eingebaut) ginge es zwar auch, aber auf der anderen Seite würde es schwierig, max. 8 Funktionsverschachtelungen für xl2003- zu erreichen, da schon 7 davon ohne EDATUM, INDEX und trotz Konstanten-Hart-Codierung von ZEICHEN(10) erreicht sind (mit Fettdruck in die lokal tiefste Verschachtelungsebene hinein). DATUM(JAHR( usw. benötigt jedoch zwei weitere Ebenen, womit 8 überschritten wären.
Anzeige
Dein Bsp erlaubt auch =EDATUM(--RECHTS(A1;10);15)
01.02.2018 16:49:59
lupo1
... weil ohne Ausnahme alle Datümer bei Dir aufsteigend in der Zelle sind.
AW: ohne Hilfszellen
01.02.2018 16:57:43
mt94
Hey lupo1,
super Idee! Allerdings ist die Formel nicht "immun" gegen die Leerzeilen in einer Zelle, die teilweise vorkommen...
Gibt es dafür eine Lösung?
mit EDATUM und AGGREGAT
01.02.2018 18:00:17
Josef
Hallo
Folgende Formel ist "immun" gegen Leerzeilen in einer Zelle
und funktioniert auch bei nicht aufsteigenden Daten in einer Zelle
=EDATUM(AGGREGAT(14;6;0+(TEIL(WECHSELN(A1;ZEICHEN(10);"");ZEILE(1:9)*10-9;10));1);15)
Gruss Sepp
mit EDATUM und AGGREGAT
01.02.2018 18:00:37
Josef
Hallo
Folgende Formel ist "immun" gegen Leerzeilen in einer Zelle
und funktioniert auch bei nicht aufsteigenden Daten in einer Zelle
=EDATUM(AGGREGAT(14;6;0+(TEIL(WECHSELN(A1;ZEICHEN(10);"");ZEILE(1:9)*10-9;10));1);15)
Gruss Sepp
Anzeige
Dafür hatte WF schon GLÄTTEN($A1) drin ...
02.02.2018 07:39:53
lupo1
... was ich weggelassen hatte. Kannst Du gern wieder einbauen.
Geht es hingegen um 2x ZEICHEN(10) hintereinander (also optisch eine Lücke in der Zeilenliste aufgrund zweier Zeilenvorschübe statt einem), müsstest Du diese ebenfalls "GLÄTTEN", was nur über Hin- und Herwandeln zu einem Leerzeichen funktioniert.
Sepps Lösung erfordert ggü der langen Variante gleichmäßig geschriebene Datümer (hier mit 10 Zeichen). 04.1.18 ist (anders als bei meiner ersten Variante) also nicht erlaubt. Finde ich aber ok, denn wer so seine Liste pflegt, hat sich den Fehler redlich verdient. Daher würde ich Sepps Lösung verwenden und den schlampigen Mitarbeiter rauswerfen. Übrigens kann man A1 mit einer DÜ =REST(LÄNGE(A1)+1;11)=0 versehen, damit der Mitarbeiter bleiben kann.
Um Sepps Formel auch xl2007 (oder älteren Versionen mit dem Analyse-AddIn, "pfui") zugänglich zu machen:
=EDATUM(MAX(INDEX(0+TEIL(WECHSELN(A1&WIEDERHOLEN(0;110);ZEICHEN(10);"");ZEILE(1:9)*10-9;10);));15)
EDATUM ist besser als DATUM(...;15+...;...), denn bei Verzicht darauf in
=DATUM(JAHR(
MAX(INDEX(0+TEIL(WECHSELN(A1&WIEDERHOLEN(0;110);ZEICHEN(10);"");ZEILE(1:9)*10-9;10);)));15+MONAT(
MAX(INDEX(0+TEIL(WECHSELN(A1&WIEDERHOLEN(0;110);ZEICHEN(10);"");ZEILE(1:9)*10-9;10);)));TAG(
MAX(INDEX(0+TEIL(WECHSELN(A1&WIEDERHOLEN(0;110);ZEICHEN(10);"");ZEILE(1:9)*10-9;10);))))

ergibt der 30.11.2020 als Wert 15 Monate später: 2.3.2022 statt 28.2.2022
Will man aus dem 28.2.2015 (Monatsletzter) bei einem 15-Monatsshift wieder den Monatsletzten 31.5.16 anstelle des 28.5.16 machen, muss man EDATUM ein wenig "pimpen":
=EDATUM("28.2.15"+1;15)-1
Anzeige
das Rad zum zweiten
02.02.2018 09:28:21
WF
Hi,
hab bei uns nach ZEICHEN(10) gesucht und fand das:
http://excelformeln.de/formeln.html?welcher=455
Der Beitrag stammt aus 2008 - jahrelang nicht angefasst.
Da ist Deine Lösungsvariante enthalten.
WF
Da kann ich mir ja direkt was drauf einbilden ...
02.02.2018 09:50:41
lupo1
... wenn meine Lösung bei Euch in 210 301 326 455 gleich viermal verwendet wird :-)
Anzeige
hab Deinen Namen dort jetzt ergänzt
02.02.2018 10:43:40
WF
.
Das ist nett!
02.02.2018 11:47:58
lupo1
... ich verweise eigentlich auch fast immer auf Euch.
Manche Dinge gehen jedoch so sehr ins Allgemeingut über, dass es auch mal vergessen wird, etwa Euer VERWEIS(2;1/(...
Neulinge, die das nicht kennen, fragen (ohne Link 48) dann nach, wie das funktioniert, und meistens gibt ihn dann irgendeiner verspätet.

358 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige