HEX Code umdrehen
#1
Hallo zusammen,
Ich habe eine Excel Liste mit RFID Codes die ich umdrehen müsste :
in der Liste sind 500 Einträge die alle so aussehen :

8049DAAA4BB404 aber eigentlich müssten sie so aussehen : 04B44BAADA4980

nun suche ich nach einer Excel Formel um die 500 "verdrehten" Werte umzudrehen kann mir da jemand helfen mit Googlen bin ich leider nicht weiter gekommen Sad
Top
#2
Hola,

zur Info...

http://ms-office-forum.net/forum/showthr...p?t=335457

Gruß,
steve1da
Top
#3
Hi,

hab hier mal was probiert vielleicht Hilft das was:


Tabelle6
ABCD
11
128049DAAA4BB40404B44BAADA4980
13

verwendete Formeln
Zelle Formel Bereich N/A
C12=RECHTS(B12;2)&TEIL(B12;SUCHEN("";B12;11);2)&TEIL(B12;SUCHEN("";B12;9);2)&TEIL(B12;SUCHEN("";B12;7);2)&TEIL(B12;SUCHEN("";B12;5);2)&TEIL(B12;SUCHEN("";B12;3);2)&LINKS(B12;2)
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 19.15 einschl. 64 Bit



Das funktioniert natürlich nur wenn alle Werte gleich lang sind und nach dem selben Muster "verdreht"
Top
#4
Code:
Sub M_snb()
   c00 = "8049DAAA4BB404"
   
   sn = Split(Format(c00, Trim(Replace(Space(7), " ", "@@ "))))
   For j = 0 To UBound(sn)
      c01 = sn(j) & c01
   Next
   
   MsgBox c01
End Sub
Top
#5
Ja, Luffy,
deine Formel funktioniert für die Stellenzahl des Beispiels, ansonsten aber nicht, wie du ja bereits angemerkt hattest. Leider wird sich Hubi hier wohl nicht noch mal melden, da er ja bereits im MOF eine spezielle UDF nur für diesen Zweck bekommen hat. Ich nutze deshalb diese Gelegenheit, um zu zeigen, wie man mit universelleren UDFs, die auch noch anderweitig nutzbar sind, so etwas mit einer Formel hinbekommen kann (Quelle/Ergebnis in Form von Matrix­konstanten):
=VJoin(Reflect(VSplit(A1;2);"|");"")
Quelle (A1:A2): {"8049DAAA4BB404";"8049DAAA4BB4"}
Ergebnis: {"04B44BAADA4980";"B44BAADA4980"}
Das ist der Vorteil, wenn man so etwas „auf Lager“ hat, man muss nicht erst was Spezielles schreiben (wie EarlFred oder snb), sondern kann Fertiges verwenden. Wollte bzw müsste man nun auf die eine oder andere UDF verzichten, könnte man sie u.U. durch umfangreichere Formelteile ersetzen wie nachfolgend gezeigt:
{=WAHL(SPALTE(A1:B1);"Ersatz UDF2:";VJoin(INDEX(VSplit(A1;2);LÄNGE(A1)/2+1-SPALTE(INDIREKT("Z1S1:S"&LÄNGE(A1)/2;0)))&T(1^SPALTE(INDIREKT("Z1S1:S"&LÄNGE(A1)/2;0)));""))}
{=WAHL(SPALTE(A1:B1);"Ersatz UDF2+3:";VJoin(INDEX(TEIL(A1;2*(SPALTE(INDIREKT("Z1S1:S"&LÄNGE(A1)/2;0))-1)+1;2);LÄNGE(A1)/2+1-SPALTE(INDIREKT("Z1S1:S"&LÄNGE(A1)/2;0)))&T(1^SPALTE(INDIREKT("Z1S1:S"&LÄNGE(A1)/2;0)));""))}
Diese beiden Formeln sind duale MatrixFormeln, d.h., sie benötigen stets 2 ausgewählte Zellen, um ein richtiges Ergebnis zurückzugeben. Da aber eigentlich nur ein Ergebnis ermittelt wird, sorgt die Xl-Automatik für seine Verdopplung. Ich habe deshalb hier die überzählige Zelle zur Ausgabe eines Begleittextes genutzt:
Ergebnis - {"Ersatz UDF2:"."04B44BAADA4980";"Ersatz UDF2:"."B44BAADA4980"}
Ergebnis - {"Ersatz UDF2+3:"."04B44BAADA4980";"Ersatz UDF2+3:"."B44BAADA4980"}
Die UDF VJoin bleibt hierbei unverzichtbar, könnte aber in den neuesten XL-Versionen ggf durch TEXTVERKETTEN ersetzt werden. Dabei müssen allerdings die Argumente in anderer Reihenfolge angegeben werden.
Gruß, Castor
Top
#6
Hallöchen,

ich war jetzt nicht im MOF, vielleicht steht das im Prinzip so dort, vielleicht auch nicht. Hier also mal ein Prinzip für eine Funktion. EIn Einzeiler dürfte aus meiner Sicht reichen. Da die Hex-"Zahlen" ja mehrstellig sind, würde es über eine Umwandlung in eine Dezimalzahl funktionieren. Die kann man dann umdrehen und zurück in eine Hexadezimale wandeln.

Sollte das Zuviel des guten sein und die Hexzahl zeichenweise umgedreht werden, reicht natürlich ein einfaches strreverse.

Code:
Sub test()
a = "1AFA"
MsgBox Hex$(StrReverse(CLng("&H" & a)))
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#7
Du hast hier 2 Denkfehler und ein Missverständnis eingebaut, André;
1. Die Xl-Funktionen HEXINDEZ und DEZINHEX können nur maximal 10stellige Hexadezimalzahlen verarbeiten bzw erzeugen. Bei den VBA-Funktionen CLng und Hex sind es sogar noch 2 Stellen weniger. Diese Längen können durch die hier relevanten Quelldaten überschritten werden!
2. Hier geht's auch nicht um eine hexadezimale Gesamtzahl, bei der die Zeichenzahl ggf irrelevant wäre, sondern um einen byte-orientierten Code. Auch wenn man hier byte-weise in Dezimalzahlen umwandeln würde, würde auch eine Produktsumme mit den richtigen 100er-Potenzen nichts bringen, denn aus einem solchen Ergebnis kann man auf einfache Weise nur einen Gesamt-Hex-Zahl-Text bilden, nicht aber den gewünschten byte-verkehrten Code. Das ist also ein Irrweg!
3. In den Quelldaten liegen die Hexzahlen in Bytes (=2HalbBy=2×4Bits) vor, was üblich ist, denn ein solches Byte kann 16² Zeichen darstellen. Eine 2stellige Hexzahl entspricht somit einem Zeichen. Das gleiche Problem tritt beim Umwandeln von BGR- in RGB-Darstellungen auf → BGR=&hA0B0C0 entspräche somit RGB=#C0B0A0. Ein einfaches StrReverse würde hieraus aber #0C0B0A machen. Das gilt natürlich auch für Dezimalzahlen. Bei deinem Bsp wird so aus 1AFA → 17D0 und weder (falsches) AFA1 noch gewünschtes FA1A. Das hätte dir eigentlich auffallen müssen!
Aus dem allen folgt, dass man nicht ums Drehen der originalen Byte-Folge herumkommt. Das könnte man vereinfachen, wenn man zuvor den 2-Bytes-Code in einen 1-Doppel-Byte-Code übersetzt. Dann würde man anstelle von 2×8 Bits aber 1×16 Bits (→1 Doppel-Byte →256 Binär-, also alle Ansi/ASCII-Werte) pro dargestelltem Zeichen benötigen, könnte dann aber mit StrReverse arbeiten. Da würde dann eher was draus, zB so:
Code:
Sub ByReverse()
   Dim ix As Long, a$, b$
   a = ActiveWindow.RangeSelection.Cells(1).Text
   For ix = 1 To Len(a) Step 2
       b = b & Chr(CLng("&H" & Mid(a, ix, 2)))
   Next ix
   a = StrReverse(b): b = ""
   For ix = 1 To Len(a)
       b = b & Right("0" & Hex(Asc(Mid(a, ix, 1))), 2)
   Next ix
   MsgBox b
End Sub
Gruß, Castor
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste