• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Dec Dword (formule)

Status
Niet open voor verdere reacties.

luuc96

Gebruiker
Lid geworden
22 mei 2020
Berichten
21
Hallo,

Ik ben zoekende naar de formule die een "Dec Qword" kan omzetten naar "Dec Dword".

Graag wil ik met een RFID chip gaan scannen in 3 systemen. 1 systeem wil het "Dec Qword" inzichtelijk hebben, het andere systeem leest op "Dec Dword". Mijn reader lees momenteel het "Hex Qword" in. Deze kan ik gemakkelijk via excel naar "Dec Qword" omzetten. Alleen lukt het mij niet op de formule te vinden die hem naar "Dec Dword"kan zetten.

Het lukt wel via Windows calculator. (zie bijlage)
 

Bijlagen

  • HEXtoDEC.xlsx
    10,5 KB · Weergaven: 42
  • Dec Dword.PNG
    Dec Dword.PNG
    19,9 KB · Weergaven: 78
  • Dec Qword.PNG
    Dec Qword.PNG
    20,4 KB · Weergaven: 71
  • Hex Qword.PNG
    Hex Qword.PNG
    19,8 KB · Weergaven: 64
Als UDF (user-defined-formula) in "Module1".

Code:
Option Explicit

Public Function DecDWord(sDecQWord As String) As Variant

Dim cBinDWord As Long
Dim cBinQWord As Long
Dim cMask As Long
Dim iBinDWord As Long
Dim sBinQWord As String
Dim sMask As String
Dim vBase As Variant
Dim vDecDWord As Variant
Dim vDecQWord As Variant

    sMask = String(32, "1")    '2^32-1 = 4294967295

    vDecQWord = CDec(sDecQWord)
    Do While vDecQWord <> 0
        sBinQWord = Trim$(Str$(vDecQWord - 2 * Int(vDecQWord / 2))) & sBinQWord
        vDecQWord = Int(vDecQWord / 2)
    Loop

    cBinQWord = Len(sBinQWord)
    cMask = Len(sMask)

    cBinDWord = cBinQWord
    If cBinQWord < cMask Then
        cBinDWord = cMask
    End If

    sBinQWord = Right(String(cBinDWord, "0") & sBinQWord, cBinDWord)
    sMask = Right(String(cBinDWord, "0") & sMask, cBinDWord)
    
    vBase = CDec(1)
    For iBinDWord = cBinDWord To 1 Step -1
        vDecDWord = vDecDWord + vBase * (Mid(sBinQWord, iBinDWord, 1) And Mid(sMask, iBinDWord, 1))
        vBase = 2 * vBase
    Next
    
    DecDWord = vDecDWord

End Function
In C2.
Code:
=DecDWord(B2)
 
Laatst bewerkt:
Wat ben jij een koning! Was er werkelijk waar al 3 dagen mee aan het tobben. Bedankt!
 
De truuk is om zeer grote getallen om te zetten naar strings.
 
Hier nog een variant

Code:
Public Function DecDWord2(sDecQWord As String) As Variant    'am_2020

    Dim dBase As Double
    Dim dDecQWordHi As Double
    Dim dDecQWordLo As Double
    Dim dMaskHi As Double
    Dim dMaskLo As Double
    Dim sMask As String

    sMask = "4294967295"    '2^32-1 = 4294967295
    dBase = 2 ^ 16

    dDecQWordHi = Int(sDecQWord / dBase)
    dMaskHi = Int(sMask / dBase)
    dDecQWordLo = sDecQWord - dBase * dDecQWordHi
    dMaskLo = sMask - dBase * dMaskHi

    DecDWord2 = dBase * (dDecQWordHi And dMaskHi) + (dDecQWordLo And dMaskLo)

End Function
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan