忍者ブログ

VBAで2進数を10進数に変換する関数を作ってみた(LSBに対応)

2024年01月06日
会社で2進数のログを扱うことがあって、
2進数を10進数に変換する自作関数を作った。

普通と違うのは、各ビットを読む順番。
マニアックなことに左側を下位ビットとして解釈する(LSBというらしい)。

1110→7
0011→12

昔、16進数を10進数に変換しようとしてこんな関数は作ってた。

' %%%% 16進数から10進数へ %%%%%
Function Hex2DecEx(Hex)
If Hex = "" Then
    Hex2DecEx = ""
Else
    Dim i As Long
    
    For i = 1 To Len(Hex)
        Hex2DecEx = Hex2DecEx * 16 + CInt("&H" & Mid(Hex, i, 1))
    Next i
End If    
End Function

エクセルの標準関数が用意されているけど、当時アドインを入れないといけなかったのと
文字数に制限があって作った気がする。


WEBで検索したらこのサイトがクリーンヒット。よく見たらbin2decじゃん。




やった作業はめっちゃ簡単。
●HexをBinに変えて16を2に変えた
●逆順に対応できるようにフラグを用意して、逆順の場合はループを逆回し


今回作ったソースは以下の通り。
ちなみに、逆順フラグはオプションにして、省略可能にしておいた。
やった作業はめっちゃ簡単。
●HexをBinに変えて16を2に変えた
●逆順に対応できるようにフラグを用意して、逆順の場合はループを逆回し
今回作ったソースは以下の通り。
ちなみに、逆順フラグはオプションにして、省略可能にしておいた。
' %%%% 2進数から10進数へ %%%%%
Function Bin2DecEx(Bin As String, Optional lsbFlag As Long = 0)
    If Bin = "" Then
        Bin2DecEx = ""
    Else
        Dim i As Long
        If lsbFlag = 0 Then
            For i = 1 To Len(Bin)
                Bin2DecEx = Bin2DecEx * 2 + CInt("&H" & Mid(Bin, i, 1))
            Next i
        Else
            For i = Len(Bin) To 1 Step -1
                Bin2DecEx = Bin2DecEx * 2 + CInt("&H" & Mid(Bin, i, 1))
            Next i
        End If
    End If
End Function

PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字