Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Runterzählen innerhalb einer Spalte

Forumthread: Runterzählen innerhalb einer Spalte

Runterzählen innerhalb einer Spalte
teest
Hey!
Habe wiedermal ein Problem und nirgends etwas dazu gefunden:
Wie muss ich ein Makro aufbauen, welches den Wert aus einer bestimmten Zelle nimmt und danach in einer anderen Spalte runterzählt, Zeile für Zeile bis es bei 1 ist und wieder von vorne beginnt. Das ganze sollte erst stoppen wenn in einer Spalte "B" nichts mehr vorhanden ist.
Meine Idee war es nun einen Loop zu erstellen welcher immer die "Obere Zelle" nimmt un davon -1 abzieht bis er bei 1 ist.
Wie müsste ich das in Code umsetzen?
Anzeige
AW: Runterzählen innerhalb einer Spalte
02.03.2012 12:07:00
Tino
Hallo,
vielleicht geht es so.
kommt als Code in Tabelle
Option Explicit 
 
 
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim ArrayDaten(), n&, nZaehler& 
Dim rngVorgabe As Range 
 
Set rngVorgabe = Range("A1") 'wo die Zahl steht 
 
If Intersect(rngVorgabe, Target) Is Nothing Then Exit Sub 
 
 
ArrayDaten = Range("B4", Cells(Rows.Count, 2).End(xlUp)) 
 
nZaehler = rngVorgabe.Value + 1 
 
For n = 1 To Ubound(ArrayDaten) 
   nZaehler = nZaehler - 1 
   ArrayDaten(n, 1) = nZaehler 
   If nZaehler < 2 Then nZaehler = rngVorgabe.Value + 1 
Next n 
 
Application.EnableEvents = False 
    Range("A4", Cells(Rows.Count, 1)).ClearContents 
    Range("A4").Resize(Ubound(ArrayDaten)) = ArrayDaten 
Application.EnableEvents = True 
End Sub 
 
Die Tabelle ist bei mir so aufgebaut.
 AB
15 
2  
3  
45Daten1
54Daten2
63Daten3
72Daten4
81Daten5
95Daten6
104Daten7
113Daten8
122Daten9
131Daten10
145Daten11
154Daten12
163Daten13
172Daten14
181Daten15
195Daten16
204Daten17
213Daten18
222Daten19
231Daten20
245Daten21
254Daten22
263Daten23
272Daten24
281Daten25
295Daten26
304Daten27
313Daten28
322Daten29

Gruß Tino
Anzeige
AW: Runterzählen innerhalb einer Spalte
02.03.2012 12:08:37
Rudi
Hallo,
dafür brauchst du doch kein Makro.
 ABC
25x5
3 x4
4 x3
5 x2
6 x1
7 x5
8 x4
9 x3
10 x2
11 x1
12 x5
13 x4

ZelleFormel
C2=A2
C3=WENN(C2=1;A$2;C2-1)
C4=WENN(C3=1;A$2;C3-1)

Gruß
Rudi
Anzeige
AW: Runterzählen innerhalb einer Spalte
02.03.2012 13:36:29
teest
Ich denke ich brauche das als Makro weil die Zahl die sich Runterzählen soll 1. Variabel ist und 2. Im Normalfall etwa bei 600 liegt und sich so lang runterzählen muss bis sie so an die 40'000 Daten durchhat.
Danke für den obigen Code, hab ihn nun auf meine Datei passend abgeändert und erhalte den Fehler:
"Argument ist nicht optional!"
was mache ich Falsch?
Und was meinst du mit den "Code in die Tabelle" einfügen? wenn ich auf die richtigen Sheets verweise kommt es nicht darauf an wo er steht, oder?

Option Explicit
Sub countdown(ByVal Target As Range)
Dim ArrayDaten(), n&, nZaehler&
Dim rngVorgabe As Range
Set rngVorgabe = Sheets("Auswertung").Range("N53") 'wo die Zahl steht
If Intersect(rngVorgabe, Target) Is Nothing Then Exit Sub
ArrayDaten = Sheets("data").Range("V2", Cells(Rows.Count, 2).End(xlUp))
nZaehler = rngVorgabe.Value + 1
For n = 1 To UBound(ArrayDaten)
nZaehler = nZaehler - 1
ArrayDaten(n, 1) = nZaehler
If nZaehler 

Anzeige
bin unterwegs...
02.03.2012 13:56:36
Tino
Hallo,
vielleicht kann ein anderer einspringen.
Gruß Tino
AW: Runterzählen innerhalb einer Spalte
02.03.2012 14:47:19
Reinhard
Hallo Teest,
bau die Tabelle die NoNet zeigte nach und teste daran seinen Code.
Dann sage was du verbessern willst.
Und, ggfs. lade hier deine mappe hoch und erklär anhand von ihr genauer was du willst.
Auch mir ist unklar ob du Vba brauchst oder ob nicht Formeln reichen.
Gruß
Reinhard
Anzeige
lies noch mal, was Tino...
02.03.2012 14:48:54
zu
..geschrieben hat:
kommt als Code in Tabelle= Worksheet!
nicht in ein Modul !
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) usw...
Gruß
robert
verstanden wie Deine Datei aufgebaut ist
02.03.2012 22:56:32
Tino
Hallo,
dann versuche es mit diesem Code.
kommt als Code in die Tabelle "Auswertung"
Option Explicit 
 
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim ArrayDaten(), n&, nZaehler&, nLetzte& 
Dim rngVorgabe As Range 
Set rngVorgabe = Range("N53") 'wo die Zahl steht 
 
If Intersect(rngVorgabe, Target) Is Nothing Then Exit Sub 'andere Zelle 
If Not IsNumeric(rngVorgabe.Value) Then Exit Sub 'keine Zahl 
 
 With Sheets("data") 
      nLetzte = .Cells(.Rows.Count, 22).End(xlUp).Row 
      If nLetzte > 1 Then 'keine Daten, nLetzte = 1 
          ArrayDaten = .Range("V2", .Cells(nLetzte, 22)).Resize(, 2).Value2 
          Redim Preserve ArrayDaten(1 To Ubound(ArrayDaten), 1 To 1) 
          nZaehler = rngVorgabe.Value + 1 
          For n = 1 To Ubound(ArrayDaten) 
             nZaehler = nZaehler - 1 
             ArrayDaten(n, 1) = nZaehler 
             If nZaehler < 2 Then nZaehler = rngVorgabe.Value + 1 
          Next n 
       
      End If 
      Application.EnableEvents = False 
          .Range("K2", .Cells(.Rows.Count, 11)).ClearContents 
          If nLetzte > 1 Then 
            .Range("K2").Resize(Ubound(ArrayDaten)) = ArrayDaten 
          End If 
      Application.EnableEvents = True 
 End With 
End Sub 
 
 
Gruß Tino
Anzeige
AW: Runterzählen innerhalb einer Spalte
02.03.2012 15:09:59
teest
Also, um es nochmals klarer darzustellen:
Als erstes lasse ich per Textfenster abfragen wieviele "Bahnen" ein Produkt hat, wir nehmen nun mal an es sind 600.
Danach soll in dem Sheet, in welchem alle Daten stehen (ca 15 Spalten/60'000 Zeilen)
in der Spalte "V" von 600 bis auf 1 runtergezählt werden, danach soll es wieder bei 600 anfangen.
Da das ganze File nur eine Vorlage ist und es auch mal mehr oder weniger Daten sein können muss dass ganze ziemlich flexibel sein.
(Die Daten werden ebenfalls importiert)
Dies ist erforderlich weil der Sensor der die Daten ausgibt diese einfach aneinanderhängt, sprich nach der 600. Bahn fängt er wieder bei der 1. an.
Mein Makro (von mir aus muss es nicht umbedingt eines sein) soll nun diese Eingabe "600" aus ihrer Zelle lesen und dann (in einem anderem Sheet) diese runterzählen.
Ich hoffe dass ist nun verständlich genug.
+ ja den code hatte ich nicht in einem Modul sondern in einem Sheet
Anzeige
noch einmal...
02.03.2012 16:49:35
zu
ja den code hatte ich nicht in einem Modul sondern in einem Sheet
ohne auf die Problematik weiter einzugehen-
lies doch wie Tinos Code beginnt-ist ein Worksheet-Event und keine Sub(...)
also probier den Code, so wie es Tino geschrieben hat.
Rechte Maustaste auf den Tabellenblatt-Reiter-Code anzeigen-
und Code dort einfügen.
Hab den Code aber nicht getestet und kann daher nicht beurteilen, ob er Dir hilft.
Gruß
robert
Anzeige
noch einmal...
02.03.2012 16:50:38
robert
ja den code hatte ich nicht in einem Modul sondern in einem Sheet
ohne auf die Problematik weiter einzugehen-
lies doch wie Tinos Code beginnt-ist ein Worksheet-Event und keine Sub(...)
also probier den Code, so wie es Tino geschrieben hat.
Rechte Maustaste auf den Tabellenblatt-Reiter-Code anzeigen-
und Code dort einfügen.
Hab den Code aber nicht getestet und kann daher nicht beurteilen, ob er Dir hilft.
Gruß
robert
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Runterzählen innerhalb einer Spalte in Excel


Schritt-für-Schritt-Anleitung

Um in Excel innerhalb einer Spalte runterzuzählen, kannst Du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke im Projekt-Explorer mit der rechten Maustaste auf das entsprechende Arbeitsblatt und wähle "Code anzeigen".

  3. Füge den folgenden Code in das Codefenster ein:

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim ArrayDaten() As Variant, n As Long, nZaehler As Long
       Dim rngVorgabe As Range
    
       Set rngVorgabe = Range("A1") ' Zelle, die den Wert enthält
    
       If Intersect(rngVorgabe, Target) Is Nothing Then Exit Sub
    
       ArrayDaten = Range("B4", Cells(Rows.Count, 2).End(xlUp))
    
       nZaehler = rngVorgabe.Value + 1
    
       For n = 1 To UBound(ArrayDaten)
           nZaehler = nZaehler - 1
           ArrayDaten(n, 1) = nZaehler
           If nZaehler < 2 Then nZaehler = rngVorgabe.Value + 1
       Next n
    
       Application.EnableEvents = False
       Range("A4", Cells(Rows.Count, 1)).ClearContents
       Range("A4").Resize(UBound(ArrayDaten)) = ArrayDaten
       Application.EnableEvents = True
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Gib in Zelle A1 eine Zahl ein, von der aus Du runterzählen möchtest.

Jetzt wird automatisch in der Spalte A runtergezählt, solange in der Spalte B Daten vorhanden sind.


Häufige Fehler und Lösungen

  • Fehler: "Argument ist nicht optional!"

    • Überprüfe, ob Du die richtigen Argumente in Deiner Sub-Prozedur angegeben hast. Achte darauf, dass die Definition der Sub korrekt ist, z.B. Private Sub Worksheet_Change(ByVal Target As Range).
  • Fehler: Keine Aktualisierung der Zellen

    • Stelle sicher, dass das Makro in einem Arbeitsblatt-Modul platziert ist und nicht in einem allgemeinen Modul. Der Code muss in das entsprechende Arbeitsblatt eingefügt werden, um korrekt zu funktionieren.

Alternative Methoden

Wenn Du kein Makro verwenden möchtest, kannst Du auch eine Formel nutzen:

  1. Gib in Zelle C2 die Formel =A2 ein.
  2. In Zelle C3 gib die Formel =WENN(C2=1;A$2;C2-1) ein.
  3. Ziehe die Formel in C3 nach unten, um sie auf die darunterliegenden Zellen anzuwenden.

Diese Methode zählt ebenfalls herunter, ohne ein Makro zu verwenden, und eignet sich gut für kleinere Datenmengen.


Praktische Beispiele

Angenommen, Du hast in Zelle A1 den Wert 600 stehen. Wenn Du das Makro ausführst, wird in Spalte A von 599 bis 1 heruntergezählt. Sobald der Wert 1 erreicht ist, beginnt das Zählen von 600 erneut, solange in der Spalte B Daten vorhanden sind.


Tipps für Profis

  • Excel Zeilen aneinander binden: Wenn Du die Werte in einer Zeile zusammenfassen möchtest, kannst Du die Funktion TEXTVERKETTEN nutzen, um die einzelnen Zellen zu verbinden.
  • Optimierung von Makros: Überlege, wie Du die Leistung Deines Makros verbessern kannst, indem Du weniger Range-Operationen durchführst und stattdessen Arrays verwendest.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um eine andere Spalte zu verwenden? Du kannst die Range-Referenzen im Code ändern, um die gewünschte Spalte zu verwenden.

2. Funktioniert das auch in älteren Excel-Versionen? Ja, das Makro sollte in den meisten Excel-Versionen funktionieren, die VBA unterstützen. Achte auf mögliche Unterschiede in der Benutzeroberfläche.

3. Wie viele Daten kann ich mit diesem Makro verarbeiten? Das Makro kann mit großen Datenmengen umgehen, jedoch kann die Leistung je nach Rechnerleistung variieren. Bei sehr großen Datenmengen könnte eine Optimierung notwendig sein.

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