Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
1108to1112
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

Problem zum Wochenende

Problem zum Wochenende
alifa
Hallo,
Es sollen die einstelligen Quersummen aller Zahlen von 1 bis 1000000 addiert werden. Mein Makro schafft das, doch nur in 16 Etappen, da es nur 65536 Zeilen gibt. Könnte man das Makro ändern, in dem Sinne, dass die Summe direkt, und nicht über Tabelle berechnet wird? Bin dankbar für jede Hilfe.
Gruß, Erhard
Option Explicit
'Es sollen alle einstelligen Quersummen der Zahlen 1 bis 1000000 addiert werden.
' Z.B. 123564=>1+2+3+5+6+4=21=>1+2=3.
'bei dieser Zahl wird die 3 addiert. Oder bei 999999=>54=>9 wird die 9 addiert.
Sub Einfach()
Dim n&, a&, b&, c&, z&, lngRes&, t!
t = Timer
For n = 65000 To 130000
a = Quersumme(n)
If a > 9 Then b = Quersumme(a)
If b > 9 Then c = Quersumme(b)
If b > 9 Then b = 0
If a > 9 Then a = 0
If a 0 Then b = 0
If b 0 Then c = 0
Cells(z + 1, 1) = a
Cells(z + 1, 2) = b
Cells(z + 1, 3) = c
Cells(z + 1, 4) = WorksheetFunction.Sum(Range("A:A"))
Cells(z + 1, 5) = WorksheetFunction.Sum(Range("B:B"))
Cells(z + 1, 6) = WorksheetFunction.Sum(Range("C:C"))
z = z + 1
Next
MsgBox "Fertig nach " & Round(Timer - t, 2) & " Sekunden"
End Sub

Public Function Quersumme(ByVal Zahl As Long) As Long
Dim nQuersumme As Long
Do While Zahl  0
nQuersumme = nQuersumme + (Zahl Mod 10)
Zahl = Zahl \ 10
Loop
Quersumme = nQuersumme
End Function

AW: Problem zum Wochenende
24.10.2009 21:20:36
MichaV
Hallo,

Option Explicit
Sub addiere()
Dim i As Long
Dim e As Long
For i = 1 To 1000000
e = e + Einstellige_Quersumme(i)
Next i
MsgBox e
End Sub
Function Einstellige_Quersumme(ByVal z As Long) As Long
Do
z = Quersumme(z)
Loop Until z  0
nQuersumme = nQuersumme + (Zahl Mod 10)
Zahl = Zahl \ 10
Loop
Quersumme = nQuersumme
End Function

Gruss- Micha
AW: Problem zum Wochenende
25.10.2009 12:03:02
alifa
Hallo,
ich danke für alle positiven Beiträge! Faszinierend für mich, zu realisieren, dass 3 Makros für das gleiche Problem so verschieden sind. Mein Makro braucht ca. 2 Stunden. Das von NoNet braucht 21 und das von MichaV sogar nur 1,34 Sekunden. VBA ist eine von den vielen Programmiersprachen, die auch in der Freizeit Spaß machen und Anwendung finden. Ich wünsche einen schönen Sonntag!
Gruß, Erhard
Anzeige
Meine udF-Kombi brauchte unter xl9 gefühlte...
26.10.2009 00:27:54
Luc:-?
...10min, aber das lag wohl teils an der Technik, teils an nicht optimiertem Durchlauf... ;-)
Warum das bei dir 2h Std dauert...?
Gruß Luc :-?
AW: welchen tiefern Sinn...
25.10.2009 01:57:46
Daniel
... hat diese Übung?
Gruß, Daniel
Summe aller einstelligen Quersummen
25.10.2009 02:10:40
NoNet
Hallo alifa,
das kannst Du mit folgendem Makro und den dazugehörigen Functions lösen :
Sub QuerQuersummenAddieren()
Dim lngZ As Long, lngErgebnis As Long
For lngZ = 1 To 1000000
lngErgebnis = lngErgebnis + QuerQuersumme(lngZ)
Next
MsgBox lngErgebnis, vbOKOnly, "Summe aller einstelligen Quersummen : "
End Sub
Function QuerQuersumme(zahl)
'Rekursive Berechnung der Quer-Quersumme :
Dim intT As Integer, intS As Integer
If Abs(zahl) 

Function Quersumme(zahl)
'Lineare Berechnung der Quersumme :
Dim intT As Integer, intS As Integer
For intT = 1 To Len(CStr(zahl))
intS = intS + Val(Mid(CStr(zahl), intT, 1))
Next
Quersumme = intS
End Function
Gruß, NoNet
Anzeige
Jetzt fehlt ja bloß noch ein FmlVorschlag...
25.10.2009 04:48:57
Luc:-?
...von WF, Leute... ;-)
Übrigens, lest mal im dt.Wikipedia nach, was man alles mit einer Quersumme machen kann und was es da so alles gibt... Eine Profi-udF müsste das dann auch alles drauf haben... ;-)
Man kann mit einer solchen udF bspw auch Dual- in Dezimalzahlen konvertieren wie man hier sehen kann...
A1⇒110101 → A2⇒53 ← =DiSum(A1;2) bzw dito ← =BININDEZ(A1)
SchöSo, Luc :-?
Formellösung fehlt ? - bitte sehr
29.10.2009 22:36:57
FP
Hallo Luc,
den Vorgaben entsprechend - also Summe aller Quer-Quersummen der Zahlen von 1 bis x
in A1 steht die gesuchte Grenzzahl z.B. 1.000.000
=KÜRZEN(A1/9)*45+(1+REST(A1;9))*REST(A1;9)/2
Ergebnis für die Zahlen 1 bis 1 Mio: 4.999.996
wer es nicht glaubt, kann es ja mit den VBA-Lösugnen nachkontrollieren.
Servus aus dem Salzkammergut
Franz
Anzeige
Mann, das ist ja ein echter xlKiller,...
25.10.2009 19:27:32
Luc:-?
...Leute,
jedenfalls kommt wohl 15 016 raus...
[eine Zelle mit Formel {=SUMME(SumQSum(ZEILE(1:50000));SumQSum(ZEILE(1:50000)+50000))} mit simpler Aufaddier-udF SumQSum, die intern udF DiSum verwendet]
xl12 hatte größere Probleme damit als xl9...
Gruß Luc :-?
Mann, das sind ja Spitzen-Betreffs :-( oT
25.10.2009 19:53:31
Bernd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige