Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Quersumme im hexadezimalsystem

Forumthread: 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

Anzeige

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
>

Anzeige
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

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

Anzeige
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
;
Anzeige
Anzeige

Infobox / Tutorial

Quersumme im Hexadezimalsystem


Schritt-für-Schritt-Anleitung

Um die Quersumme im Hexadezimalsystem in Excel zu berechnen, kannst Du eine benutzerdefinierte Funktion (UDF) in VBA verwenden. Hier sind die Schritte:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und dann auf Modul, um ein neues Modul zu erstellen.
  3. Kopiere den folgenden Code in das Modul:
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"
                i3 = i3 + (Asc(s) - 55)
            Case Else
                QS_Hex = "falscher Übergabestring - kein gültiger (Hex)-Zahlenwert!"
                Exit Function
        End Select
    Next i1
    If QS_Hex = "" Then
        QS_Hex = i3
    End If
End Function
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Verwende die Funktion, indem Du in eine Zelle =QS_Hex("73A") eingibst, um die Quersumme von 73A zu berechnen.

Häufige Fehler und Lösungen

  • Fehler: "falscher Übergabestring - kein gültiger (Hex)-Zahlenwert!"

    • Lösung: Stelle sicher, dass der übergebene Wert nur gültige hexadezimale Zeichen (0-9, A-F) enthält.
  • Fehler: Die Funktion gibt #NAME? zurück.

    • Lösung: Überprüfe, ob das Modul mit der UDF gespeichert wurde und dass Du die korrekte Schreibweise verwendest.

Alternative Methoden

Falls Du keine VBA verwenden möchtest, kannst Du auch eine Matrixformel nutzen:

  1. Setze den hexadezimalen Wert in Zelle A1.
  2. Verwende die folgende Formel und bestätige sie mit STRG + SHIFT + ENTER:
=SUMME({0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15} * (TEIL(A1;ZEILE(INDIREKT("1:"&LÄNGE(A1)));1) = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}) * 1)

Praktische Beispiele

  • Beispiel 1: Berechnung der Quersumme von 73A.

    • Eingabe: =QS_Hex("73A")
    • Ausgabe: 20 (7 + 3 + 10)
  • Beispiel 2: Quersumme von "1F".

    • Eingabe: =QS_Hex("1F")
    • Ausgabe: 16 (1 + 15)

Tipps für Profis

  • Verwende die iterierte Quersumme, wenn Du die Quersumme mehrmals berechnen möchtest, bis Du eine einstellige Zahl erhältst. Das kann hilfreich sein, um die Quersumme von komplexen Werten zu ermitteln.

  • Wenn Du mit großen Datenmengen arbeitest, nutze die SUMMENPRODUKT-Funktion für eine effizientere Berechnung.


FAQ: Häufige Fragen

1. Wie kann ich die Quersumme von 123 in Excel berechnen? Verwende die Funktion =QS_Hex("7B"). Die Quersumme von 123 im Hexadezimalsystem (7B) ist 7 + 11 = 18.

2. Was ist die Quersumme von 14 in Hexadezimal? Die Quersumme von 14 (entspricht "E") ist 14 (E = 14).

3. Kann ich eine Excel-Formel für die Quersumme verwenden? Ja, Du kannst die oben angegebene Matrixformel verwenden, um die Quersumme ohne VBA zu berechnen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige