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

Zellen einrücken gemäß Überschriften

Zellen einrücken gemäß Überschriften
03.10.2018 20:46:56
Toni
Hallo Zusammen,
im Beispiel anbei sollen die Zellen unter die Überschriften verschoben werden, die den selben Wert aufweisen. Leider kommt eine Fehlermeldung, die ich mir nicht erklären kann.
https://www.herber.de/bbs/user/124395.xlsm
Für Hilfe bin ich dankbar.
Grüße

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen einrücken gemäß Überschriften
03.10.2018 20:51:04
onur
Die FOR-NEXT-Schleife, die zuletzt geöffnet wurde, muss ZUERST geschlossen werden
   Next j
Next i

AW: Zellen einrücken gemäß Überschriften
03.10.2018 21:14:25
Toni
hi onur,
wieder was gelernt, der code läuft jetzt schonmal durch. Danke!
allerdings verschiebt er mir jetzt alles in die falsche richtung, nach links. mit dem hier:
.Cells(i, j) = .Cells(i, j + 1)
also versuch ich sowas:
.Cells(i, j) = .Cells(i, j).Offset(0, -1)
oder so:
.Cells(i, j) = .Cells(i, j + 1)
hilft alles nichts ... Ergebnis ist der debugger ...
AW: Zellen einrücken gemäß Überschriften
03.10.2018 21:15:48
Toni
das 2. 'oder so' war natürlich:
.Cells(i, j) = .Cells(i, j - 1)
Anzeige
AW: Zellen einrücken gemäß Überschriften
03.10.2018 21:23:29
Daniel
Hi
warum immer nur um eine Zelle verschieben?
platziere die Werte doch gleich an die richtige Stelle.
der Versatzwert ergibt sich aus der Differenz zwischen dem Datum in der Zelle und dem Datum in Zeile 1 (sofern dort die Datumswerte lückenlos stehen)
wenn man davon ausgehen kann, dass die Zielzelle immer frei ist, reicht dieser Code:
Sub ZellenEinrücken2()
Dim Zelle As Range
For Each Zelle In Range(Cells(3, 2), Cells.SpecialCells(xlCellTypeLastCell)).SpecialCells( _
xlCellTypeConstants, 1)
Zelle.Cut Zelle.Offset(0, Zelle.Value - Cells(1, Zelle.Column).Value)
Next
End Sub
wenn man damit rechnen muss, dass die Zielzelle durch einen anderen Wert, der noch nicht verschoben wurde belegt ist, müsste man das vorher prüfen, der Code wird dann aufwendiger.
Daher hier nochmal eine Lösungsvariante mit Arrays, bei der dieses Problem nicht auftritt, weil das Ergebnis in ein zunächst leeres Array geschrieben wird.
Der Trick hierbei ist, dass im Ergebnisarray die Datumswerte als Spaltenindex verwendet werden, so dass man das Ziel nicht aufwendig suchen muss, sondern es sich direkt aus dem Wert ergibt:
Sub ZelleEinrücken3()
Dim arrDaten
Dim arrErg
Dim z As Long, s As Long
Dim rng As Range
Set rng = Range(Cells(3, 1), Cells(3, 1).End(xlDown)).Resize(, Cells(1, 1).End(xlToRight). _
Column)
arrDaten = rng.Value
ReDim arrErg(1 To UBound(arrDaten, 1), Cells(1, 1).Value To Cells(1, 1).End(xlToRight).Value)
For z = 1 To UBound(arrDaten, 1)
For s = 1 To UBound(arrDaten, 2)
If IsDate(arrDaten(z, s)) Then
arrErg(z, arrDaten(z, s)) = arrDaten(z, s)
End If
Next
Next
rng.Value = arrErg
End Sub
Gruß Daniel
Anzeige
AW: Zellen einrücken gemäß Überschriften
03.10.2018 21:30:22
Toni
.. ja so ist natürlich auch möglich ^^ - ich bedanke mich vielmals, genau was ich suche. Das Dillema eines etwaigen Überschreibens der Werte rechts hatte ich auf dem Schirm. Das kann aber in diesem Fall nicht vorkommen. Trotzdem freu ich mich natürlich über die 2. Variante, zumal ich da wohl heut noch einiges studieren werd müssen.
Vielen Dank,Daniel und Onur
Grüße
AW: Zellen einrücken gemäß Überschriften
03.10.2018 22:20:49
Toni
.. also an welcher Stelle hier die Prüfung ob Überschriftwert gleich Zellwert ist, erschließt sich mir nicht ... und überhaupt... Chapeau - ich vermute im Redim, weil da die Werte der Überschriften erscheinen, aber wie nun genau ...?
Ich offenbare mal eben, was ein Laie "erkennt", wenn er sowas liest:
Sub ZelleEinrücken3()
Dim arrDaten
Dim arrErg
Dim z As Long, s As Long
Dim rng As Range
Set rng = Range(Cells(3, 1), Cells(3, 1).End(xlDown)).Resize(, Cells(1, 1).End(xlToRight). _
Column) 'aufblähen gesamt Bearbeitungsbereich, zuerst nach unten, dann nach rechts analog ü _
berschriften
arrDaten = rng.Value 'array containert Werte des Bereichs eben
ReDim arrErg(1 To UBound(arrDaten, 1), Cells(1, 1).Value To Cells(1, 1).End(xlToRight).Value)
' zeilenbereich von arrdaten nach unten und spaltenbereich der überschriften nachrechts -->  _
warum muss oben resize, wenn hier nur die 1. spalte von arrDaten? Redim weil wird langsam immer fetter durch werte unten?
For z = 1 To UBound(arrDaten, 1) ' zelle
For s = 1 To UBound(arrDaten, 2) ' rechts davon
If IsDate(arrDaten(z, s)) Then ' wenn beide Datumsformat --> reicht nicht z aus?
arrErg(z, arrDaten(z, s)) = arrDaten(z, s) ' schwupps, da kommt man ja im leben  _
nicht drauf, wurde hier jetzt s das z untergejubelt? wie hinterlistig
End If
Next
Next
rng.Value = arrErg 'Ablage in Bearbeitungsbereich: Haken dran
End 

Sub

Anzeige
AW: Zellen einrücken gemäß Überschriften
03.10.2018 22:31:19
Daniel
naja das ist hier schon ein spezieller Trick, der nur aufgrund einer besonderen gegebenheiten funktioniert.
1. deine Überschriften, denen die Werte zugeordnet werden sollen, sind Datumswerte.
Datumwerte sind in Excel aber auch nur einfache normale Zahlen.
Deine Werte in Zeile 1 bilden eine lückenlose Zahlenreihe.
2. die Array-Indizierung muss nicht zwingend mit dem Wert 1 oder 0 beginnen. Man für den Array-Index jeden beliegen Ganzzahlbereich von x bis y einstellen.
ich habe also für das Ergebnisarray festgelegt, das die Spaltenindizes den Datumswerten aus der Zeile 1 entsprechen.
Damit ist jeder Datumswert aus der Tabelle gleichzeitig sein eigener Spaltenindex und ich brauche daher nichts suchen, sondern kann den Wert gleich an seine richtige Positon schreiben (weil eben der Wert gleichzeitig der Spaltenindex ist).
wie gesagt, ist eine spezielle Lösung die hier halt nur funktioniert, weil deine Spaltenüberschrifen eine lückenlose aufsteigende Ganzahlreihe bilden, die man auch als Array_Index verwenden kann.
Gruß Daniel
Anzeige
AW: Zellen einrücken gemäß Überschriften
03.10.2018 22:41:45
Toni
aha, ok, das versuche ich mir mitzunehmen. Danke für die Erklärung. Nichtsdestotrotz werde ich mir das morgen bei Lichte erneut zu Gemüte führen in der Hoffnung, dass was hängen bleibt :))
Guts NÄchtle!!
Grüße

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige