Anzeige
Archiv - Navigation
1080to1084
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

erste x Zahlen auflisten

erste x Zahlen auflisten
Jan
Hallo Forum
Habe ein kleines Problem und zwar folgendes:
Ich habe eine Spalte, in der Zahlen und Text vorkommen können. Es befinden sich KEINE Leerzellen dazwischen.
Jetzt möchte ich in eine Zelle eine Zahl eingeben können, z.B 5 und dann soll Excel in einer anderen Spalte aus der Spalte mit Text und Zahlen die ersten 5 Zahlen heraussuchen.
Dies sähe dann wie folgt aus:
Spalte A___Spalte B___
a___________1_______
b___________2______
c___________3______
1___________5______
V___________8______
2
3
N
V
N
5
8
9
G
5
4
Spalte A ist die Ausgangsspalte (Text + Zahlen) und in Spalte B werden jetzt die ersten 5 Zahlen von Spalte A aufgelistet. Dies sollte ohne Leerzellen dazwischen sein.
Wäre froh wenn man dies ohne Array-Formeln lösen könnte, denn meine Dokument ist sonst schon ziemlich überlastet. Notfalls bin ich aber auch um jede Array-Formel froh!:)
Hoffe ihr habt verstanden was ich erreichen will und könnt / wollt mir hefen!
Vielen Dank an alle Helfenden!
Gruss Jan
Wieso funktioniert Makro nicht?
24.06.2009 08:34:00
Jan
Hallo Matthias
Vielen Dank für deine Antwort..mit dem wäre ich auch sehr zufrieden..:)
Habe es mal zu meinem Vorteil umgebaut, und habe nun folgendes Problem:
Hier das Makro:
Option Explicit

Sub CopyZahl()
Dim rng As Range, loletzte As Long, internerCounter As Long
Worksheets("VBA").Range("A2:A5000").ClearContents            'Bereich leeren falls gefüllt
For Each rng In Worksheets("PivotTable").Range("B5:B5000")         'Bereich für Schleife
If IsNumeric(rng) Then                 'Abfrage ob Zahl
internerCounter = internerCounter + 1  'Zählen wie oft Zahl
If internerCounter > Worksheets("VBA").Range("B1").Value + 1 Then Exit For  'nur die ersten 5  _
Zahlen listen
loletzte = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(loletzte, 1) = rng
End If
Next
Worksheets("VBA").Range("C2:C5000").ClearContents            'Bereich leeren falls gefüllt
For Each rng In Worksheets("PivotTable").Range("G5:G5000")         'Bereich für Schleife
If IsNumeric(rng) Then                 'Abfrage ob Zahl
internerCounter = internerCounter + 1  'Zählen wie oft Zahl
If internerCounter > Worksheets("VBA").Range("D1").Value + 1 Then Exit For  'nur die ersten 5  _
Zahlen listen
loletzte = Cells(Rows.Count, 3).End(xlUp).Row + 1
Cells(loletzte, 3) = rng
End If
Next
Worksheets("VBA").Range("E2:E5000").ClearContents            'Bereich leeren falls gefüllt
For Each rng In Worksheets("PivotTable").Range("L5:L5000")         'Bereich für Schleife
If IsNumeric(rng) Then                 'Abfrage ob Zahl
internerCounter = internerCounter + 1  'Zählen wie oft Zahl
If internerCounter > Worksheets("VBA").Range("F1").Value + 1 Then Exit For  'nur die ersten 5  _
Zahlen listen
loletzte = Cells(Rows.Count, 5).End(xlUp).Row + 1
Cells(loletzte, 5) = rng
End If
Next
Worksheets("VBA").Range("G2:G5000").ClearContents            'Bereich leeren falls gefüllt
For Each rng In Worksheets("PivotTable").Range("Q5:Q5000")         'Bereich für Schleife
If IsNumeric(rng) Then                 'Abfrage ob Zahl
internerCounter = internerCounter + 1  'Zählen wie oft Zahl
If internerCounter > Worksheets("VBA").Range("H1").Value + 1 Then Exit For  'nur die ersten 5  _
Zahlen listen
loletzte = Cells(Rows.Count, 7).End(xlUp).Row + 1
Cells(loletzte, 7) = rng
End If
Next
Worksheets("VBA").Range("I2:I5000").ClearContents            'Bereich leeren falls gefüllt
For Each rng In Worksheets("PivotTable").Range("V5:V5000")         'Bereich für Schleife
If IsNumeric(rng) Then                 'Abfrage ob Zahl
internerCounter = internerCounter + 1  'Zählen wie oft Zahl
If internerCounter > Worksheets("VBA").Range("J1").Value + 1 Then Exit For  'nur die ersten 5  _
Zahlen listen
loletzte = Cells(Rows.Count, 9).End(xlUp).Row + 1
Cells(loletzte, 9) = rng
End If
Next
Worksheets("VBA").Range("K2:K5000").ClearContents            'Bereich leeren falls gefüllt
For Each rng In Worksheets("PivotTable").Range("AA5:AA5000")         'Bereich für Schleife
If IsNumeric(rng) Then                 'Abfrage ob Zahl
internerCounter = internerCounter + 1  'Zählen wie oft Zahl
If internerCounter > Worksheets("VBA").Range("L1").Value + 1 Then Exit For  'nur die ersten 5  _
Zahlen listen
loletzte = Cells(Rows.Count, 11).End(xlUp).Row + 1
Cells(loletzte, 11) = rng
End If
Next
Worksheets("VBA").Range("M2:M5000").ClearContents            'Bereich leeren falls gefüllt
For Each rng In Worksheets("PivotTable").Range("AF5:AF5000")         'Bereich für Schleife
If IsNumeric(rng) Then                 'Abfrage ob Zahl
internerCounter = internerCounter + 1  'Zählen wie oft Zahl
If internerCounter > Worksheets("VBA").Range("N1").Value + 1 Then Exit For  'nur die ersten 5  _
Zahlen listen
loletzte = Cells(Rows.Count, 13).End(xlUp).Row + 1
Cells(loletzte, 13) = rng
End If
Next
Worksheets("VBA").Range("O2:O5000").ClearContents            'Bereich leeren falls gefüllt
For Each rng In Worksheets("PivotTable").Range("AK5:AK5000")         'Bereich für Schleife
If IsNumeric(rng) Then                 'Abfrage ob Zahl
internerCounter = internerCounter + 1  'Zählen wie oft Zahl
If internerCounter > Worksheets("VBA").Range("P1").Value + 1 Then Exit For  'nur die ersten 5  _
Zahlen listen
loletzte = Cells(Rows.Count, 15).End(xlUp).Row + 1
Cells(loletzte, 15) = rng
End If
Next
Worksheets("VBA").Range("Q2:Q5000").ClearContents            'Bereich leeren falls gefüllt
For Each rng In Worksheets("PivotTable").Range("AP5:AP5000")         'Bereich für Schleife
If IsNumeric(rng) Then                 'Abfrage ob Zahl
internerCounter = internerCounter + 1  'Zählen wie oft Zahl
If internerCounter > Worksheets("VBA").Range("R1").Value + 1 Then Exit For  'nur die ersten 5  _
Zahlen listen
loletzte = Cells(Rows.Count, 17).End(xlUp).Row + 1
Cells(loletzte, 17) = rng
End If
Next
Worksheets("VBA").Range("S2:S5000").ClearContents            'Bereich leeren falls gefüllt
For Each rng In Worksheets("PivotTable").Range("AU5:AU5000")         'Bereich für Schleife
If IsNumeric(rng) Then                 'Abfrage ob Zahl
internerCounter = internerCounter + 1  'Zählen wie oft Zahl
If internerCounter > Worksheets("VBA").Range("T1").Value + 1 Then Exit For  'nur die ersten 5  _
Zahlen listen
loletzte = Cells(Rows.Count, 19).End(xlUp).Row + 1
Cells(loletzte, 19) = rng
End If
Next
End Sub


Wenn ich jede next-Schleife alleine starte, dann funktionieren die Makros einwandfrei..
Wenn ich aber alles zusammenhänge und wie im oberen Makro dargestellt starte, läuft nur die erste next-Schleife ab..
Wo ist hier das Problem?
Vielen Dank für die Hilfe!
Gruss Jan

Anzeige
Ergänung zur ersten Datei ...
24.06.2009 08:47:45
Matthias
Hallo Jan
Ich hatte vergessen das Du die Menge der zu listenden Zahlen vorgeben willst.
Ohne mich jetzt in Deinen Code zu vertiefen, hier eine 2.Variante, die ich nebenher schon erstellt hatte.
https://www.herber.de/bbs/user/62711.xls
Gruß Matthias
=KKLEINSTE(A:A;ZEILEN($1:1))
24.06.2009 09:14:44
{Boris}
Hi Jan,
...und runterkopieren. Da brauchts kein VBA zu...
In E1 schreibst Du die 5. Dann:
=WENN(ZEILEN($1:1)>$E$1;"";KKLEINSTE(A:A;ZEILEN($1:1)))
Runterkopieren.
Grüße Boris
ach, wenn ich das doch endlich auch so könnte ...
24.06.2009 09:34:18
Matthias
Hallo Boris
Superlösung, leider tue ich mich immer etwas schwer mit Formeln und weiche dann zu schnell auf VBA aus.
das erfreuliche für mich ist aber das mein Ergebnis mit Deinem identisch ist :o)
aber nix für Ungut, ich lerne ja ständig dazu. (Dank Deiner Formellösung).
Gruß Matthias
Anzeige
AW: ach, wenn ich das doch endlich auch so könnte ...
24.06.2009 09:47:44
Jan
Hallo Boris
Vielen Dank für deine Lösung.
Diese entspricht aber nicht der Lösung, die ich möchte...
Da kommen einfach die 5 Kleinsten Zahlen aus dem Bereich, oder mache ich da etwas falsch?
Gruss Jan
Wie Recht Du doch hast...
24.06.2009 09:56:16
{Boris}
Hi Jan,
...das hatte ich doch glatt nicht berücksichtigt.
Dann die Arrayvariante (die 5 steht wieder in E1):
{=WENN(ZEILEN($1:1)>E$1;"";INDEX(A:A;KKLEINSTE(WENN(ISTZAHL(A$1:A$1000);ZEILE($1:$1000)); ZEILEN($1:1)))) }
{geschweifte Klammern} nicht eingeben, sondern Formeleingabe mit gleichzeitig Strg+Shift+Enter abschließen. Das erzeugt die { }.
Grüße Boris
Anzeige
Vielen Dank für die Korrektur!
24.06.2009 09:57:45
Jan
Hallo Boris
das passt wunderbar..:)
vielen dank für die Korrektur!
Gruss Jan
AW: ach, wenn ich das doch endlich auch so könnte ...
24.06.2009 09:59:33
Coach
Hallo Jan,
per Array-Formel geht das so (Eingabe mit Strg+Umschalt+Eingabe):
=INDEX($A$1:$A$16;KKLEINSTE(WENN(ISTZAHL($A$1:$A$16);ZEILE($A$1:$A$16));ZEILE(1:1));1)
Dann runterkopieren.
Gruß Coach

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige