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

Makro für Modulo großer(16 stellige) Zahlen

Makro für Modulo großer(16 stellige) Zahlen
07.09.2018 23:15:25
alifa
Hallo,
wie kann man mit einem Makro Mod 2, Mod 3..bis Mod 16 einer 16 stelligen Zahl prüfen? Wie prüft man ob die ersten 14 Ziffern der Zahl mit 13 restlos teilbar ist? Das Problem ist die Größe der Zahl.
Danke in Voraus, alifa

43
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro für Modulo großer(16 stellige) Zahlen
07.09.2018 23:43:10
daniel
Hi
bei Zahlen, die zu groß für die Funktion MOD sind, aber noch innerhalb der Genauigkeitsgrenzen von Excel liegen (15 Stellen) kannst du so prüfen, ob eine Zahl x durch y teilbar ist:
If (x/y) = INT(x/y) Then
den Rest berechnest du dann so
... = x - y * Int(x/y)

sollte die Anzahl der Stellen die 15 überschreiten, aber kleiner gleich 20 sein (wobei ich mir da nicht genau sicher bin, wo die grenze liegt) könntest du dir noch mit der Funktion CDec behelfen:
dim x as Variant
x = CDec("1234567890123456")
if (x / 13) = int(x / 13) then
msgbox "Durch 13 teilbar"
Else
msgbox "nicht durch 13 teilbar"
end if
die ersten 14 Stellen einer Zahl bekommst du so:
=CDbl(Left(Format(x, "0"), 14))

Gruß Daniel
Anzeige
AW: Makro für Modulo großer(16 stellige) Zahlen
08.09.2018 00:00:46
daniel
habs noch mal getestet, das CDec funtioniert bis 29 Stellen, das sollte für deine Zwecke ausreichen.
Gruß Daniel
AW: Makro für Modulo großer(16 stellige) Zahlen
08.09.2018 10:02:48
alifa
Danke für die Hilfe. Wieder mal klar und deutlich!
Gruß, alifa
Das ist schon der richtige Ansatz, ...
08.09.2018 03:38:38
Luc:-?
…Daniel (& Erhard),
allerdings kann die Xl-Fkt MOD (REST) bis zu 14stellige Zahlen verarbeiten, der vbOperator Mod kann ebenso wie VBAs Operator \ (ganzzahlige Division) nur maximal 10stellige Zahlen divi­die­ren, sonst kommt es zum Über­lauf. Der vbOperator / kommt mit größe­ren Zahlen zurecht, weshalb er hier angewendet wdn muss. Die vbFktt Int und Fix können die dann auch zu Ganzzahlen machen, wobei letztere angeraten ist, wenn man auch für negative Dividenden ein Ergebnis analog der vbFkt Mod erzielen will. Mit Int ent­spricht das Ergebnis in diesem Fall eher dem der XlFkt. In manchen PgmmierSprachen wird deshalb zwischen modulo (mathemat mod) und remainder unterschieden, ansonsten steht mod mal für das Eine, mal das Andere. Mod in Basic-Dialekten (auch VBA) entspricht dabei rem, die Xl-Fkt (math) mod.
Mit der vbFkt CDec wird der nicht-deklarierbare Datentyp Decimal erzeugt. Da dann auch der UDF-Rückgabewert decimal ist, bleibt ein temporäres Negativ-Vorzeichen erhalten, so dass nachfolgd UDF (Trivial-Version) bei Anwendung in einer ZellFml ggf -0 (rote Null) liefert, was dann von Xl nicht als =0 (schwarze Null) gewertet wird. Im VBE wird dieser Unterschied nicht sichtbar. Mit CLng bzw Deklarierung der UDF As Long wird das vermieden:
Function xMod(Dividend, Divisor)
Dim dd, dv As Variant
dd = CDec(Dividend): dv = CDec(Divisor)
xMod = CLng(dd - dv * Fix(dd / dv))
End Function
Eine ZellFml sähe dann so aus: =xMod(A1;16) für eine (16stellige) TextZahl in A1 (remainder 16).
Die mögliche Länge einer der UDF übergebenen TextZahl liegt übrigens über 20 (mind 22). ;-)
🙈 🙉 🙊 🐵 Morhn, Luc :-?
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige
Ah-ja, sah ich leider erst jetzt! ;-) owT
08.09.2018 03:42:12
Luc:-?
:-?
... beim Eierkauf...
08.09.2018 03:58:09
Augen
:-)
Hatte nach 23h m.keiner Präzisierg gerechnet!
08.09.2018 14:49:26
Luc:-?
Du etwa (mit Eiern)…‽ ;-]
Luc :-?
AW: RPP63
08.09.2018 09:48:46
Fennek
Hallo,
RPP63 hat diesen Code entwickelt:

RPP63
Function BigModulo&(Basis&, Exponent&, ModOp&)
Dim i&
BigModulo = 1
For i = 1 To Exponent
  BigModulo = (BigModulo * Basis) Mod ModOp
Next
End Function
Bei Bedarf kann ich auch ein xlsx mit dem Formel-Äquivalent hochladen.
mfg
An einen Bedarf Alifas glaube ich eher nicht, ...
08.09.2018 18:00:06
Luc:-?
…Fennek,
er hat sich ja auch nicht für meine Ausführungen interessiert, die aber auch eher an die Allgemeinheit (& Daniel) gerichtet waren und Erhard wohl ohnehin kaum verstanden haben wird… ;-]
Bei Ralfs UDF ist aber nicht ganz klar, wie die Argumentierung ausfallen soll. Auch die Deklarierung aller Argumente als Long deutet eher auf eine FallStudie (bzw TeilLösung), weniger auf eine praktische Anwendbarkeit auf das Problem überlanger Zahlen hin und Mod ist nun mal auf 10stellige Zahlen, BigModulo wohl gar auf 9stellige, begrenzt. In diesem Zusammenhang könnte ein/e Anwen­dungs­Bsp/-Beschreibung hilfreich sein, um den eigentl Zweck besser verstehen zu können.
Nachtrag zu Decimal:
Daniel hätte nicht testen müssen, denn in der VBE-Hilfe steht's ja (29 Stellen ist zu simpel!):
Ein Datentyp, der Zahlen als Potenzen zur Basis 10 enthält. Für Zahlen ohne Nachkommastellen liegt der Wertebereich innerhalb ±79 228 162 514 264 337 593 543 950 335. Für Zahlen mit 28 Nachkommastellen liegt der Wertebereich innerhalb ±7,9228162514264337593543950335. Die kleinste positive Zahl mit einem Wert ungleich Null, die als Wert vom Typ Decimal dargestellt werden kann, ist 0,0000000000000000000000000001. (Ergänzung von mir)
Gruß, Luc :-?
Anzeige
AW: An einen Bedarf Alifas glaube ich eher nicht, ...
08.09.2018 19:49:23
Daniel
Hi Luc
warum schreibst du deine Beiträge für Menschen, die das momentan nicht intressiert (die Allgemeinheit) und nicht für denjenigen, der das Problem aktuell hat?
Gruß Daniel
AW: Wollte sich doch nur entschuldigen, weil er ..
08.09.2018 20:22:37
Gerd
Hi
.. nicht alle Beiträge gelesen hatte. :-)
Gruß Gerd
Was soll die blöde Bemerkung, ...
09.09.2018 02:40:08
Luc:-?
Daniel?
Ist dir nicht aufgefallen, dass Erhard alias alifa meine AW nicht mal erwähnt hat? Das hatte ich allerdings auch nicht unbedingt erwartet (kenn ich schon)! Deshalb hatte ich auch primär dich angesprochen, denn du hattest ja decimal ins Spiel gebracht. Und der BT, den du nun unbedingt sachfremd kommentieren musstest, war an Fennek (bzgl Ralfs UDF) gerichtet und du nur nebenbei erwähnt… :-]
Im Übrigen solltest du ja wissen, dass es hier mehr stille Mitleser als Fragesteller gibt. In Foren wie OL wird das dank KlickZählern auch deutlich…
Und was das „Entschuldigen“ betrifft, Gerd,
bezog sich der betreffende obere Beitrag nur auf Daniels Nachtrag mit den 29 Stellen. Nur den hatte ich noch nicht gesehen als ich meinen 1.BT gesendet habe.
Morhn, Luc :-?
Anzeige
AW: Was soll die blöde Bemerkung, ...
09.09.2018 11:12:32
Daniel
warum sollte alifa deinen Beitrag erwähnen?
du hast ja explizit mich angesprochen und nicht ihn.
Warum nennst du ihn eigentlich Erhard?
Wäre es für dich ok, wenn hier jemand statt luc deinen Realnamen verwenden würde?
Du bist doch ein Anhänger von Vornamen, ...
09.09.2018 14:01:32
Vornamen,
…Daniel,
sogar nicht nur in der GrußFormel… :-]
Ansonsten ist die Alifa-Geschichte schon alt und deshalb kenne ich den, ebenso wie bspw deinen Nachnamen oder den echten von Rudi M.
Und mein NickName ist ja nun fast mit der Kurzform meines echten Vornamens identisch, nur etwas anders geschrieben… ;-)
Luc :-?
AW: Du bist doch ein Anhänger von Vornamen, ...
09.09.2018 14:14:26
Vornamen,
ich bin ein Anhänger davon, jeden Menschen so anzusprechen, wie er sich das wünscht, dh mit dem Namen, den er selbst für sich verwendet.
Anzeige
Das las sich schon mal anders...! owT
09.09.2018 15:28:41
Luc:-?
:-?
dann hast du das damals falsch interpretiert
09.09.2018 15:51:19
Daniel
weil ich mich damals vielleicht einfach auf
09.09.2018 16:05:04
Daniel
die Forums-FAQ bezogen habe in welcher steht, dass NicNames nicht erwünscht sind.
Aber nur in der Grußformel und Anrede! owT
10.09.2018 02:08:11
Luc:-?
:-?
das kann ich so aus der FAQ nicht herauslesen
10.09.2018 15:50:36
Daniel
die macht da keinen Unterscheid zwischen Anrede und Nickname.
btw. in Foren, die einen eindeutigen Nicknamen verlangen, meldest du dich ja gar nicht erst an.
ansonsten ist es einfach eine Frage er Höflichkeit und Respekts, den Namen zu verwenden, den sein Gegenüber sich ausgesucht hat.
Erst wenn dieser (zweckmäßig) 1-deutige Nickname …
10.09.2018 19:37:57
Luc:-?
…anstelle eines in den FAQ geforderten Vornamens auch in der Kommunikation gebraucht wird, wäre das ein Verstoß gg den Sinn des folgd FAQ-Zitats: „Nenne Deinen Vornamen, damit man Dich ansprechen kann.“ Es könnte ja auch (irgend-)ein Vorname sein, nicht etwa sowas wie rumpelstilzchen23!
Und da alifa den schon mal diesbzgl verwendet hatte, konnte ich ihn auch benutzen, ganz im Sinne der FAQ-Forderung zur Kom­mu­ni­kation untereinander… :-]
Ein Nickname unter Name dient dagg als eindeutiger Ersatz des vollen Namens, ganz im Sinne der DSGVO, die hier Vorrang haben muss, auch, wenn das für einen am Buchstaben Klebenden nicht eindeutig zu sein scheint. Die Praxis ist hier und anderswo schon lange so…
Woher willst du übrigens wissen, dass ich anderswo nicht auch angemeldet bin? Nur, weil ich, falls dort möglich, das kaum nutze?
Luc :-?
Anzeige
AW: Nicki Lauda
10.09.2018 19:45:29
Gerd
Hi Luc,
bist du nur im Clever-Forum gesperrt gewesen oder auch bei Online-Excel?
Gruß Gerd
OT: Offiziell nur im CEF, nicht angemeldet ...
10.09.2018 20:05:22
Luc:-?
…im MOF (schlechte Erfahrungen mit Karma & Co), nicht neu angemeldet bei Spotlight, Gerd;
das verblichene OlXl (OEF) ist ein Sonderfall, weil dort jemand, der es konnte, in dessen letzten Wochen eine auf mein Einloggen reagierende indirekte Sperre mit Verbindungsprobleme vortäuschender Meldung eingebaut hatte, also eine besonders perfide Sperr-Variante, weshalb ich annehme, dass das auf einen bestimmten CEF-OEF-„Doppelagenten“ zurückging.
Ansonsten kann man in Foren zu auch politischen Themen noch ganz andere Moderatoren-Willkür und von Forum zu Forum kon­träre -Einschätzungen erleben…
Gruß, Luc :-?
Anzeige
Weil du gerne und viel über dich selber redest
10.09.2018 22:11:19
Daniel
Gern und viel 'redest' ja du erst recht, ...
11.09.2018 00:25:25
Luc:-?
…wenn auch kaum über dich, so doch über deine Xl-Lieblingsmethoden und -abneigungen. Summa summarum kam bei deinen Palavern in den letzten Jahren wohl mehr Text zusammen.
Aber inwiefern nun dein Betreff irgendetwas mit meinem BT zu tun hätte, entzieht sich aufmerksamer Betrachtung; wohl eher ein Ausweichmanöver…!
Luc :-?
natürlich rede ich über Excelthemen, dies ist ja
11.09.2018 00:59:24
Daniel
auch ein Excelforum.
So, so, deine endlosen spitzfindigen und ...
11.09.2018 19:26:12
Luc:-?
…oft unsachlichen Nachbohrereien fallen für dich auch noch unter fachlich, meine Hinweise auf UDFs u.ä. rechnest du aber mit zu SmallTalk (der ja auch mal sein kann)…‽
Erwarte keine weitere AW! Die ist mir (vorerst oder überhpt) nicht möglich.
Luc :-?
Anzeige
jetzt wirds absurd
11.09.2018 20:14:05
Daniel
ähm Luc, wenn ich dich darauf aufmerksam machen darf, dann warst du selber es, der sich die Mühe gemacht hat meine Beiträge bezüglich ihrer Fachlichkeit zu berwerten.
Ich habe dazu nichts geschrieben.
Das ist es schon lange! Ciao! owT
12.09.2018 02:11:54
Luc:-?
:-?
Übrigens, ...
09.09.2018 14:22:01
Luc:-?
…woher weißt du denn, dass es sich bei alifa, im Ggsatz zu bspw amira um einen Er handelt? Oder schließt du das nur aus (meinem) Erhard?
Luc :-?
Korr: Meinte 'amina'! owT
11.09.2018 00:27:24
Luc:-?
:-?
Bezüglich der UDF
09.09.2018 09:01:44
RPP63
Moin Luc und Fennek!
Mit meiner UDF (in der ich lediglich einen im Netz zu findenden Algorithmus umgesetzt habe) habe ich auf eine konkrete Aufgabenstellung reagiert.
Wer mag, kann sich den Thread (auf den der TE übrigens auch nicht reagiert hatte) ja mal ansehen.
Dort ging es explizit um die Ermittlung von 348^15 mod 1357
http://www.clever-excel-forum.de/Thread-Mod-Rest-in-VBA-oder-Formel
Deshalb mein Disclaimer:
Das U in UDF bedeutet nicht universell, sondern User. ;)
Gruß Ralf
Anzeige
AW: Bezüglich der UDF
09.09.2018 11:18:46
Daniel
naja, was hätte die Reaktion auch sein sollen?
in deiner Antwort fehlt ja noch der Hinweis, wie man zu einer beliebigen Zahl deren Basis und Exponent ermitteln kann.
Wie meinen?
09.09.2018 11:58:11
RPP63
Mit meiner UDF […] habe ich auf eine konkrete Aufgabenstellung reagiert.
Es ging nicht um Splittung einer beliebigen Zahl in Basis und Exponent, sondern um die Ermittlung des Modulo einer Zahl, die den von VBA geforderten Long (2.147.483.647) überschreitet!
Die Reaktion hätte bspw. sein können, dass er sich für die funktionierende Lösung bedankt.
Also eigentlich ganz einfach …
AW: Wie meinen?
09.09.2018 12:30:12
Daniel
ja und dazu muss man, wenn man deine Funktion verwenden will, diese in Basis und Exponent aufteilen, weil deine Funktion eben nicht die Zahl als Eingabeparameter verlangt, sondern Basis und Exponent.
versuch doch einfach mal, mit deinem Lösungvorschlag den Rest von
123456890123456789012345678 und 13 zu ermitteln.
Eine funktionierende Lösung für seine Frage
09.09.2018 13:27:48
Daniel
wäre folgende Funktion, welche den Rest berechnen kann für
- einen bliebig langen, als Text vorliegenden Dividenden
- einen Divisor bis zu 14 stellen länge.
Function BigModulo(TextZahl As String, Divisor As Double) As Double
Dim i As Long
Dim d As Double
For i = 1 To Len(TextZahl)
BigModulo = Val(Rest & Mid(TextZahl, i, 1))
If BigModulo > Divisor Then
BigModulo = BigModulo - Divisor * Int(Rest / Divisor)
End If
Next
End Function
Gruß Daniel
Die lag hier schon vor u.damit ist dein Umbau ...
09.09.2018 14:12:52
Luc:-?
…von Ralfs UDF, die für einen anderen Zweck bestimmt war, von dem Fennek meinte abstrahieren zu können, überflüssig, Daniel,
abgesehen mal davon, dass ich UDF-Umbauten unter gleichem Namen ablehne. Ralf kann ja wohl nicht dafür verantwortlich gemacht wdn, dass seine UDF hier von Fennek ins Spiel gebracht wurde. Aber naja, Besserwisserei und Sich-Anlegen-Wollen um (fast) jeden Preis kennt man ja von dir… :->
Luc :-?
AW: Die lag hier schon vor u.damit ist dein Umbau ...
09.09.2018 14:37:20
Daniel
Hi Luc
du darfst dir, wenn du meine Funktion für dich übernehmen willst, dir gerne einen anderen Namen ausdenken, das steht jedem frei.
Du hast in sofern recht, dass man
09.09.2018 14:51:27
Daniel
Fennek dafür verantwortlich machen müsste, dass er einfach einen Code aus dem Internet übernommen hat, ohne darauf zu schauen, ob dieser auch zur Fragestellung passt.
Gruß Daniel
Eben! Und ich muss nicht deine Adaption ...
10.09.2018 02:19:31
Luc:-?
…übernehmen, Daniel,
denn ich habe ja schon eine vglbare (TrivialVersion), die jetzt aber xRem heißt (→VBA-Mod), während xMod jetzt CInt verwendet (→Xl-MOD/REST). Was aus xMod wdn wird, hatte ich an anderer Stelle im Thread bereits erwähnt…
Luc :-?
wenn interessiert denn, welche Funktionen
10.09.2018 12:06:10
daniel
du alle hast und wie die heißen?
Dich bekanntlich nicht, aber xMod steht oben! owT
10.09.2018 14:35:05
Luc:-?
:-?
AW: Bezüglich der UDF - jetzt klar!
09.09.2018 14:50:36
Luc:-?
Ja, Ralf,
damit lagen ja sowohl Basis als auch Exponent bereits vor, was ich vermutet hatte. Also tatsächlich eine etwas andere Aufgabenstellung. Und natürlich weiß ich, was das U in UDF bedeutet… ;-]
Trotzdem ist Deine UDF insofern auch (relativ) universell, nämlich bezogen auf genau solche Vorgaben. Für andere muss man halt eine andere UDF benutzen, wie bspw eine auf Datentyp Variant mit Untertyp Decimal beruhende. Auch deshalb sind mir Daniels Attacken auf Deine UDF unbegreiflich…
Übrigens, meine TrivialVersion erweitere ich gerade auf Bereiche/Datenfelder für Dividend u/o Divisor und sowohl Remainder- (wie Mod in VBA) als auch Modulo-Variante (wie MOD/REST in Xl). (Deutsches REST würde allerdings besser zum VBA-Operator passen, denn MOD ergibt mathematisches Modulo!)
Nebenbei, musste zwischendurch den Browser wechseln, denn FF verweigert seit geraumer Zeit den Zugriff aufs CEF. Ist wohl schon die KI/AI bei Mozilla am Wirken… ;-]
Gruß + schöSo, Luc :-?

108 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige