Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Daten kopieren und gespiegelt wieder einfügen

Daten kopieren und gespiegelt wieder einfügen
13.09.2016 19:13:49
Dirk
Hallo Profis,
brauche mal eure Hilfe.
Ich habe eine Tabelle, in der ich in 4 Spalten untereinander Daten eingebe. Diese Daten werden dann in einer anderen Tabelle (gleicher Aufbau) ausgegeben. Jetzt kommt das Problem: Die Daten in der Zieltabelle sollen nicht genauso wie in der Quelltabelle angeordnet werden, sondern spiegelverkehrt (nicht sortieren); das was also in der Quelltabelle unten steht, soll in der Zieltabelle oben stehen.
Wie kann ich das realisieren?
Danke im Voraus
Gruß
Dirk
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
An welcher Ebene soll gespiegelt wdn, ...
13.09.2016 20:53:23
Luc:-?
…Dirk?
Wie du es beschreibst wäre das die horizontale (_⇕_ = oben ↔ unten). Es gäbe noch die vertikale (|⇔| = links ↔ rechts) und die beiden diagonalen, wobei \↙↗\ (links-unten ↔ rechts-oben) der Wirkung der XlFkt MTRANS entspräche, /↖↘/ (rechts-unten ↔ links-oben) aber eine gegenteilige hätte. Das alles wäre mit meiner unveröffentlichten UDF Reflect zu erreichen. Die Veröffentli­chung einer solchen UDF (mit 2 weiteren Optionen, Autor PH) findest du im Tutorial von www.online-excel.de, wahrscheinlich unter der FktsBeschreibung von MTRANS/Transpose. Der ganze QuellBereich müsste dann im HauptArgument der UDF angegeben wdn, die in der ZielTabelle als plurale (mehrzellige) MatrixFml einzutragen wäre. Anschld kann der ZielBereich ja kopiert und mit den Ergebnis­Werten überschrieben wdn.
Gruß, Luc :-?
Besser informiert mit …
Anzeige
Das geht hier natürlich auch, ...
13.09.2016 21:09:59
Luc:-?
…Luschi,
wäre aber nicht anwendbar, wenn zuvor noch mit dem ganzen, derart transponierten Bereich irgendetwas gemacht wdn müsste. U.a. dafür haben dann PH und ich unsere UDFs geschrieben…
Gruß, Luc :-?
Anzeige
AW: An welcher Ebene soll gespiegelt wdn, ...
14.09.2016 09:32:51
Dirk
Hallo Luschi,
habe Deinen Anhang ausprobiert. Ist eigentlich das was ich brauche. Folgendes Problem habe ich aber noch. In der Quelldatei stehen die Daten in Spalte A7-H31 (in den Spalten D-H sind jeweils verbundene Zellen). In der Zieltabelle sollen die Daten in den gleichen Spalten stehen. Wenn ich Deine Formel in die Zieltabelle übernehme und meine Bezüge anpasse, bekomme ich nur einen #NV Fehler.
Gruß
Dirk
Anzeige
AW: An welcher Ebene soll gespiegelt wdn, ...
14.09.2016 12:53:26
Luschi
Hallo Dirk,
dann stell doch mal ein kleines Musterbeispiel mit Deinen Gegebenheiten bereit.
Aber verbundene Zellen sind eigentlich der Feind jeder Excel-Formel.
In Vba kann man dagegen ganz gut damit umgehen.
Gruß von Luschi
aus klein-Paris
AW: An welcher Ebene soll gespiegelt wdn, ...
14.09.2016 13:05:11
Daniel
Hi
müsste eigentlich so funktioneren, wenn die Daten nur in umgekehrter Reihenfolge angezeigt werden sollen:
diese Formel muss in die linke obere Zelle der Zieldatei, dann die Formel nach rechts und nach unten ziehen:
=Index(Tabelle1!$A$7:$H$31;26-Zeile(A1);Spalte(B1))
die 26 ergibt sich aus der Anzahl der Zeilen des Zellbereichs (7-31 = 25) + 1
das kannst du auch dynamisch berechnen lassen, dann passt sich die Formel an wenn du Zeilen einfügst oder löschst
=Index(Tabelle1!$A$7:$H$31;Zeilen(Tabelle!$A$7:$H$31)+1-Zeile(A1);Spalte(B1))
Gruß Daniel
Anzeige
AW: An welcher Ebene soll gespiegelt wdn, ...
14.09.2016 16:17:48
Dirk
Hallo Daniel,
zuerst einmal ist das schon mal gut. Eines habe ich allerdings vergessen zu erwähnen. Die Quelltabelle ist nicht immer komplett gefüllt. Demanch würden die Inhalte der Zieltabelle am Tabellenende erscheinen. Diese sollen aber dann mit dem letzten Eintrag der Quelltabelle, in der der Zeile der Zieltabelle anfangen. Habe das in einem Beispiel mal abgebildet.
https://www.herber.de/bbs/user/108180.xlsx
Gruß
Dirk
Anzeige
AW: An welcher Ebene soll gespiegelt wdn, ...
14.09.2016 17:00:15
Daniel
Hi
dann probier mal das in A2 der Zieltabelle.
=WENN(ZEILE()>(ANZAHL2(Quelltabelle!A:A));"";INDEX(Quelltabelle!A:A;ANZAHL2(Quelltabelle!A:A)-ZEILE() +2)) 
das berücksichtigt jetzt den Füllgrad der der Quelltabelle, wobei diese lückenlos gefüllt sein muss (keine Leerzellen zwischen drin)
Gruß Daniel
Anzeige
AW: An welcher Ebene soll gespiegelt wdn, ...
17.09.2016 17:14:07
Dirk
Hallo Daniel,
ich habe Deine Formel intensiv getestet, klappt in der Beispieldatei echt super. Problem, sobald ich eine weitere Tabellenüberschrift einbaue, werden Werte aus der Quelltabelle in der Zieltabelle abgeschnitten. Warum..., keine Ahnung.
Vielleicht hast Du dafür auch noch eine Lösung.
https://www.herber.de/bbs/user/108231.xlsx
Danke im Voraus.
Gruß
Dirk
Anzeige
AW: An welcher Ebene soll gespiegelt wdn, ...
17.09.2016 22:34:29
Daniel
Hi
die Formel benötigt zum richtigen Funktionieren die Zeilennummer der letzen befüllten Zeile der Tabelle.
Die Einfache Funktion ANZAHL2 liefert nur dann die den richtigen Wert, wenn in der verwendeten Spalte alle Zellen befüllt sind und keine Leerzellen vorkommen.
Du ermittelst die Anzahl in Spalte D und dort ist die erste Zeile leer.
Bei Zellverbünden ist nur die obere Linke Zelle leer, alle anderen Zellen sind leer.
Wenn die Anzahl der Leerzellen in der Spalte bekannt ist (Überschriftenzeilen), dann kannst du einfach die Anzahl der Leerzellen zum gesamtergebnis hinzuadddieren.
Ist sie nicht bekannt, müsstest du die lezte befüllte Zeile in der Spalte auf einem anderen Weg ermitteln, hier steht wie:
http://www.excelformeln.de/formeln.html?welcher=48
Gruß Daniel
Anzeige
AW: An welcher Ebene soll gespiegelt wdn, ...
18.09.2016 13:36:14
Dirk
Hallo Daniel,
ich habe mal die beiden Originaltabellen beigefügt. Wie muss ich die leeren Zellen hinzuaddieren?

Die Datei https://www.herber.de/bbs/user/108242.xlsm wurde aus Datenschutzgründen gelöscht


Danke im Voraus
Gruß
Dirk
Anzeige
AW: An welcher Ebene soll gespiegelt wdn, ...
18.09.2016 19:27:19
Michael
Hi,
Excel weigert sich, verbundene Zellen "direkt" zu sortieren, also schreibe ich die Daten erst Mal woanders hin, sortiere sie, und dann kommen sie an die richtige Position:
Sub holenUndSortieren()
Dim maxZ&
Dim a
With Sheets("Quelltabelle")
maxZ = .Range("C" & .Rows.Count).End(xlUp).Row
a = .Range("A7:D" & maxZ)
End With
With Sheets("Zieltabelle")
.Range("K7").Resize(UBound(a), 4) = a
.Range("K7:N" & maxZ).Sort .Range("M7"), xlDescending
a = .Range("K7").Resize(UBound(a), 4)
.Range("K7").Resize(UBound(a), 4).Clear
.Range("A7").Resize(UBound(a), 4) = a
End With
End Sub
Schöne Grüße,
Michael
Anzeige
AW: An welcher Ebene soll gespiegelt wdn, ...
18.09.2016 20:01:37
Dirk
Hallo Michael,
ab der Zeile ".Range("K7").Resize(UBound(a), 4) = a" erhalte ich einen Laufzeitfehler 40036.
Gruß
Dirk
Datei anbei
19.09.2016 16:32:44
Michael
Hi,
den Fehler kann ich (mit xl2013) nicht nachvollziehen.
Hier mal die Datei: https://www.herber.de/bbs/user/108262.xlsm
Schöne Grüße,
Michael
Anzeige
Mit der von mir eingangs empfohlenen ...
19.09.2016 19:57:09
mir
…Vorgehensweise hätte eine plurale MatrixFml gereicht, Dirk,
und du hättest außerdem eine nützliche UDF für ZellFml-Einsatz mehr:
G3:J21: {=WENN(ZEILE()-2>ZEILEN(INDIREKT("Quelltabelle!A3:D"&MAX(WENN(C3:C21"";ZEILE(C3:C21)))));"";WENN(Reflect(INDIREKT("Quelltabelle!A3:D"&MAX(WENN(C3:C21"";ZEILE(C3:C21))));"_")="";"";Reflect(INDIREKT("Quelltabelle!A3:D"&MAX(WENN(C3:C21"";ZEILE(C3:C21))));"_")))}
Die Ergebnisse kannst du anschließend kopieren und als Werte über die Fmln oder woandershin speichern (ggf die Leerzellen nochmal löschen) und das Format des Originals übertragen. Für die bisher unver­öffent­lichte UDF Reflect kannst du ja PHs UDF aus dem Online-Excel-Tutorial einsetzen. Findest du wohl im Kapitel zu MTRANS.
Gruß, Luc :-?
Anzeige
Oha, dann habe ich mich wohl gleich doppelt ...
20.09.2016 01:51:05
Luc:-?
…ungenau erinnert, Michael;
Das sind ja SubProzeduren und keine UDFs und außerdem von Nepumuk. Und ich hätte schwören können, eine UDF von PH mit gleich 6 Möglichkeiten gesehen zu haben (auf XLAM.ch ist wohl eine UDF, allerdings nur zum Ersatz von MTRANS). Dann muss ich wohl doch mal Reflect rausrücken (2 kennen sie ja schon):
Public Enum cxMxRefLevel: cxDiagDown: cxDiagUp: cxVert: cxHoriz: End Enum
Public Enum xlTriState: xlTrue = -1: xlFalse: xlCTrue: End Enum

Rem Spiegelt quadrat Matrix an Diagonalen oder AnfangsReihen bzw transponiert
'   nichtquadr Matrix analog; enthält PgmTeile, die nur b.Aufruf aus SubProz,
'   nicht in ZellFmln relevant wdn! Benötigt Enums cxMxRefLevel u.xlTriState!
'   1zl/sp Matrizz wdn in 1dim Vektt gewandelt: hV={1.2.3}, vV={{1};{2};{3}}!
'   Intuitive Symbole f.Arg2 lt Const txRefEb neben cxMxRefLevel=0…3 möglich!
'   Vs1.3 -LSr -cd:20130504 -1pub:20160920 -lupd:20140207n
Function Reflect(ByVal Bezug, Optional ByVal ReflEbene)
Const txRefEb$ = "d dd du v h q qf qs s w \ \ / | _ d df ds"
Dim isRange As Boolean, isElVec As xlTriState, refEb As cxMxRefLevel, _
cn As Long, cx As Long, rn As Long, rx As Long, tmLim(1, 1), _
avBez, elBez, elVec, tmVecL, tmVecU As Variant
On Error GoTo fx
If Not IsMissing(ReflEbene) Then
If IsNumeric(ReflEbene) Then
refEb = Abs(ReflEbene) Mod 4
Else: refEb = WorksheetFunction.Match(ReflEbene, Split(txRefEb), 0) - 1
If refEb  UBound(tmVecU, 1) Then
On Error GoTo fx: Err.Raise xlErrRef
Else: On Error GoTo fx
isElVec = Abs(LBound(tmVecL, 2) = UBound(tmVecL, 2))
If isElVec = xlFalse Then Err.Raise xlErrRef
rn = UBound(tmVecL, 1) + 1 - LBound(tmVecL, 1)
End If
Else: rn = 1
End If
ElseIf tmLim(0, 1) = tmLim(1, 1) Then
rn = tmLim(1, 0) + 1 - tmLim(0, 0)
If IsArray(tmVecL) Or IsArray(tmVecU) Then
On Error Resume Next
If IsError(LBound(tmVecL, 2)) And IsError(LBound(tmVecU, 2)) Then
On Error GoTo fx
isElVec = CInt(UBound(tmVecL) = UBound(tmVecU))
If isElVec = xlFalse Then Err.Raise xlErrRef
cn = UBound(tmVecL) + 1 - LBound(tmVecL)
Else: On Error GoTo fx: Err.Raise xlErrRef
End If
Else: cn = 1
End If
Else
If IsArray(Bezug(tmLim(0, 0), tmLim(0, 1))) Or _
IsArray(Bezug(tmLim(1, 0), tmLim(1, 1))) Then Err.Raise xlErrRef
cn = tmLim(1, 1) + 1 - tmLim(0, 1): rn = tmLim(1, 0) + 1 - tmLim(0, 0)
End If
Else: cn = Bezug.Columns.Count: rn = Bezug.Rows.Count
End If
If refEb  Switch(isElVec = xlCTrue, rn, _
isElVec = xlTrue, cn) + 1 - LBound(elBez) Then Exit For
ElseIf CBool(isElVec) Or IsArray(elBez) Then
Exit For
End If
End If
If CBool(isElVec) Then
If isElVec = xlTrue Then cx = 0 Else rx = 0
For Each elVec In elBez
GoSub mx
If isElVec = xlTrue Then cx = cx + 1 Else rx = rx + 1
Next elVec
If isElVec = xlCTrue Then cx = cx + 1 Else rx = rx + 1
Else
mx:         Select Case refEb
Case cxDiagDown: avBez(cx, rx) = elBez
Case cxDiagUp:   avBez(cn - cx - 1, rn - rx - 1) = elBez
Case cxVert:     avBez(rx, cn - cx - 1) = elBez
Case cxHoriz:    avBez(rn - rx - 1, cx) = elBez
End Select
If CBool(isElVec) Then Return
If isRange Then
cx = (cx + 1) Mod cn: rx = rx - CInt(cx = 0)
Else: rx = (rx + 1) Mod rn: cx = cx - CInt(rx = 0)
End If
End If
Next elBez
If IsEmpty(elBez) Then Reflect = avBez Else Err.Raise xlErrRef
On Error Resume Next
If IsError(LBound(avBez, 2)) Then
Err.Number = 0
Else: On Error GoTo fx: cx = 0: rx = 0
If UBound(avBez, 1) = 0 And UBound(avBez, 2) > 0 Then
ReDim avBez(UBound(avBez, 2) - LBound(avBez, 2))
For Each elBez In Reflect
avBez(cx) = elBez: cx = cx + 1
Next elBez
ElseIf UBound(avBez, 1) > 0 And UBound(avBez, 2) = 0 Then
ReDim avBez(UBound(avBez, 1) - LBound(avBez, 1)), elVec(0)
For Each elBez In Reflect
elVec(0) = elBez: avBez(rx) = elVec: rx = rx + 1
Next elBez
End If
Reflect = avBez
End If
fx: If CBool(Err.Number) Then
Select Case Err.Number
Case Is  xlErrNA:   Reflect = CVErr(xlErrNA)
Case Else:           Reflect = CVErr(Err.Number)
End Select
End If
End Function
Hätte ich auch noch die beiden anderen Möglichkeiten (mit gleichem Ergebnis → völlige Umkehr der Matrix) einbauen wollen, hätten sie die Intuitiv-Symbole + bzw ×. Aber das hielt ich für überflüssig, da man dann auch 2× Reflect anwenden kann.
Gruß, Luc :-?
Anzeige
Ergänzung: Es gibt nicht 2, sondern 6 ...
20.09.2016 22:25:20
Luc:-?
…Kombinationsmöglichkeiten, von denen immer 2 das gleiche Ergebnis haben. Das war auch ein Grund, das nicht mit in die UDF einzubauen.
Die Diagonalen als Spiegelebenen gelten streng genommen nur für quadratische Matrizen. Im Falle von anderen rechteckigen Matrizen ist der Bezugspkt für cxDiagDown=0 der linke oberste und für cxDiagUp=1 der rechte unterste Eckwert.
Luc :-?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Daten kopieren und spiegelverkehrt einfügen in Excel


Schritt-für-Schritt-Anleitung

  1. Daten vorbereiten: Stelle sicher, dass deine Quelldaten in einer Excel-Tabelle korrekt angeordnet sind. Die Daten sollten in einem zusammenhängenden Bereich ohne leere Zellen vorliegen.

  2. Formel zur Spiegelung nutzen: Um die Daten in umgekehrter Reihenfolge in eine andere Tabelle einzufügen, kannst du die folgende Formel in der Zieltabelle verwenden:

    =INDEX(Tabelle1!$A$7:$H$31;26-ZEILE(A1);SPALTE(B1))

    Hierbei ist 26 die Anzahl der Zeilen im Bereich A7:H31 plus eins. Du kannst die Formel auch dynamisch gestalten:

    =INDEX(Tabelle1!$A$7:$H$31;ANZAHL2(Tabelle1!A:A)+1-ZEILE(A1);SPALTE(B1))
  3. Formel nach unten und rechts ziehen: Nachdem du die Formel in die obere linke Zelle der Zieltabelle eingegeben hast, ziehe sie nach rechts und nach unten, um die gesamten Daten zu spiegeln.

  4. Leere Zellen handhaben: Wenn deine Quelldaten nicht vollständig gefüllt sind, solltest du die Formel anpassen, um leere Zellen zu berücksichtigen. Hier eine angepasste Formel:

    =WENN(ZEILE()>(ANZAHL2(Quelltabelle!A:A));"";INDEX(Quelltabelle!A:A;ANZAHL2(Quelltabelle!A:A)-ZEILE()+2))

Häufige Fehler und Lösungen

  • #NV Fehler: Dieser Fehler tritt häufig auf, wenn die Daten in der Quelltabelle nicht den Voraussetzungen entsprechen (z.B. verbundene Zellen oder leere Zeilen). Achte darauf, dass alle Daten korrekt formatiert sind.

  • Laufzeitfehler 40036: Dieser Fehler kann auftreten, wenn du versuchst, auf einen Bereich zuzugreifen, der nicht existiert. Vergewissere dich, dass die benannten Bereiche in deiner Formel korrekt sind.

  • Fehler durch verbundene Zellen: Verbundene Zellen können Probleme verursachen. Es ist ratsam, diese zu vermeiden oder bei der Verwendung von VBA zu berücksichtigen.


Alternative Methoden

  • VBA-Makro: Eine andere Möglichkeit zum Spiegeln von Daten ist die Verwendung eines VBA-Makros. Hier ein einfaches Beispiel:

    Sub Spiegeln()
       Dim maxZ As Long
       Dim a
       With Sheets("Quelltabelle")
           maxZ = .Range("C" & .Rows.Count).End(xlUp).Row
           a = .Range("A7:D" & maxZ)
       End With
       With Sheets("Zieltabelle")
           .Range("A7").Resize(UBound(a), 4) = Application.Transpose(a)
       End With
    End Sub
  • UDF (benutzerdefinierte Funktion): Du kannst auch eine benutzerdefinierte Funktion (UDF) schreiben, um die Daten zu spiegeln. Diese Funktion kann dann in den Zellen wie eine normale Formel verwendet werden.


Praktische Beispiele

  1. Horizontales Spiegeln: Um eine Excel-Tabelle horizontal zu spiegeln, kannst du die TRANSPOSE-Funktion verwenden:

    =TRANSPOSE(Tabelle1!$A$1:$D$4)
  2. Vertikales Spiegeln: Wenn du eine Spalte spiegeln möchtest, nutze die INDEX-Funktion in Kombination mit ZEILE():

    =INDEX(Tabelle1!A:A;ANZAHL2(Tabelle1!A:A)+1-ZEILE(A1))
  3. Diagonales Spiegeln: Für diagonales Spiegeln kannst du eine Kombination der INDEX- und TRANSPOSE-Funktionen verwenden.


Tipps für Profis

  • VBA nutzen: Wenn du regelmäßig Daten spiegeln musst, ist die Erstellung eines VBA-Skripts eine zeitsparende Lösung.

  • Dynamische Bereiche: Verwende dynamische Bereiche (z.B. mit OFFSET oder INDEX), um sicherzustellen, dass deine Formeln auch bei Änderungen in der Tabelle weiterhin funktionieren.

  • Datenvalidierung: Achte darauf, dass die Quelldaten korrekt und vollständig sind, um Fehler in der Zieltabelle zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich Daten in umgekehrter Reihenfolge einfügen?
Verwende die INDEX-Funktion zusammen mit ANZAHL2, um die Daten dynamisch zu spiegeln.

2. Funktioniert das auch mit verbundenen Zellen?
Verbundenen Zellen können Probleme verursachen. Es ist besser, diese zu vermeiden oder spezifische VBA-Lösungen zu verwenden.

3. Gibt es eine einfache Möglichkeit, Daten zu spiegeln, ohne VBA zu verwenden?
Ja, du kannst die INDEX- und TRANSPOSE-Funktionen in Kombination nutzen, um Daten ohne VBA zu spiegeln.

4. Wie gehe ich mit leeren Zellen in meiner Quelltabelle um?
Achte darauf, dass du deine Formeln anpasst, um leere Zellen zu berücksichtigen, indem du die WENN-Funktion verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige