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

Datumsangabe sehr speziell transponieren

Datumsangabe sehr speziell transponieren
19.02.2014 10:17:43
Franz
Guten Morgen Fachleute,
ich habe eine Beispieldatei erstellt, um deutlich zu machen, worum es geht:
https://www.herber.de/bbs/user/89348.xls
In Tabelle1 gibt es drei Spalten mit chronologisch sortierten, aber unregelmäßigen Datumsangaben - untereinander. Diese sollten nun in Tabelle2 - nebeneinander - aufgelistet werden, und zwar zueinander chronologisch (ich weiß nicht, ob man das so nennt, ich hoffe das Beispiel macht's klar).
Dazu kommt noch:
- die Ergebnisse sollen nicht in einer Zeile stehen, sondern jeder Block in einer eigenen Zeile
- es kann in den Blöcken gemeinsame Datümer geben, ich hab das in Tabelle2 zur Verdeutlichung mal gelb markiert
- in der tatsächlichen Anordnung stehen die 3 Blöcke nicht wie in Tabelle1 der Beispieldatei direkt nebeneinander.
So, ich hoffe, ich hab alles Wichtige geschrieben. Kann man das mit Formeln lösen, evtl. mit Hilfszeilen oder -spalten? Oder muss ich mir da was in VBA überlegen? Ich weiß erst mal überhaupt nicht, wie anfangen. Drum bitte ich um Eure Hilfe.
Danke schonmal und Grüße
Franz

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
mit nur einer INDEX()-Formel möglich ...
19.02.2014 11:24:46
der
Hallo Franz,
... Formel nach unten und rechts kopieren:
 ABCDEFGHIJKL
3Gruppe1:  10.1.  22.1.   4.2.5.2.
4Gruppe2:7.1.  14.1.21.1. 26.1.28.1. 4.2. 
5Gruppe3: 8.1.    26.1. 3.2.  

Formeln der Tabelle
ZelleFormel
B3{=WENNFEHLER(INDEX(Tabelle1!$A:$C;VERGLEICH(KKLEINSTE(Tabelle1!$A$7:$C$99;ANZAHL($A$3:A$5)+1); INDEX(Tabelle1!$A$7:$C$99;;ZEILE(A1)); )+6;ZEILE(A1)); "")}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Werner
.. , - ...

Anzeige
AW: mit nur einer INDEX()-Formel möglich ...
19.02.2014 11:56:15
Franz
Hallo Werner,
freu mich, von Dir zu hören und über Deine kompetente Hilfe.
Allerdings hab ich auch hier wieder das Problem mit "WENNFEHLER" - ich hab Excel 2003.
Und dann, wie ich schon geschrieben hab, liegen die drei Blöcke nicht direkt nebeneinander. Ich hab die Blöcke mal so gesetzt wie in der Originaldatei und neu hochgeladen. Alle Werte beginnen in Zeile 4. Gruppe1 liegt in Spalte T, Gruppe2 in Spalate Z, Gruppe 3 in Spalte AD. Hier eine neue Beispieldatei:
https://www.herber.de/bbs/user/89353.xls
Danke schonmal fürs Erste und Grüße
Franz

Anzeige
P.S.: muss jetzt weg, kann erst am Nachmittag ...
19.02.2014 11:57:55
Franz
... wieder antworten ..............
Grüße
Franz

ach ja, Du hattest ja Excel 2003 ...
19.02.2014 12:02:35
der
Hallo Franz,
... nun dann wird die Formel natürlich wieder länger.
Und länger wird sie auch, bei Deiner recht willkürlich anmutenden Aufteilung der Daten.
Dazu aber zunächst noch Fragen:
- beginnen diese immer in Zeile 4?
- haben sie immer eine Überschrift die mit "Gruppe" beginnt?
- stehen in den Datenspalten noch weitere Wertei insbesondere Zahlenwerte?
Gruß Werner
.. , - ...

AW: ach ja, Du hattest ja Excel 2003 ...
19.02.2014 15:52:46
Franz
Hallo Werner,
bin zurück. Und gebe Antwort auf Deine Fragen:
1. ja, alle 3 Blöcke beginnen in Zeile 4
2. nein, in der Zeile 3 steht jeweils eine Formel, die die Anzahl der darunterstehenden Datümer zählt, so in der Art: = ZÄHLENWENN(SETermine;""&HEUTE())
3. in den Datumsspalten steht ab Zeile 4 nach unten nichts anderes außer Datumsangaben
Was anderes käme noch dazu, aber das werd ich mir dann wirklich selber überlegen, da werd ich mir eine evtl. Lösung von Dir immer wieder anpassen, ich nehme an, dass das jetzt den Rahmen wirklich sprengt, es sei trotzdem erwähnt: Die Zeilenreihe in Tabelle2 geht über ein DinA4-Blatt quer - und zwar über exakt 61 Spalten. Wenn die 61 Spalten voll sind, geht's 6 Zeilen drunter wieder von vorne los. Es gibt kein voraussagbares Ende, es kommen in jedem Block immer neue Datümer dazu, alte werden nicht gestrichen. Grund: 3 verschiedene Ereignisse, deren Datümer jeweils in einer eigenen Spalte festgehalten sind, sollen im Auftreten im Verhältnis zueinander angeordnet sein.
Grüße
Franz

Anzeige
AW: Datumsangabe sehr speziell transponieren
19.02.2014 13:00:33
fcs
Hallo namensvetter Franz,
hier eine Makrolösung
Gruß
Franz Sub prcTransformation() Dim wksQ As Worksheet Dim wksZ As Worksheet Dim rngQ As Range, ZelleQ As Range, Datum As Long, DatumMin As Long, DatumMax As Long Dim Zeile As Long, ZeileZ As Long, SpalteZ As Long Dim bolGefunden As Boolean Dim arrBlock, intBlock, arrRngQ() As Range Const ZeileQ1 = 4 '1. Zeile mit Datum unter Gruppenname Set wksQ = ActiveSheet arrBlock = Array(20, 26, 30) 'Spalten-Nummern mit den Gruppen-Daten ReDim arrRngQ(0 To UBound(arrBlock)) 'neues Blatt einfügen Set wksZ = ActiveWorkbook.Worksheets.Add(after:=wksQ) ZeileZ = 3 '1. Zeile für transponierte Daten SpalteZ = 1 'Einfügespalte für transponierte Daten With wksQ DatumMin = 9999999 For intBlock = 0 To UBound(arrBlock) 'Letzte Datenzeile in Gruppe Zeile = .Cells(.Rows.Count, arrBlock(intBlock)).End(xlUp).Row 'Zellbereich mit den Datumswerten Set arrRngQ(intBlock) = .Range(.Cells(ZeileQ1, arrBlock(intBlock)), _ .Cells(Zeile, arrBlock(intBlock))) With Application.WorksheetFunction DatumMin = .Min(DatumMin, .Min(arrRngQ(intBlock))) DatumMax = .Max(DatumMax, .Max(arrRngQ(intBlock))) End With 'Spaltentitel kopieren .Cells(ZeileQ1 - 1, arrBlock(intBlock)).Copy With wksZ.Cells(ZeileZ + intBlock, SpalteZ) .PasteSpecial Paste:=xlPasteFormats .PasteSpecial Paste:=xlPasteValues End With Application.CutCopyMode = False Next End With 'Datumsbereich abarbeiten For Datum = DatumMin To DatumMax bolGefunden = False For intBlock = 0 To UBound(arrBlock) 'Datum mit vorhandenen Datumswerten vergleichen For Each ZelleQ In arrRngQ(intBlock) If ZelleQ = Datum Then If bolGefunden = False Then 'wenn Datum das 1. mal übereinstimmt, dann Zielspaltenzähler erhöhen SpalteZ = SpalteZ + 1 bolGefunden = True End If 'Datum in Zieltabelle eintragen wksZ.Cells(ZeileZ + intBlock, SpalteZ).Value = Datum End If Next Next intBlock Next With wksZ 'Datumszeilen in Zieltabelle formatieren For Zeile = ZeileZ To ZeileZ + UBound(arrBlock) With .Range(.Cells(Zeile, 2), .Cells(Zeile, SpalteZ)) .NumberFormat = "D.M" 'Datumsformat .Font.Color = wksZ.Cells(Zeile, 1).Font.Color 'Fontfarbe .EntireColumn.ColumnWidth = 5 'Spaltenbreite .HorizontalAlignment = xlCenter 'Zentrieren in zellen End With Next 'Zellen mit Datum bedingt formatieren 'wenn ein Datum bei mehreren Gruppen identisch ist, dann gelb With .Range(.Cells(ZeileZ, 2), .Cells(ZeileZ + UBound(arrBlock), SpalteZ)) ' .FormatConditions.Add Type:=xlExpression, Formula1:= _ "=UND(B" & ZeileZ & """"";ANZAHL2(B$" & ZeileZ & ":B$" _ & ZeileZ + UBound(arrBlock) & ")>1)" .FormatConditions.Add Type:=xlExpression, Formula1:= _ "=UND(ZS"""";ANZAHL2(Z" & ZeileZ & "S:Z" & ZeileZ + UBound(arrBlock) & "S)>1)" .FormatConditions(.FormatConditions.Count).SetFirstPriority With .FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 65535 'gelb .TintAndShade = 0 End With .FormatConditions(1).StopIfTrue = True End With End With Erase arrRngQ, arrBlock End Sub

Anzeige
AW: Datumsangabe sehr speziell transponieren
19.02.2014 16:15:00
Franz
Hallo Namensvetter Franz zurück :-))
danke für Deine Lösung. Damit könnt ich sehr gut leben (mal noch offengelassen, was von Werner vielleicht noch für ne Formellösung kommt). Ich kenn zwar (noch) nicht alle verwendeten Anweisungen, und auch alle versteh ich nicht auf die Schnelle beim ersten Drüberschauen. Aber ich versteh sie soweit, dass ich sie mir anpassen kann: dass nicht ein neues Blatt aufgemacht wird, sondern in einem vorhandenen weitergeschrieben wird; auch dass die Überschrift nicht mitkopiert wird, das war nur für's Beispiel, damit erkennbar wird, was wo hingehört; die Spalten, aus denen die Daten geholt werden, bleiben fest, die Spaltennrn. können also fix bleiben; der jeweilige Startpunkt in der Ergebniszeile ändert sich, aber den kann ich anpassen, ich denke, sogar, dass ich das selber recht variabel gestalten kann, je nachdem wie weit die Zeile bisher geht; und ich denke, auch den "Zeilenumbruch", wenn eine Din A 4 Seite quer am Ende ist, krieg ich hin, den nötigen Zähler kann ich integrieren. Danke für diese tolle Vorlage!!
Lediglich bei 3 Zeilen gegen Ende Deines Codes bleibt's hängen, sind das vielleicht Anweisungen, die xl2003 noch nicht hat:
- .FormatConditions(.FormatConditions.Count).SetFirstPriority
- .TintAndShade = 0
- .FormatConditions(1).StopIfTrue = True
Aber auch ohne das kann ich gut leben, da geht's lediglich noch ums Format, das lös ich mir schon irgendwie; das Wichtigste, die richtige Aneinanderreihung der Datumsangaben, läuft perfekt.
Vielen Dank auf jeden Fall und Grüße
Franz

Anzeige
auch nur eine INDEX()-Formel, aber Monster-...
19.02.2014 18:05:09
der
Hallo Franz W,
... allerdings wäre nachfolgende Formel in XL 2007/2010 fast 50% kürzer und schneller.
Meine Formel setzt momentan nur voraus, dass die Datumswerte in der von Dir angegeben Spalten stehen. Zwischen den Spalten kann stehen was will. In der Zieltabelle ist auch egal welche Texte in A3:A5 stehen, es dürfen nur keine reine Zahlenwerte dort stehen (was auch nicht der Fall sein sollte)
Dann in B3 folgende Formel (für XL2003) die Du nach rechts und unten kopieren kannst. Dein zus. spezif. Wunsch, dass max. 60 Spalten gefüllt werden, könntest Du mit entsprechenden Drucklayout (wiederholende Spalten links) abfangen. Unabhängig davon würde ich nur Datumswerte ab/nach einem von Dir vorgegebenen Datum (z.B. HEUTE() -##) listen lassen. Auch das könnte in der Formel noch untergebracht werden. Zu evtl. Anpassungen in den nächsten Tagen komme ich wahrscheinlich nicht.
 ABCDEFGHI
31. Gruppe  10.1.  22.1.  
42. Gruppe7.1.  14.1.21.1. 26.1.28.1.
53. Gruppe 8.1.    26.1. 

Formeln der Tabelle
ZelleFormel
B3{=WENN(ISTFEHLER(VERGLEICH(KKLEINSTE(WENN(ISTZAHL(VERGLEICH(SPALTE($T:$AD); {20;26;30};))*(Tab_1!$T$4:$AD$99<>""); Tab_1!$T$4:$AD$99); ANZAHL($A$3:A$5)+1); INDEX(Tab_1!$T$4:$AD$99;;INDEX({1;7;11};ZEILE(A1))); )); "";INDEX(Tab_1!$T:$AD;VERGLEICH(KKLEINSTE(WENN(ISTZAHL(VERGLEICH(SPALTE($T:$AD); {20;26;30};))*(Tab_1!$T$4:$AD$99<>""); Tab_1!$T$4:$AD$99); ANZAHL($A$3:A$5)+1); INDEX(Tab_1!$T$4:$AD$99;;INDEX({1;7;11};ZEILE(A1))); )+3;INDEX({1;7;11};ZEILE(A1))))}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Werner
.. , - ...

Anzeige
AW: auch nur eine INDEX()-Formel, aber Monster-...
19.02.2014 21:37:52
Franz
Hallo Werner,
ich staun ja immer wieder über die Konstrukte, zu denen Ihr fähig seid: es läuft (musste nur Tab_1 gegen Tabelle1 auswechseln - hab's geschafft :-))). Ich lass das jetzt erstmal sich setzen, experimentier erstmal in der Beispieldatei - und werd sehen, wie ich's umsetzen kann.
Vielen Dank mal wieder und Grüße
Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige