Nachrückverfahren in Excel programmieren?

3 Antworten

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)

Woher ich das weiß:Berufserfahrung – Software-Entwickler

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
Woher ich das weiß:Berufserfahrung – Programmierer

FabiL97 
Beitragsersteller
 15.11.2016, 16:19

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.

0
Suboptimierer  15.11.2016, 16:28
@FabiL97

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.

1

Also willst du quasi alle leeren Felder löschen?

Hilft das?-->

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


FabiL97 
Beitragsersteller
 15.11.2016, 15:55

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.

0
nerd4you  15.11.2016, 16:20
@FabiL97

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

0
DeeDee07  15.11.2016, 16:37
@FabiL97

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

1