アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAを使って二進法のフラッシュ暗算するプログラムを作りたいのですが、
なかなかうまくいきません。


・ランダムに出る数字を二進法に変換して、エクセルに表示する
例)4+5+6=15の場合、

  4       5       6
「100」 ⇒ 「101」 ⇒ 「110」

答えは「15」(10進法で)

という流れでプログラムしたいのですが...

どう変換させて、どう表示させるかでつまずいています。


ちなみに10進法のフラッシュ暗算は出来ました。


分かる方がおられましたら
ご回答よろしくお願い致します。m(_ _)m

A 回答 (3件)

関数でやるなら


A列  B列
1004
1015
1106
111115
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://oshiete.goo.ne.jp/qa/858429.html
など参照。
0,1以外の入力チェックや、合計がエクセルで10進15桁の制約など考慮してない。
    • good
    • 0
この回答へのお礼

ありがとうございますm(_ _)m

とても参考になりました!

VBAの面白さにハマってきました。

お礼日時:2011/02/13 23:21

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
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

参考になりました!

作ってみます!

お礼日時:2011/02/13 22:19

やり方さえわかれば非常に簡単なことなので、ソースは敢えて付けません。



用意するもの:
・結果を格納するString型変数(s)
・計算用のInteger型変数(t)

1.変換対象の値をtに入れる
2.tを2で割った余りを見る
3.余りがある:s = "1" + s, ない:s = "0" + s
4.tを2で割る
5.tが0でなければ2に戻る
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

早速作ってみたいと思います!

お礼日時:2011/02/13 22:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!