• ベストアンサー

VBAを使って二進法計算

VBAを使って二進法のフラッシュ暗算するプログラムを作りたいのですが、 なかなかうまくいきません。 ・ランダムに出る数字を二進法に変換して、エクセルに表示する 例)4+5+6=15の場合、   4       5       6 「100」 ⇒ 「101」 ⇒ 「110」 答えは「15」(10進法で) という流れでプログラムしたいのですが... どう変換させて、どう表示させるかでつまずいています。 ちなみに10進法のフラッシュ暗算は出来ました。 分かる方がおられましたら ご回答よろしくお願い致します。m(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

関数でやるなら A列  B列 100 4 101 5 110 6 1111 15 A列はアポストロフィ+数字100のような入れ方をする(文字列)。 B1の式は =bin2dec(A1) B2、B3はB1の式複写 最終行はB4に=SUM(B1:B3) A4には=dec2bin(B4) データが沢山あればB4以下に入力制約数を超える空白行を作っておけば良い。 最終行と思しき行に、B4,A4の式を入れる(範囲を修正する必要あるが) ーーー VBAでは出来ないことも無かろうが、VBAはエクセルのためのスクリプトなので、あまりこういうことは出くわさない問題だろう。特に便利な仕掛け(関数)も無いと思う。だから自作(下記WEBきじなど) ーーー 足し算までは Sub test01() Dim n As String s = 0 p1: n = 0 x = InputBox("2進数入力、終わりは9入力") If x = "9" Then GoTo p2 j = Len(x) For i = 1 To j n = n + Mid(x, i, 1) * 2 ^ (j - i) Next MsgBox n '参考 s = s + n GoTo p1 p2: MsgBox s '合計 End Sub sを2進数表示は、 http://okwave.jp/qa/q858429.html など参照。 0,1以外の入力チェックや、合計がエクセルで10進15桁の制約など考慮してない。

yosinabe
質問者

お礼

ありがとうございますm(_ _)m とても参考になりました! VBAの面白さにハマってきました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

VBAというのは、何のVBAか分かりませんが、Excel なら、以下のような、ワークシート関数(アドイン)を使っても良いのではないかと思います。もちろん、VBAのユーザー定義関数を作ることも可能です。 '// Sub TestRnd() Dim i As Long Dim n As Long, k As String Dim ret As Long Cells(1, 1).Resize(2, 4).ClearContents Randomize  For i = 1 To 3   n = Int(Rnd * 9 + 1)   ret = n + ret   Cells(1, i).Value = n   Cells(2, i).Value = Evaluate("Dec2Bin(" & n & ")")  Next i   Application.Wait Now + TimeSerial(0, 0, 3)   k = Evaluate("Dec2Bin(" & ret & ")")   Cells(2, i).Value = k   MsgBox k & " は10進でいくつ?", , "結果"   Cells(1, i).Value = ret End Sub

yosinabe
質問者

お礼

回答ありがとうございます! 参考になりました! 作ってみます!

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

やり方さえわかれば非常に簡単なことなので、ソースは敢えて付けません。 用意するもの: ・結果を格納するString型変数(s) ・計算用のInteger型変数(t) 1.変換対象の値をtに入れる 2.tを2で割った余りを見る 3.余りがある:s = "1" + s, ない:s = "0" + s 4.tを2で割る 5.tが0でなければ2に戻る

yosinabe
質問者

お礼

回答ありがとうございます! 早速作ってみたいと思います!

関連するQ&A