Excel: Bereich wo ID = X ist in eine Zeile parsen bzw. einen vertikalen Block horizontal ausrichten, wenn eine Variable erfüllt ist?

... komplette Frage anzeigen

3 Antworten

Also sooo kompliziert ist das nun auch wieder nicht,

es geht mit 4 mäßig langen xl-Formeln (die drei längeren  unterscheiden sich nur in EINER SPALTE:

  1. G2: =WENN($F2=INDEX($D:$D;VERGLEICH($F2;$D:$D;0)+GANZZAHL((SPALTE()-3)/4)-1);INDEX($E:$E;VERGLEICH($F2;$D:$D;0)+GANZZAHL((SPALTE()-3)/4)-1);"")
  2. H2: =WENN($F2=INDEX($D:$D;VERGLEICH($F2;$D:$D;0)+GANZZAHL((SPALTE()-3)/4)-1);INDEX($C:$C;VERGLEICH($F2;$D:$D;0)+GANZZAHL((SPALTE()-3)/4)-1);"")
  3. i2: =WENN($F2=INDEX($D:$D;VERGLEICH($F2;$D:$D;0)+GANZZAHL((SPALTE()-3)/4)-1);INDEX($B:$B;VERGLEICH($F2;$D:$D;0)+GANZZAHL((SPALTE()-3)/4)-1);"")
  4. J2: =TEILERGEBNIS(9;H2:I2)  <hier war ich nicht sicher, ob Du die Einzelsummen willst, deshalb habe ich Teilergebnis genommen, auch ganz rechts dann Teilergebnis(9;H2:..2)
  • Diesen Formel-Viererblock nach rechts kopieren sooft benötigt *), 
  • dann alles runterziehen.

Die Formeln sind Positionssensitiv auf die Spalte, d.h., fügt man irgendwo (eine) Spalte(n) ein, muss man Ganzzahl((Spalte()-3)/4)-1 anpassen (alles andere passt sich automatisch an). Es ist sinnvoll, zB die Gesamtsummenspalte vor G zu ziehen, dann

+GANZZAHL((SPALTE()-4)/4)-1

wobei sich das hier bei EINER Spalte noch gar nicht bemerkbar macht (weil die Teilergebnis-Spalte selbst nicht darauf zugreift, aber als "Puffer" wirkt), bei zweien aber schon.

*) das ist rauszukriegen mit {=Max(Zählenwenn(D:D;D:D))} (also Matrixformel), diese Formel verzögert aber erfahrungsgemäß die Berechnungen, deshalb nach Gebrauch wieder löschen.

Lese gerade, dass du Dein Problem schon anderweitig gelöst hast, na ja, da wäre ich wohl besser eine Stunde früher ins Bett gegangen... :- (

 Ach so, falls ungeordnet, den Bereich B2:Ex -und nur den- vorher sortieren

Antwort bewerten Vielen Dank für Deine Bewertung

Ich würde so etwas probieren, mit einem Makro zu lösen:

Option Explicit

Sub Serialisieren() Dim rID As Range Dim rIDSuche As Range Dim ID As Integer Dim iColHaendler As Integer Dim iZeileTemp As Integer
Set rID = Range("F2") ID = rID.Value While IsNumeric(ID) And ID > 0 iColHaendler = 7 Set rIDSuche = Range("D:D").Find(ID) While Not rIDSuche Is Nothing Cells(rID.Row, iColHaendler).Value = rIDSuche.Offset(0, 1).Value Cells(rID.Row, iColHaendler + 1).Value = rIDSuche.Offset(0, -2).Value Cells(rID.Row, iColHaendler + 2).Value = rIDSuche.Offset(0, -1).Value Cells(rID.Row, iColHaendler + 3).Value = rIDSuche.Offset(0, -2).Value + rIDSuche.Offset(0, -1).Value
iColHaendler = iColHaendler + 4 iZeileTemp = rIDSuche.Row Set rIDSuche = Range("D:D").FindNext(rIDSuche) ' Vermeiden, dass die Suche von vorne beginnt If Not rIDSuche Is Nothing Then _ If iZeileTemp > rIDSuche.Row Then _ Set rIDSuche = Nothing Wend
Set rID = rID.Offset(1) ID = rID.Value Wend End Sub
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Jackie251
12.10.2016, 11:11

info: das ding läuft Amok, wenn es zu einer ID nur einen Eintrag gibt (dann wird dieser Eintrag mehrfach wiederholt)
meine VBA Kenntnisse sind zu gering um dagegen schnell Abhilfe zu erkennen.

1

Das ist ja eine Excelvergewaltigung par excellence
Mehrfachtreffer aus einer Liste mit optionalem Vorkommen...
Sowas gehört in eine Datenbank, denn es übersteigt die in Excel vorhandenen Fehlerprüfungen und Nachverfolgbarkeit....
Machbar ist es, ob allerdings Praxistauglich sei dahingestellt.

Frage zu Spalte D:
im Beispiel liegt diese sortiert vor, ist das tatsächlich so, oder könnte auch in tieferen Spalten nochmals die 1 kommen?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Kacktusman
12.10.2016, 12:42

Hast recht, das ganze ist auch Resultat aus ner mySQL-Datenbank. Haben auch eine andere Möglichkeit bereits gefunden im Programmcode das sauberer zu exportieren, sodass man nicht mehr in Excel aufräumen muss

0

Was möchtest Du wissen?