Frage von FabiL97, 33

Nachrückverfahren in Excel programmieren?

Hey Leute, wie programmiere ich ein "Nachrückverfahren" in Microsoft Excel?

Man nehme an, dass man 4 Spalten in einer Reihe hat. Es steht aber nur in den Spalten 2 & 4 etwas drin. Wie schaffe ich es nun, dass die Spalten 2 & 4 auf die Spalten 1 & 2 nachrücken und 3 & 4 am Ende leer bleiben? (Sollte wenn möglich mit jeder Spaltenanordnung funktionieren)

Habe es bis jetzt mit IF-Verschachtelungen versucht, komme aber nicht weiter.

Danke im Voraus

Antwort
von PWolff, 9

Mit Hilfszeilen/Hilfsspalten einfach.

-----

Daten in einer Spalte:

Spalte A: Werte

Spalte B: Formel für B1:

=ANZAHL2(A$1:A1)Spalte C: Formel für C1:

=WENN(ISTNV(VERGLEICH(ZEILE();B:B;0));"";VERGLEICH(ZEILE();B:B;0))

Spalte D: Formel für D1:

=WENN(C1="";"";BEREICH.VERSCHIEBEN(A$1;C1-1;0))

Entsprechend für die weiteren Zeilen (Formeln "runterziehen")

-----

Daten in einer Zeile:

Zeile 1: Werte

Zeile 2: Formel für A2:

=ANZAHL2($A1:A1)

Zeile 3: Formel für A3:

=WENN(ISTNV(VERGLEICH(SPALTE();2:2;0));"";VERGLEICH(SPALTE();2:2;0))

Zeile 4: Formel für A4:

=WENN(A3="";"";BEREICH.VERSCHIEBEN($A1;0;A3-1))

Entsprechend für die weiteren Spalten (Formeln "rüberziehen")

-----

Man kann die Formel auch etwas zusammenfassen; hab's aber auf die Schnelle nicht geschafft, den ersten Teil (mit ANZAHL2) in eine Matrixformel aufzunehmen - das braucht also immer noch eine Hilfsspalte (mit ANZAHL2)

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 10

Du willst quasi in einer Zeile Leerspalten löschen?

Ist eine VBA-Lösung akzeptabel?

Public Sub Leerspalten_loeschen()
  Const MAXSPALTE = 1000
  Dim iZeile As Integer
  Dim i, j As Integer

iZeile = InputBox("Zeile") For i = 1 To MAXSPALTE If WorksheetFunction.CountA(Range(Cells(iZeile, i), Cells(iZeile, MAXSPALTE))) = 0 Then _ Exit For While IsEmpty(Cells(iZeile, i)) Cells(iZeile, i).Delete xlToLeft Wend Next End Sub
Kommentar von FabiL97 ,

Danke für die Hilfe aber ich brauche die Anwendung tatsächlich nur auf ein kleines Feld in Excel, der Rest soll unangetastet bleiben. Hab quasi mittendrin ein Feld in dem jemand Kommentieren kann und die Kommentare sollen, falls er mal eine Spalte frei lässt, nachrücken zum Kopf des definierten Raums.

Kommentar von Suboptimierer ,

Du könntest in der Zeile darunter folgende Formel als Matrixformel eingeben (Eingabe mit Strg + Shift + Entf abschließen) und nach rechts ziehen.

=WENNFEHLER(INDEX($A$10:$J$10;1;KKLEINSTE(WENN($A$10:$J$10<>"";SPALTE($A$10:$J$10);10^9);SPALTE(A$10:J$10)));"")

Ich beziehe mich auf Zeile 10. Du kannst eine beliebige Zeile so komprimieren.

Antwort
von nerd4you, 8

Also willst du quasi alle leeren Felder löschen?

Hilft das?-->

http://www.traens.com/tipps/microsoft/excel-leere-zeilen-loeschen.html

Kommentar von FabiL97 ,

Nein die sollen nicht gelöscht werden. Die Zellen in denen Werte sind sollen nur nach Vorn gezogen werden und die leeren stehen ganz am Ende. Quasi eine Schlange die in jedem Feld guckt ob was drin steht und sobald was gefunden wurde wird das ins erste Feld geschrieben und so weiter. Funktioniert bei mir bis jetzt nur für den ersten Wert, danach kommt nichts mehr.

Kommentar von nerd4you ,

wo ist der unterschied? Excel füllt die Felder ja nach..

Kommentar von DeeDee07 ,

Die Methode funktioniert schon, nur muss man bei Schritt 3 "Zellen nach links verschieben" wählen.

Kommentar von Suboptimierer ,

Sehr elegant!

Keine passende Antwort gefunden?

Fragen Sie die Community