• 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.

Converteren decimaal getal naar 3 byte groepen met decimale weergave

Status
Niet open voor verdere reacties.

Matjes

Gebruiker
Lid geworden
21 jun 2016
Berichten
76
Weet er iemand een manier om in Excel eenvoudig een decimaal getal te converteren naar 3 byte groepen met decimale weergave?

Bijvoorbeeld:

Input:

(A1): 64000

Resultaat output:

(A3) = 0 (low byte)
(A4) = 250 (medium byte)
(A5) = 0 (high byte)

In de bijlage een worksheet als voorbeeld echter nog zonder formules of VB.

Als iemand een goede aanpak of de oplossing weet dan hoor ik het graag :thumb:
 

Bijlagen

  • Convert decimaal naar 3 byte groepen.xlsx
    8,7 KB · Weergaven: 19
Met een matrix-UDF (User Defined Formula), plaats in Module1.

Code:
Option Explicit

Public Function LongToByteArray(lngIn As Long) As Variant
    Dim abytOut(3) As Byte
    Dim iabytOut As Long
    For iabytOut = 0 To 3
        abytOut(iabytOut) = (Int(lngIn / (2 ^ (8 * iabytOut)))) And ((2 ^ 8) - 1)
    Next
    LongToByteArray = Application.Transpose(abytOut)
End Function
 

Bijlagen

  • Convert decimaal naar 3 byte groepen.xlsm
    14,2 KB · Weergaven: 21
Laatst bewerkt:
alphamax super bedankt :thumb: net wat ik zocht. Ik probeer de matrix alleen nog om te zetten naar een horizontale rij, te weten:


A1= low byte A2= medium byte A3= high byte A4= input getal.


Matrix omzetten lukt nog wel alleen de cellen A1, A2, A3 geven niet het juiste resultaat, deze geven namelijk dan de inputwaarde. Wat doe ik verkeerd? Zie de bijlage.
 

Bijlagen

  • Convert decimaal naar 3 byte groepen horizontaal.xlsm
    14,7 KB · Weergaven: 21
Zou dit niet voldoende zijn ?

Code:
Public Function LongToByteArray(lngIn As Long) As Variant
    Dim abytOut(2) As Byte
    Dim iabytOut As Long
    For iabytOut = 1 To 2
        abytOut(iabytOut) = lngIn \ (2 ^ (8 * iabytOut))
    Next
    LongToByteArray = Application.Transpose(abytOut)
End Function
 
Vervang
Code:
LongToByteArray = Application.Transpose(abytOut)
Door
Code:
LongToByteArray = abytOut
En ik zou 4 posities gebruiken in plaats van 3, alles in de computerwereld is een veelvoud van 2.
 
Bedankt voor de reacties. Met de aanpassing van alphamax werkt het nu ook horizontaal. Aan 3 posities heb ik voldoende gezien het een 24bit variabele is. Zou je wellicht de code hiervoor nog kunnen aanpassen? :rolleyes: Alvast bedankt :thumb:
 
Vervang
Code:
Dim abytOut(3) As Byte
door
Code:
Dim abytOut(2) As Byte

Vervang
Code:
For iabytOut = 0 To 3
door
Code:
For iabytOut = 0 To 2
 
Super bedankt :thumb: Werkt prima nu. Voor de volledigheid hierbij de aangepaste code:


Code:
Public Function LongToByteArray(lngIn As Long) As Variant
    Dim abytOut(2) As Byte
    Dim iabytOut As Long
    For iabytOut = 0 To 2
        abytOut(iabytOut) = (Int(lngIn / (2 ^ (8 * iabytOut)))) And ((2 ^ 8) - 1)
    Next
    LongToByteArray = abytOut
End Function
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan