VBAで2進数を10進数に変換する関数を作ってみた(LSBに対応)
2024年01月06日
会社で2進数のログを扱うことがあって、
2進数を10進数に変換する自作関数を作った。
普通と違うのは、各ビットを読む順番。
マニアックなことに左側を下位ビットとして解釈する(LSBというらしい)。
昔、16進数を10進数に変換しようとしてこんな関数は作ってた。
エクセルの標準関数が用意されているけど、当時アドインを入れないといけなかったのと
文字数に制限があって作った気がする。
WEBで検索したらこのサイトがクリーンヒット。よく見たらbin2decじゃん。
やった作業はめっちゃ簡単。
●HexをBinに変えて16を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