研究にてビット処理を行う必要があるのだが、使用するツールによっては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の標準関数には進法変換用の関数はありませんが、[分析ツール]アドインを組み込むと進法変換をしてくれる関数が使えるようになります。