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

Zahlenreihe mit mehrfachen Ziffern finden

Zahlenreihe mit mehrfachen Ziffern finden
01.08.2017 07:27:49
erichm
Hallo,
ich suche aus einer Zahlenreihe von 1 bis 2.000.000 alle Zahlen, die eine einzelne Ziffer mindestens 4-mal beinhalten.
Also z.B.
113411
300333
909199
Grundsätzlich habe ich bereits eine Lösung mit Formeln gefunden:
Tabelle1

 ABCDEF
1 12345
210001000 
312111211 
444444444 
51211112111

Formeln der Tabelle
ZelleFormel
B2=TEIL($A2;SPALTE()-1;1)
C2=TEIL($A2;SPALTE()-1;1)
D2=TEIL($A2;SPALTE()-1;1)
E2=TEIL($A2;SPALTE()-1;1)
F2=TEIL($A2;SPALTE()-1;1)
B3=TEIL($A3;SPALTE()-1;1)
C3=TEIL($A3;SPALTE()-1;1)
D3=TEIL($A3;SPALTE()-1;1)
E3=TEIL($A3;SPALTE()-1;1)
F3=TEIL($A3;SPALTE()-1;1)
B4=TEIL($A4;SPALTE()-1;1)
C4=TEIL($A4;SPALTE()-1;1)
D4=TEIL($A4;SPALTE()-1;1)
E4=TEIL($A4;SPALTE()-1;1)
F4=TEIL($A4;SPALTE()-1;1)
B5=TEIL($A5;SPALTE()-1;1)
C5=TEIL($A5;SPALTE()-1;1)
D5=TEIL($A5;SPALTE()-1;1)
E5=TEIL($A5;SPALTE()-1;1)
F5=TEIL($A5;SPALTE()-1;1)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Zuerst teile ich alle Zahlen auf Ziffern auf, dann suche mit Zählenwenn wie oft einzelne Ziffern vorkommen und zuletzt filtere ich dann alle Zeilen bei denen einzelne Ziffern mind. 4x vorkommen!!
Allerdings ist das äußerst aufwändig und sprengt fast die Ressource der EXCEL-Datei.
Jetzt dachte, dass es evtl. einen Code gibt, der von 1 - 2.000.000 alle betroffenen Zahlen aufsteigend sortiert auflistet. Ggfls. macht es Sinn den Code aufzuteilen in
1 - 500.000
500.001 - 1.000.000
usw.
Vielen Dank für Lösungsvorschläge.
mfg

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlenreihe mit mehrfachen Ziffern finden
01.08.2017 07:56:32
Daniel
Hi
Probiere mal diese Matrixformel in einer Hilfsspalte
=max(länge(a1)-länge(wechseln(a1;zeile($z$1:$z$10)-1;"")))
Die Formel zeigt dir die Anzahl der am häufigsten vorkommenden Ziffer an.
Dann kannst du in der Spalte nach Werten größer gleich 4 suchen.
Die Formel ist eine Matrixformel, d.h. Eingabe immer mit STRG+SHIFT+ENTWR abschliessen.
Gruß Daniel
AW: VBA
01.08.2017 08:48:27
Fennek
Hallo,
aus Performance-Gründen sollte es mit VBA umgesetzt werden.
mfg
AW: Zahlenreihe mit mehrfachen Ziffern finden
01.08.2017 09:32:12
erichm
Danke Daniel für den Vorschlag; Formel funktioniert - suche trotzdem noch eine VBA-Lösung
mfg
AW: Zahlenreihe mit mehrfachen Ziffern finden
01.08.2017 09:53:04
Daniel
Hi
Da du mit VBA auch Formeln einfügen kannst , ist jede funktionierende Formellösung immer auch die Grundlage für eine VBA-Lösung.
Gruß Daniel
Anzeige
AW: Zahlenreihe mit mehrfachen Ziffern finden
01.08.2017 10:32:57
erichm
Stimmt - aber evtl. gibt es ja eine VBA-Lösung bei der nur die gesuchten Zahlen aufgelistet werden; die Formellösung stzt ja voraus, dass zunächst alle Zahlen aufgelistet werden.
mfg
AW: nicht alle Zahlen, alle Varianten
01.08.2017 11:02:26
Fennek
Hallo,
wenn man die Zahlen von 0 - 2.000.000 überprüft, ob eine Ziffer vierfach vorkommt, sind es 20.000.000 Test. Das ist in xl machbar und relativ einfach zu programmieren.
Es sollte aber auch so gehen:
Bestimmung aller möglichen Varianten:
n Zahl, die vierfach wiederholt vorkommen soll {1,9}
z Z{1,9} und n
vierstellige nnnn
fünfstellig znnnn
nznnn
nnznn
nnnzn
nnnnz
sechsstellig zznnnn
znznnn
znnznn
znnnzn
znnnnz
nzznnn
nznznn
nznnzn
nznnnz
nnzznn
nnznzn
nnznnz
nnnzzn
nnnznz
nnnnzz
Für die "Null" und die sieben-stellige Zahlen sind zusätzliche Varianten zu erstellen.
Wenn man bei der Auflistung keinen Fehler macht, sollte das wesentlich schneller zu berechnen sein.
Ich finde das Thema langweilig und werde keinen Code schreiben.
mfg
Anzeige
AW: nicht alle Zahlen, alle Varianten
01.08.2017 22:00:22
erichm
Danke für die Hinweise - da werde ich mir was überlegen!
mfg
AW: 20 Sekunden
02.08.2017 14:44:32
Fennek
Hallo,
die anderen Fragesteller waren nicht so interessant...
Der Code benötigt 20 Sekunden, es macht also keinen Sinn, sich Gedanken um etwas schnelleres zu machen.
Sub vierStellen() 'bestimmt 4 gleiche Ziffern in Zahl bis 2 Mio Anf = Timer Dim Ar() Dim i As Long With CreateObject("scripting.dictionary") For L = 5 To 7 O = 10 ^ L O = IIf(L = 7, 2000000, O) For i = 10 ^ (L - 1) To O If Pruef4(i, L - 4) Then y = .Item(i) Next i Next L Debug.Print .Count Arr = .keys ReDim Ar(.Count + 1, 0) For i = 0 To UBound(Arr): Ar(i, 0) = Arr(i): Next i Range("A1").Resize(.Count + 1, 1) = Ar End With Debug.Print Timer - Anf End Sub Function Pruef4(ByVal i As Long, L As Integer) As Boolean For ii = 0 To 9 If i ii Then If Len(Replace(i, ii, "")) = L Then Pruef4 = True: Exit Function End If Next ii End Function mfg
Anzeige
Perfekte Lösung......
06.08.2017 12:52:09
erichm
....Vielen Dank!!
(war erst heute wieder online, deswegen späte Rückmeldung)
mfg
AW: Es macht immer Sinn, sich über
07.08.2017 19:55:56
Daniel
was schnelleres Gedanken zu machen, wenn sie Laufzeit im spürbaren Bereich liegt.
dieser Code ist auf meinem Rechner um Faktor 10 schneller (6 sec vs 60 sec)
Sub xxx()
Dim vgl(9, 1) As String
Dim i As Long, v As Long, z As Long, t As String
Dim arr
Dim a
Const von As Long = 10000
Const bis As Long = 2000000
ReDim arr(von To bis) As Long
For v = 0 To 9
vgl(v, 0) = "*" & WorksheetFunction.Rept(v & "*", 4)
vgl(v, 1) = vgl(v, 0) & v & "*"
Next
For i = von To bis
t = CStr(i)
For v = 0 To 9
If t Like vgl(v, 0) Then
If Not t Like vgl(v, 1) Then
arr(von + z) = t
z = z + 1
Exit For
End If
End If
Next
Next
ReDim Preserve arr(von To von + z - 1)
arr = WorksheetFunction.Transpose(arr)
Cells(1, 2).Resize(UBound(arr, 1) - LBound(arr, 2) + 1, 1) = arr
End Sub
vor allem scheint die Prüfung mit dem LIKE deutlich schneller zu sein als das austauschen der Zahlen.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige