読者です 読者をやめる 読者になる 読者になる

なまけもの日記

人生のメモ帳

エクセルでビット処理(文字列処理)

研究にてビット処理を行う必要があるのだが、使用するツールによってはIOピンなどの関係上、ビットの並びが逆になる場合がある。簡単に説明すると2進数では"0001"が10進数の"1"なのだが、この並びが逆、つまり"1000"で"1"となる。
計算する為には元の並びに戻す必要があるが、いちいち手作業で処理すると時間も手間も掛かり、ミスが発生する可能性も増えてしまう。


面倒な事はしたくない。


楽したい。


結果はエクセルで纏めているのでエクセルのマクロやVBAで処理しようと思い、調べてコピペ。
エクセルで文字列の順序を逆転する方法 - オフィス系ソフト | 教えて!goo

Function REVERSE(MOJI)
REVERSE = StrReverse(MOJI)
End Function

と設定して、B1=REVERSE(A1)で文字列反転処理完了!


お次はこの2進数を10進数に戻して処理したい。
n進法に変換したい:Excel(エクセル)の関数・数式の使い方-数学
エクセルにはBIN2DECという2進数から10進数に変換する関数があるのだが、使用してみると何故かエラー。調べてみると処理できる値に上限がありました。


DEC2BIN(10進数→2進数)では512以上の値まで?


研究で使用しているデータなので上限を大幅にオーバー。その程度の値では誰も使えない。絶対に自分で処理させている人もいるだろうと思ってGoogle先生に相談、使用例がありました。I/O制御...同じ使用目的です。
Excel Tips 2進数を10進数に変換

'2進数を10進数に変換
Public Function ExBinToDeci(bin As String) As Long
    Dim length As Integer
    Dim i As Integer
    Dim ltemp As Long
    Dim stemp As String
    
    ltemp = 0
    length = Len(bin)
    For i = 1 To length
        '1文字取り出し
        stemp = Mid$(bin, i, 1)
        If stemp = "1" Then
            ltemp = ltemp + CLng(2 ^ (length - i))
        ElseIf stemp <> "0" Then
            MsgBox "引数が2進数ではありません。"
            ExBinToDeci = -1
            Exit Function
        End If
    Next i
    ExBinToDeci = ltemp
End Function

2進数→10進数への変換完了!
欲しいデータを無事得ることができました。


マクロやVBAは怠け者にはありがたい機能ですね。


□使用例:
文字列反転
01101111101000010010 → 01001000010111110110
2進数→10進数
01001000010111110110 → 296438




エクセルで文字列の順序を逆転する方法 - Office系ソフト - 教えて!goo
VBAにあるStrReverseという関数を使えば簡単です。

Excel Tips 2進数を10進数に変換
2進数はI/O制御を行う時などによく使います。

n進法に変換したい:Excel エクセルの使い方-関数/計算式-数学
Excelの標準関数には進法変換用の関数はありませんが、[分析ツール]アドインを組み込むと進法変換をしてくれる関数が使えるようになります。