- ベストアンサー
VBAで2進法から10進法に変換させるプログラミング
何から手がければ良いのかさっぱり分かりません・・・ For next ... を使えばよいのでしょうか? 2進法から10進法に変えることはできるのですが、プログラミングとなるとさっぱりです。詳しく教えてくだされば、嬉しいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VBAを実際に使っていませんので、ご参考に http://www.relief.jp/itnote/archives/000925.php
その他の回答 (3)
- fortranxp
- ベストアンサー率26% (181/684)
2進数は例えばこのように表されます。 11111111 hgfedcba aの部分が1ですから+1 bの部分が1ですから+2 cの部分が1ですから+4 dの部分が1ですから+8 eの部分が1ですから+16 fの部分が1ですから+32 gの部分が1ですから+64 hの部分が1ですから+128 合計 255です。 もし各部分が0ならば+0になります。 ここでMid()関数を利用して for i=1 to 8 n=Mid("11111111",i,1) if n="1" then Total=Total+2^(8-i) '合計に2の(8- i)乗を加える。i=1のとき128 i=2のとき64 else Total=0+Total end-if next i でどうでしょう。
- temtecomai2
- ベストアンサー率61% (656/1071)
何となく作ってみました。 MsgBox BIN2DEC("10000000") みたいに文字列で与えてください。 入力値のエラーチェックなどは入れてないので実際に使うときはちゃんと完成させてくださいね。 入力値を各桁ごとにばらして、 1桁目には 1を掛ける。2桁目には 2を掛ける。3桁目には 4を掛ける・・・係数をループのたびに 2倍してく感じで。 Function BIN2DEC(aBin As String) As Long ' 入力値の桁数だけ要素を持つ配列を用意 Dim binArray() As Long ReDim binArray(Len(Trim(aBin)) - 1) ' 入力値の各桁を配列に格納する。 ' 入力値の左端から右に向かって処理してます。 Dim i As Long For i = 0 To UBound(binArray) binArray(i) = Mid(aBin, i + 1, 1) Next i Dim coefficient As Long ' 係数 coefficient = 1 Dim dec As Long ' 戻り値 ' 各桁に適切な係数を掛けて足していく。 Dim h As Long For h = UBound(binArray) To 0 Step -1 dec = dec + binArray(h) * coefficient coefficient = coefficient * 2 Next h BIN2DEC = dec End Function
- taocat
- ベストアンサー率61% (191/310)
こんばんは。 簡単なサンプルを。。。 ---------------------------------------------- Sub BinToDeC() Dim Bin Dim Dec Dim N Bin = 10101010 Dec = 0 For N = 1 To Len(Bin) Dec = Dec + Mid(Bin, N, 1) * 2 ^ (Len(Bin) - N) Next N MsgBox Dec End Sub -------------------------------------------- 以上です。
お礼
このサイト素晴らしいですね。ありがとうございます!!