Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11689 / 13645 ツリー ←次へ | 前へ→

【14705】お願いします たすけてください 04/6/5(土) 23:05 質問[未読]
【14706】Re:お願いします よろずや 04/6/5(土) 23:18 発言[未読]
【14708】Re:お願いします たすけてください 04/6/6(日) 0:26 質問[未読]
【14710】Re:お願いします かみちゃん 04/6/6(日) 9:07 発言[未読]
【14711】Re:お願いします たすけてください 04/6/6(日) 10:53 質問[未読]
【14712】Re:お願いします ちゃっぴ 04/6/6(日) 11:29 回答[未読]
【14714】Re:お願いします たすけてください 04/6/6(日) 12:05 質問[未読]
【14717】Re:お願いします かみちゃん 04/6/6(日) 12:15 回答[未読]
【14715】Re:お願いします かみちゃん 04/6/6(日) 12:08 発言[未読]
【14716】Re:お願いします たすけてください 04/6/6(日) 12:11 質問[未読]
【14718】Re:お願いします かみちゃん 04/6/6(日) 12:22 回答[未読]
【14719】Re:お願いします たすけてください 04/6/6(日) 12:33 質問[未読]
【14721】Re:お願いします かみちゃん 04/6/6(日) 12:41 回答[未読]
【14723】Re:お願いします たすけてください 04/6/6(日) 12:53 質問[未読]
【14724】Re:お願いします↑ たすけてください 04/6/6(日) 12:57 質問[未読]
【14725】Re:お願いします かみちゃん 04/6/6(日) 13:22 発言[未読]
【14726】Re:お願いします たすけてください 04/6/6(日) 13:24 質問[未読]
【14727】Re:お願いします かみちゃん 04/6/6(日) 13:57 回答[未読]
【14728】Re:お願いします たすけてください 04/6/6(日) 14:07 質問[未読]
【14729】Re:お願いします かみちゃん 04/6/6(日) 14:14 発言[未読]
【14733】Re:お願いします たすけてください 04/6/6(日) 15:43 お礼[未読]
【14736】Re:2進数を10進数に変換する方法 かみちゃん 04/6/6(日) 15:55 回答[未読]

【14705】お願いします
質問  たすけてください E-MAIL  - 04/6/5(土) 23:05 -

引用なし
パスワード
   高校の情報Bの課題で「二進数を十進数に変換するプログラミングをつくる」
というのがでました。さっぱり分かりません。どなたか教えていただけないでしょうか。
よろしくお願いします。

【14706】Re:お願いします
発言  よろずや  - 04/6/5(土) 23:18 -

引用なし
パスワード
   >高校の情報Bの課題で「二進数を十進数に変換するプログラミングをつくる」
>というのがでました。さっぱり分かりません。どなたか教えていただけないでしょうか。

紙と鉛筆でやるとしたらどういう手順でやりますか?
それが出来たらプログラミングしましょう。

【14708】Re:お願いします
質問  たすけてください E-MAIL  - 04/6/6(日) 0:26 -

引用なし
パスワード
   ▼よろずや さん:
どういう意味かよく分からないのですが

【14710】Re:お願いします
発言  かみちゃん  - 04/6/6(日) 9:07 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>どういう意味かよく分からないのですが

何か、課題の答えを求めておられるような気がしてならないのですが・・・

> 高校の情報Bの課題で「二進数を十進数に変換するプログラミングをつくる」

まず、プログラミングをする前に、どうしたいのかを整理することが大事だと思います。
まず自分でどこまでできているのかを示してください。

2進数が0の場合、10進数は0
2進数が1の場合、10進数は1
2進数が10の場合、10進数は2
2進数が11場合、10進数は3
2進数が100の場合、10進数は4
2進数が10001の場合、10進数は17
となるのは、学ばれたと思います。

たとえば、2進数が10001の場合、10進数の求め方は
2の4乗×1+2の3乗×0+2の2乗×0+2の1乗×0+2の0乗×1
となるのは、わかりますでしょうか?

【14711】Re:お願いします
質問  たすけてください E-MAIL  - 04/6/6(日) 10:53 -

引用なし
パスワード
   その辺は何とか理解できます

【14712】Re:お願いします
回答  ちゃっぴ  - 04/6/6(日) 11:29 -

引用なし
パスワード
   でしたら、以下の場合、変数を使ってどういう式になるかちょっと考えて見てください。

> たとえば、2進数が10001の場合、10進数の求め方は
> 2の4乗×1+2の3乗×0+2の2乗×0+2の1乗×0+2の0乗×1

この場合の左からi桁目の1bitはどのようにあらわせるかというと、

strBinary = "10001"    '対象の2進数
lngLength = Len(strBinary) '対象の文字列長

上位1bitの数 = Mid(strBinary, i, 1) * 2^(lngLength - i)

となりますので、後はiを「1〜lngLength」の範囲でループして加算すればいいと思います。

【14714】Re:お願いします
質問  たすけてください E-MAIL  - 04/6/6(日) 12:05 -

引用なし
パスワード
   どうも有り難うございます。
ですが、VBAというのを使用しなければならず、
教えて下さったやり方は、よく分かりません。
乗数のあらわし方を教えていただけないでしょうか
贅沢を言ってすみません。

【14715】Re:お願いします
発言  かみちゃん  - 04/6/6(日) 12:08 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>その辺は何とか理解できます

であれば、ちゃっぴさんも書かれているとおり、

(1)2進数の文字列を取得する。
(2)(1)の文字列の長さを取得する。
(3)(1)の1文字目の文字を取得する。
(4)2の((2)値−1)乗×(3)の値を計算します。
  たとえば、(1)が10001の場合であれば、、(2)は5、(3)は1になりますから、
  2^(5-1)*1になります。
(5)(1)の2文字目の文字を取得して、(4)に加算します。
(6)2の((2)値−2)乗×(3)の値を計算します。
  たとえば、(1)が10001の場合であれば、、(2)は5、(3)は0になりますから、
  2^(5-2)*0+16になります。
という仕組みで、
(3)(4)を(2)の値になるまで繰り返します。

実は、答えが載っているURLを知っているのですが、情報Bの課題の答えをそのままここに書くことになるので、今は控えたいと思います。
まずは、自分で考えたものを提示してみてください。

【14716】Re:お願いします
質問  たすけてください E-MAIL  - 04/6/6(日) 12:11 -

引用なし
パスワード
   Sub 二進数を十進数へ()
 A = Cells(1, 1).Value
 B = Len(Cells(1, 1).Value)
 For i = 1 To B
 
ここまでは分かりました

【14717】Re:お願いします
回答  かみちゃん  - 04/6/6(日) 12:15 -

引用なし
パスワード
   こんちには。かみちゃん です。

>乗数のあらわし方を教えていただけないでしょうか

乗数は、算術演算子の^演算子を使います。
^演算子とは、「数値のべき乗を求めます」とヘルプ情報に載っています。
また、使い方も、例として載っているので、確認してみてください。
具体的には、
2^3とすることにより2の3乗の計算ができます。

【14718】Re:お願いします
回答  かみちゃん  - 04/6/6(日) 12:22 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Sub 二進数を十進数へ()
> A = Cells(1, 1).Value
> B = Len(Cells(1, 1).Value)
> For i = 1 To B
> 
>ここまでは分かりました

この下に
上位1bitの数 =上位1bitの数 + Mid(A, i, 1) * 2^(B - i)
としてみてください。

これは、2進数文字列のi文字目の文字に、2の(2進数文字列の長さ-i)乗を「上位1bitの数」という変数に加算しています。

なお、「上位1bitの数」というのは、変数なので、適当な変数名にしてみてください。

また、直接的には関係ありませんが、Sub 〜は、半角英数字にされたほうがいいと思います。

もう少しでできますので、がんばってみてください。

【14719】Re:お願いします
質問  たすけてください E-MAIL  - 04/6/6(日) 12:33 -

引用なし
パスワード
   Sub 二進数を十進数へ()
 A = Cells(1, 1).Value
 B = Len(Cells(1, 1).Value)
 For i = 1 To B
   上位1bitの数 = 上位1bitの数 + Mid(A, i, 1) * 2 ^ (B - i)
Next i

この後それぞれの和を求めるのですが、1からBまでどう求めればよろしいでしょうか。
順調に来ている気がします。よろしくお願いします。

【14721】Re:お願いします
回答  かみちゃん  - 04/6/6(日) 12:41 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>この後それぞれの和を求めるのですが、1からBまでどう求めればよろしいでしょうか。
>順調に来ている気がします。よろしくお願いします。

はい、順調というかほぼ完成に近づいています。

Sub 二進数を十進数へ()
 A = Cells(1, 1).Value
 B = Len(Cells(1, 1).Value)
 For i = 1 To B
   上位1bitの数 = 上位1bitの数 + Mid(A, i, 1) * 2 ^ (B - i)
 Next i
 MsgBox "10進数は、" & 上位1bitの数 & "です。" 
End Sub

として、A1セルに10001と入力しておいて、マクロを実行してみてください。
「10進数は、17です。」と表示されるはずです。

【14723】Re:お願いします
質問  たすけてください E-MAIL  - 04/6/6(日) 12:53 -

引用なし
パスワード
   ▼かみちゃん さん:
できました。でも、10進数以外の数を入力しても(1、B)に数が表示されてしまいます。
どうしたら直せるでしょうか。

【14724】Re:お願いします↑
質問  たすけてください E-MAIL  - 04/6/6(日) 12:57 -

引用なし
パスワード
   すいません。課題では(1、B)に表示しないといけないんです。

【14725】Re:お願いします
発言  かみちゃん  - 04/6/6(日) 13:22 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>できました。でも、10進数以外の数を入力しても(1、B)に数が表示されてしまいます。

すみません。課題がいまひとつわかりません。
(1,B)は何ですか?
A1セル(Cells(1,1))に入力されている2進数を10進数に変換して、それをどこに表示させたいのですか?

【14726】Re:お願いします
質問  たすけてください E-MAIL  - 04/6/6(日) 13:24 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>できました。でも、10進数以外の数を入力しても(1、B)に数が表示されてしまいます。
>
>すみません。課題がいまひとつわかりません。
>(1,B)は何ですか?
>A1セル(Cells(1,1))に入力されている2進数を10進数に変換して、それをどこに表示させたいのですか?
エクセルのB1です。書き忘れました。すみません。

【14727】Re:お願いします
回答  かみちゃん  - 04/6/6(日) 13:57 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>A1セル(Cells(1,1))に入力されている2進数を10進数に変換して、それをどこに表示させたいのですか?
>エクセルのB1です。書き忘れました。すみません。

さきほどの
MsgBox "10進数は、" & 上位1bitの数 & "です。" 

 Cells(1, 2).Value = 上位1bitの数

 Range("B1").Value = 上位1bitの数
としてみてください。

【14728】Re:お願いします
質問  たすけてください E-MAIL  - 04/6/6(日) 14:07 -

引用なし
パスワード
   >さきほどの
>MsgBox "10進数は、" & 上位1bitの数 & "です。" 
>を
> Cells(1, 2).Value = 上位1bitの数
>か
> Range("B1").Value = 上位1bitの数
>としてみてください。
 ありがとうございます。ただ先ほど書いたとおり、2進数ではなく10進数を(1,1)
に入力すると(1,2)に数字が出てしまいます。これはどうしたらいいでしょうか。

【14729】Re:お願いします
発言  かみちゃん  - 04/6/6(日) 14:14 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> ありがとうございます。ただ先ほど書いたとおり、2進数ではなく10進数を(1,1)
>に入力すると(1,2)に数字が出てしまいます。これはどうしたらいいでしょうか。

たとえば、A1(Cells(1,1))の値が、2進数かどうかの判断はどうするのですか?
18とか、AAとかは、2進数でないというのは、わかりますが、10と入力してあったら、2進数か10進数かわからないのですが・・・
まず、何をもって、2進数にするのか、それを決めないといけないと思います。

【14733】Re:お願いします
お礼  たすけてください E-MAIL  - 04/6/6(日) 15:43 -

引用なし
パスワード
   有難うございます。
とりあえず、この部分は学校へ持って行って再検討したいと思います。
いろいろご迷惑をおかけしましたが、皆さんに感謝したいと思います。
特にかみちゃんさん 親切なアドバイスをいただき、本当に感謝しています。
今後もまた質問に来るかと思いますが、その時はまたよろしくお願いします。

【14736】Re:2進数を10進数に変換する方法
回答  かみちゃん  - 04/6/6(日) 15:55 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>高校の情報Bの課題で「二進数を十進数に変換するプログラミングをつくる」

以下のURLの「■2 進数を 10 進数へ変換 (応用)」を参照してください。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_k07.htm

11689 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free