• ベストアンサー

VBAを使って二進法計算

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

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

  • 十進法から二進法への変換

    (3.3)10を二進法に変換したいのですが、自分の答えは  =(11.01001)2 になると思うのですが合ってますでしょうか?       小数部は  0.3       1×2^1+1×2^0+0×2^-1+1×2^-2 ×  2       +0×2^-3+0×2^-4+1×2^-5=0.28125  0.6 ×  2       打ち切り誤差は 0.3-0.28125=0.01875  1.2 ×  2  0.4 ×  2   0.8 ×  2  1.6

  • vba

    vbaについて F5からL20までのセルに、 ランダムにセルを選び、1~20の20個の数字を 重複なしでランダムに表示させたいです。 省略できる所は省略した 簡潔なプログラム教えてほしいです・・・::

  • VBA 計算の速度調整

    エクセルVBAでランダムに1から10の数字10000個を各セルに書き、各数字に対応する色に塗り分けるというコードを作ったのですが、実行ボタンを押して、色が自動的に塗り分けられていくスピードを早くしたり、遅くしたりすることはできるのでしょうか?

  • ソースプログラムをコンパイルのあとの2進法をとりいれる?

    ソースからうまくプログラムをコンパイルしましたが、2進法を取り入れると許可エラーを得ます。 原因は何? という問題に対して答えが 二進法は、ルート特権を書き込む必要があるディレクトリィもインストールされる必要がある とあります。この「二進法を取り入れる」とは一体どういうことでしょうか? 回答のほどよろしくお願い致します。

  • VBA

    VBA で エクセル A2~A10の間に数字があります。例 2、8,11,25,8,10,4,6,14、 A1には数字という文字が入っています。 これを並びかえる 方法を教えてください。 VBAで

  • エクセル「3つの数字の合計がある数字になる組み合わせ」を調べたい。

    こんにちは。 エクセルで、以下のような問題を解くことはできますでしょうか? 基本的な関数しかできず、自分で調べたところ。ソルバーやVBAを使えばできるのかもしれないとは思ったのですが、なかなか良い類似例を見つけられず、苦戦しています。 <問題> 「3」「5」「6」「8」…といったランダムな数字が合計になる3つの数字のすべての組み合わせを知りたいです。 たとえば、 「3」なら答えは「1+1+1」 「5」なら答えは「2+1+1」「1+2+1」「1+1+2」 「6」なら答え「4+1+1」「1+4+1」「1+1+4」「3+2+1」「2+3+1」「1+2+3」「3+2+1」…のような形です。 ※実は子どもの名付けで、画数の組み合わせを出そうと思っています。 わかりづらい点があるかとは存じますが、お力添え何卒よろしくお願い致します。

  • エクセルVBAにつきまして

    詳しい方ご教示ください。 エクセルのセルに、数字で1220と入っていて、 それを日付の2011/2/20に変換したいのですが、VBA必要でしょうか。 それとも何か便利な関数ありますでしょうか? 詳しい方、よろしくお願い致します。

  • word vba 文字置換について

    お世話になります。 word vba による文字置換についてお聞きしたいのですが、 例えば「あいう,1えお2,345かきく,6けこ」 というテキストがあった場合、 「,1」と「,6」を全角に変換したいと思っております。(カンマも含め) 独立したカンマ+数字(数字はランダム)を全角変換は難しいでしょうか。 数字はランダムなので、正規表現を使用したいと思っております。 何か良い方法はないでしょうか。 ご指導のほど、よろしくお願いします。

  • 10進法から2進法へ

    エクセル上で1つのセルに数字を打ち込みコマンドボタンを押し2進法にするプログラムをデザインモードで組んでいるのですが、なかなかうまくいきません。どなたかアドバイスお願いいします

  • VBAでシート書式の自動変換を作動させない方法

    エクセル2002使用です。 VBAで、表などの転記をしていると、転記された数字がエクセルの書式の自動変換によって想定しない書式の表示になります。 例えば、 10 → 1000% (%への表示変換が一番多いです) これをとめる方法はありますか? または、VBAで書式を設定する必要があるのでしょうか? よろしくお願いします。

専門家に質問してみよう