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

Quersumme im hexadezimalsystem

Quersumme im hexadezimalsystem
07.01.2014 20:24:01
Alifa
Hallo,
kennt jemand ein Makro für Quersumme von Zahlen im Hexadezimalsystem? Hier sind bei manchen Zahlen die Buchstaben A,B,C,D,E,F vorhanden. Bei der Quersumme gilt:A=10; B=11; C=12; D=12 ; E=14; F=15.
Die Ausgabe im Dezimalsystem. Beispiel: 1850 dargestellt im Hexadezimalsystem:73A. Die Quersumme ist 7+3+10=20. Danke im Voraus,
Alifa

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Quersumme im hexadezimalsystem
07.01.2014 21:03:03
Luschi
Hallo Alifa,
hier mal mein 1. Versuch:

Option Explicit
Function QS_Hex(xHex As String) As Variant
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim s As String
i3 = 0
i2 = Len(xHex)
QS_Hex = ""
For i1 = 1 To i2
s = UCase(Mid(xHex, i1, 1))
Select Case s
Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
i3 = i3 + CInt(s)
Case "A", "B", "C", "D", "E", "F"
'Asc("A") = 65
i3 = i3 + (Asc(s) - 55)
Case Else
QS_Hex = "falscher Übergabestring - kein gültiger (Hex)-Zahlenwert!"
Exit For
End Select
Next i1
If QS_Hex = "" Then
QS_Hex = i3
End If
End Function
Sub test_QS()
MsgBox QS_Hex("73A")
End Sub
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Quersumme im hexadezimalsystem
07.01.2014 21:19:19
Luschi
Hallo Alifa,
hier eine kleine Verkürzung:

Function QS_Hex(xHex As String) As Variant
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim s As String
i3 = 0
i2 = Len(xHex)
QS_Hex = ""
For i1 = 1 To i2
s = UCase(Mid(xHex, i1, 1))
Select Case s
Case "0" To "9"
i3 = i3 + CInt(s)
Case "A" To "F"
'Asc("A") = 65
i3 = i3 + (Asc(s) - 55)
Case Else
QS_Hex = "falscher Übergabestring - kein gültiger (Hex)-Zahlenwert!"
Exit For
End Select
Next i1
If QS_Hex = "" Then
QS_Hex = i3
End If
End Functionß von Luschi
aus klein-Paris
>

AW: Quersumme im hexadezimalsystem
07.01.2014 23:38:25
Alifa
Hallo,
das passt! Vielen Dank an alle Beteiligten. Keine Ahnung von "klein-Paris"?!
Viele Grüße aus dem Oberbergischen, Alifa

Anzeige
Geläufige Bezeichnung für L wie Goethe! ;-) orT
08.01.2014 01:05:46
Luc:-?
Stichworte: Faust, Mephisto, Auerbachs Keller
Gruß Luc :-?

Ja, dafür gibt es die UDF DiSum, ...
07.01.2014 23:21:16
Luc:-?
…Alifa… ;-]
Hier mal der entsprd Auszug aus der HilfeDatei des zugehörigen AddIns FXsubset von LSr:CyWorXxl:
Argumente: benötigt ; optional=Default für Vorgaben z.T. [engl] Synonyme möglich
DiSum ( ZahlText; WichtBasis=1; QStep=1; Iterat=0; ignoZ=leer )
Ergebnis: Zahl, Text bzw Fehlerwert
Quersumme, (nicht) alter­nie­rend, einer Zahl (auch hexa­dezimal) mit Wich­tungs­mög­lich­keit
In Arg2 kann eine Wich­tungs­basis (radi-/potenziert mit Posi­tion von rechts - 0/1) ange­geben werden.
Funktionsargumente:
• Arg1 → ZahlText
Zahl(entext), auch hexadezimal [A…F]
• Arg2 → WichtBasis
Wichtungspotenzbasis X [=X^0…n-1, /rwX=X^1/1…n] bzw WFolge x [{VZRWHx, hwrzv}x], hexadez.[#hHxX u/o xX=A…F]; -…X alternierend
• Arg3 → QStep
Schrittweite s (s-Quersumme = Q. zur Basis 10 s); Default s=1 (stellenweise von rechts); s<0=s-Teil-Qn
• Arg4 → Iterat
Wahr = iterativ bis zur Stelligkeit lt Arg3 bzw < Max(10, Arg2), wenn Arg2 Einzelwert ist
• Arg5 → ignoZ
Zeichenfolge mit in Arg1 zu ignorierenden Zeichen; fehlt = kein Zeichen wird entfernt
 Bsp1: a) 6 =DiSum(123),      c) 83 =DiSum(123;-10),   e) 38,47899001 =DiSum(123;"/10"),
          b) 2 =DiSum(123;-1),  d) 83 =DiSum(123;8),      f) 4,431493925 =DiSum(123;"-/2"),
          g) 25,17 =--DiSum("10 0101,0001 0111";2;-4;" ")
 Bsp2: a) 30 =DiSum("FF";"#"),  b) 255 =DiSum("FF";"#16"),  c) 3615 =DiSum("FFF";"-h16"),  d) 227,4662121 =DiSum("10F";"/F"),
          e) A1:C1 enthalte 19 19 19 , 20 , 2 (A1-Format: ##" "##" "#0) 7999 =DiSum(A1;B1;C1)
 Bsp3: a) 14 =DiSum(123;"}3 2 1"),  b) 14,23 =DiSum(123,45;"v{3.2.1}"),  c) 2x2/4-6a =DiSum("123x45/67-89a";"Z3 -2 1"),
          d) A1:C1 enthalte 1 , 3 , 2 28 {=DiSum(123456788;"z"&RinMxList({1.-1.1}*MTRANS(A1:C1);-2))} Arg1 durch 7 teilbar º
 Bsp4: a)   3 =DiSum(123453489;;;1),    c)    5 =DiSum("FF";"H0";;1) [hier 00 → 1],    e) 4 =DiSum(222;"{1.+0,5.0,5}") dt Arg2-Notation,
          b) 66 =DiSum(123453489;;3;1),  d) 932 =DiSum(123453489;"z{3.2.1}";3;1),  f) 4 =DiSum(222;"{1.0,0.5,0.5}") US-Arg2-Notation
Hinweis: Bei Bildung der k-Quer­summe¹ (zur Basis bk, b=10 im Dezi­mal­sys­tem) einer n-stel­ligen Zahl z (zn…z1) mit zi=[ [z/bik]mod/bk(i-1)]int↓ für i=1…[n/k]int↑ kön­nen fol­gen­de Ver­fah­ren unter­schieden werden:
• Einfache nicht alter­nie­rende Q. q(z)k=∑zi → Arg2 darf feh­len (→ Bspp1a/2a)
• Einfache alter­nie­rende Q. qa(z)k=∑zi(-1)i-1 → Arg2=-1 (→ Bsp1b)
• Faktorpotenzierend² (mit f lt Arg2) gewich­tete nicht alter­nie­rende Q. qwp(z)k=∑zif i-1 → Arg2>1 (→ Bspp1d/2be)
• Faktorpotenzierend² (mit f lt Arg2) gewich­tete alter­nie­rende Q. qawp(z)k=∑zi(-f )i-1 → Arg2<-1 (→ Bspp1c/2c)
• Faktorradizierend³ (mit f lt Arg2) gewich­tete nicht alter­nie­rende Q. qwr(z)k=∑zif 1/i → Arg2 beginnt mit /, W,w bzw R,r (→ Bspp1e/2d)
• Faktorradizierend³ (mit f lt Arg2) gewich­tete alter­nie­rende Q. qawr(z)k=∑zi(-1)i-1f 1/i → Arg2 beginnt mit -/,… (dito, → Bsp1f)
• Mit Zahlenfolge⁴ (als Text bzw text­lie­fern­der Aus­druck in Arg2) bzw ihren Kehr­wer­ten ge­wich­tete Q. qw(z)k=∑zifj±1 (fj=f1,…,fm für m≥n)
  → Arg2 beginnt mit ± {,Z,V,H,W,R für j=1-i+[n/k]int↑ bzw r,w,h,v,z,} für j=i (R,r,W,w,/H,/h bzw #R,#r,#W,#w Kehr­werte; → Bspp3/4d…f)
• Iterierte Q. qi(z)k in allen Vari­anten⁵ → Arg4=1 hat Prio­rität ab 1.Itera­tion (Pri­mär­ergeb­nis wird zuvor ganz­zah­lig gerun­det)
  → Ergeb­nis ist maxi­mal k-stel­lig (Arg3), dabei wird das Wich­ten ggf unter­las­sen⁵ (→ Bspp4a…d)
Wenn Arg1 meh­rere durch Text ge­trenn­te Zah­len (auch hexa­dezi­mal A…F, in Arg2 mit # bzw H,h vor [dezi­malem] Wert bzw vor der Zah­len­folge oder A…F [auch in Zah­len­folge] ange­zeigt) ent­hält (und/oder Arg3 nega­tiv ist), wird Arg2 auf jede dieser Zah­len von Neuem ange­wen­det (bzw lücken­los ver­knüpfte Teil-QSummen gebildet → Bsp1g). Dabei darf eine Zah­len­folge nicht weni­ger Werte ent­hal­ten als die läng­ste Zahl Zif­fern hat (→ Bspp3bc). Zuvor werden aus Arg1 die Zeichen ent­fernt, die optio­nal in Arg5 ange­geben werden können (→ Bsp1g).
Wenn die Zah­len­folge Dezi­mal­brü­che ent­hält, muss auch der 1.Wert als Dezi­mal­bruch oder der 2.Wert mit Vor­zei­chen (→ Bspp4ef) ange­ge­ben wer­den, da­mit die Nota­tions­form sicher iden­ti­fi­ziert wer­den kann.
qwp kann auch ein­ge­setzt wer­den, um Zah­len ande­rer Zah­len­sys­teme⁷ ins Dezi­mal­sys­tem zu kon­ver­tieren (→ Bspp1dg/2be). Da­bei bie­tet die An­gabe von k>1 in Arg3 die Mög­lich­keit, in Arg1 Zah­len aus 'mehr­stel­li­gen', weil dezi­mal dar­ge­stell­ten Zif­fern (bspw des Vige­si­mal­sys­tems, → Bsp2e) anzu­geben (k<0 kann zur Kon­ver­tie­rung von Binär­werten aus dual notier­ten Dezi­mal­zif­fern zu Dezi­mal­zah­len benutzt wer­den). Bei Itera­tion wer­den sol­che qwp-Fälle berück­sich­tigt, wes­halb ihr Ergeb­nis hier stets < Wich­tungs­ba­sis (Arg2) sein muss (das gilt auch für hexa­dezi­mal ange­ge­bene Zah­len). In allen ande­ren Fäl­len gibt Arg3 auch die Maxi­mal­stel­lig­keit des Itera­tions­ergeb­nis­ses vor, die aber auch unter­schrit­ten wer­den kann (→ Bsp4bd). Eine mathe­ma­tisch sinn­volle Itera­tion lie­fert im Dezi­mal­sys­tem da­hin­ge­gen stets ein ein­stel­li­ges Ergebnis.

xlAlternativen {Matrix­formel bzw -funk­tion}
- für 1a: =SUMMENPRODUKT(1*TEIL(123;ZEILE(INDIREKT("1:"&LÄNGE(123)));1))
- für 1b: {=SUMME(1*TEIL(123;ZEILE(INDIREKT("1:"&LÄNGE(123)));1)*-1^(LÄNGE(123)-ZEILE(INDIREKT("1:"&LÄNGE(123)))))}
- für 1e: {=SUMME(1*TEIL(123;ZEILE(INDIREKT("1:"&LÄNGE(123)));1)*10^(1/(LÄNGE(123)+1-ZEILE(INDIREKT("1:"&LÄNGE(123))))))}
- für 1f: =SUMMENPRODUKT(1*TEIL(123;ZEILE(INDIREKT("1:"&LÄNGE(123)));1)*-1^(LÄNGE(123)-ZEILE(INDIREKT("1:"&LÄNGE(123))))*2^(1/(LÄNGE(123)+1-ZEILE(INDIREKT("1:"&LÄNGE(123))))))
- für 2e: [gemeingültig ] =SUMMENPRODUKT(1*TEIL(WIEDERHOLEN(0;REST(LÄNGE(A1);C1))&A1;C1*ZEILE(INDIREKT("1:"&AUFRUNDEN(LÄNGE(A1)/C1;0)))-1;C1)*B1^(AUFRUNDEN(LÄNGE(A1)/C1;0)-ZEILE(INDIREKT("1:"&AUFRUNDEN(LÄNGE(A1)/C1;0)))))
- für 3a: =SUMMENPRODUKT(--TEIL(123;ZEILE(INDIREKT("1:"&LÄNGE(123)));1);ZEILE(1:3))
- für 3d: =SUMMENPRODUKT(A1:C1*{1;-1;1};--TEIL(123456788;LÄNGE(123456788)+1-SPALTE(A:C)-3*(ZEILE(1:3)-1);1))

º 0 =REST(123456788;7)
¹ Ziffern­summe einer Zahl [engl. DigitSum ]… Die Funk­tion kann mit xxlFkt TransFor und mit XLM-Fkt AUSWERTEN in be­nann­ten For­meln i.d.R. ausge­wertet wer­den, wodurch die sonst weit­gehend fehlende Matrix­formel­fähig­keit aus­gegli­chen werden kann (Ausnahme: ein­zel­lig, → Bsp3d). Arg2=0 führt wegen inter­nem 0°=1 zur Wahl der je­weils letzten Ziffer.
² Arg1-Zif­fern von rechts nach links mit Arg2-Poten­zen 0,1,2,… multi­pliziert.   ³ Arg1-Ziffern von rechts nach links mit Arg2-Po­ten­zen 1/1,2,3,… multi­pli­ziert.
1.Symbolgruppe: (Kehr-)Werte der Reihe werden von links nach rechts mit den Zif­fern von Arg1 multi­pli­ziert;  2.Symbol­gruppe: (Kehr-)Werte werden von rechts nach links mit den Zif­fern von Arg1 multi­pli­ziert. Bei Über­zahl ent­fal­len stets die letz­ten Werte der Reihe. Ein Listentext in Form einer {Matrix­kon­stan­ten} als Text (bspw im Ergeb­nis der xxlFkt RinMxList, →FMod4Area) kann direkt (als Text! ) oder als Ausdruck ver­wen­det wer­den (ggf ± v, z, r, w bzw h,H, /h,/H voran­stel­len). Diffe­renz­bil­dung hängt hier aus­schließ­lich von den Arg2-Wer­ten ab. Ein ihnen voran­ge­stell­tes Minus­zei­chen beein­flusst stets alle Werte.
Iteration ist nur mit einer ein­zel­nen Ganz­zahl als Arg1 mög­lich! Da auch die Itera­tion von qw wenig sinn­voll sein mag, wird hier die Wich­tung ab Errei­chen der Stellen­anzahl von Arg2 durch das Itera­tions­zwi­schen­er­geb­nis bzw bei seinem 'Anwach­sen' einge­stellt. Des­halb lie­fert die wieder­holte Anwen­dung ohne Itera­tion auf eine Zahl (Sekun­där­itera­tion) u.U. ein ande­res Ergeb­nis als die ein­ma­lige Anwen­dung mit Itera­tion (Primär­itera­tion). Das gilt auch für die Alter­nie­rung. D.h., sol­che Ope­ra­tionen kön­nen bei Bedarf zwar durch­geführt wer­den, ihr mathe­mati­scher Sinn ist aber unbe­stimmt und ihr Ergeb­nis somit indif­ferent.
Matrix­formel
{=SUMME(…)} und -funk­tion SUMMENPRODUKT(…) sind hier i.d.R. aus­tausch­bar (außer für Bspp3ad).
Bei Dual­zahlen können inte­grierte Minus­dar­stel­lungen nicht berück­sich­tigt werden! Ebenso eignen sich Zah­len mit Dezi­mal­trenn­zei­chen wenig für eine der­ar­tige 'Ersatz'-Kon­ver­tie­rung (vgl xxlFkt ConVar und xxlFkt ConBin, →FMod7Divs).

Vs 2.1b -Autor: LSr -1Pub: nie -CDate: 2003/4 -LUpd: 20090616n
Hinweis: Nicht auf die Links klicken, sie führen hier nirgendwohin!
Gruß Luc :-?

Anzeige
AW: Quersumme im hexadezimalsystem
08.01.2014 18:12:37
coachyou
Hallo Alifa,
hier noch eine Lösung per Matrixformel, Eingabe mit Strg+Shift+Enter, Wert in A1:
=SUMME({0.1.2.3.4.5.6.7.8.9.10.11.12.13.14.15}*(TEIL(A1;ZEILE(INDIREKT("A1:A"&LÄNGE(A1)));1) ={"0"."1"."2"."3"."4"."5"."6"."7"."8"."9"."A"."B"."C"."D"."E"."F"})*1)
Gruß coachyou

AW: Quersumme im hexadezimalsystem
10.01.2014 09:37:43
Alifa
Hallo coachyou,
Formeln sind nicht so mein Ding, trotzdem danke für den Beitrag!
Gruß,Alifa

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige