Excel VBA質問箱 IV

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

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


11671 / 13646 ツリー ←次へ | 前へ→

【14833】お聞きしたいのですが たすけてください 04/6/8(火) 19:06 質問[未読]
【14836】Re:お聞きしたいのですが ichinose 04/6/8(火) 19:15 発言[未読]
【14837】Re:お聞きしたいのですが ichinose 04/6/8(火) 19:19 発言[未読]
【14839】Re:お聞きしたいのですが たすけてください 04/6/8(火) 19:30 質問[未読]
【14846】Re:お聞きしたいのですが たすけてください 04/6/8(火) 20:37 質問[未読]
【14848】Re:お聞きしたいのですが かみちゃん 04/6/8(火) 20:50 発言[未読]
【14847】Re:お聞きしたいのですが かみちゃん 04/6/8(火) 20:44 発言[未読]
【14851】Re:お聞きしたいのですが たすけてください 04/6/8(火) 21:00 質問[未読]
【14852】Re:セルの値が2進数文字列かどうかを判断し... かみちゃん 04/6/8(火) 21:16 回答[未読]
【14854】Re:セルの値が2進数文字列かどうかを判断し... たすけてください 04/6/8(火) 21:23 質問[未読]
【14859】Re:セルの値が2進数文字列かどうかを判断し... かみちゃん 04/6/8(火) 22:20 発言[未読]
【14860】Re:セルの値が2進数文字列かどうかを判断し... たすけてください 04/6/8(火) 22:29 質問[未読]
【14862】Re:セルの値が2進数文字列かどうかを判断し... かみちゃん 04/6/8(火) 22:34 発言[未読]
【14866】Re:セルの値が2進数文字列かどうかを判断し... たすけてください 04/6/8(火) 23:07 質問[未読]
【14868】Re:セルの値が2進数文字列かどうかを判断し... かみちゃん 04/6/8(火) 23:14 回答[未読]
【14874】Re:セルの値が2進数文字列かどうかを判断し... たすけてください 04/6/8(火) 23:29 質問[未読]
【14875】Re:セルの値が2進数文字列かどうかを判断し... かみちゃん 04/6/8(火) 23:36 回答[未読]
【14879】Re:セルの値が2進数文字列かどうかを判断し... たすけてください 04/6/9(水) 0:07 お礼[未読]

【14833】お聞きしたいのですが
質問  たすけてください E-MAIL  - 04/6/8(火) 19:06 -

引用なし
パスワード
    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

というプログラミングなのですが、(1,1)に2進数ではなく10進数を入力すると、
(1,2)に数が表示されてしまいます。10進数を入力すると、(1,2)に何も表示されない
ようにするにはどうすればよいでしょうか。

【14836】Re:お聞きしたいのですが
発言  ichinose  - 04/6/8(火) 19:15 -

引用なし
パスワード
   ▼たすけてください さん:
こんばんは。

> 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
>
>というプログラミングなのですが、(1,1)に2進数ではなく10進数を入力すると、
>(1,2)に数が表示されてしまいます。10進数を入力すると、(1,2)に何も表示されない
 ↑これは何ですか?セルB2の事ですか?

>ようにするにはどうすればよいでしょうか。
10進数と2進数の違いを考えましょう。
2進数は、0と1の数値データですよね?
よって、Cells(1,1)の中に0と1以外が入っていないか調べる必要がありそうですよね
Mid(A, i, 1)の中身が0又は1以外だったらデータを入れない処理を
考えてみて下さい。

【14837】Re:お聞きしたいのですが
発言  ichinose  - 04/6/8(火) 19:19 -

引用なし
パスワード
   ▼ichinose さん:
>▼たすけてください さん:
>こんばんは。
>
>> 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
>>
>>というプログラミングなのですが、(1,1)に2進数ではなく10進数を入力すると、
>>(1,2)に数が表示されてしまいます。10進数を入力すると、(1,2)に何も表示されない
 ↑これは何ですか?セルB1の事でしたか?
>
>>ようにするにはどうすればよいでしょうか。
>10進数と2進数の違いを考えましょう。
>2進数は、0と1の数値データですよね?
>よって、Cells(1,1)の中に0と1以外が入っていないか調べる必要がありそうですよね
>Mid(A, i, 1)の中身が0又は1以外だったらデータを入れない処理を
>考えてみて下さい。

【14839】Re:お聞きしたいのですが
質問  たすけてください  - 04/6/8(火) 19:30 -

引用なし
パスワード
   ▼ichinose さん:
>>>というプログラミングなのですが、(1,1)に2進数ではなく10進数を入力すると、
>>>(1,2)に数が表示されてしまいます。10進数を入力すると、(1,2)に何も表示されない
> ↑これは何ですか?セルB1の事でしたか?

はいそうです。

【14846】Re:お聞きしたいのですが
質問  たすけてください  - 04/6/8(火) 20:37 -

引用なし
パスワード
   ▼ichinose さん:
 >10進数と2進数の違いを考えましょう。
>2進数は、0と1の数値データですよね?
>よって、Cells(1,1)の中に0と1以外が入っていないか調べる必要がありそうですよね
>Mid(A, i, 1)の中身が0又は1以外だったらデータを入れない処理を
>考えてみて下さい。
 
 Cells(1,1)の中が2進数の時、0は計算しても0になるので1だけを考えればいいのですか。

【14847】Re:お聞きしたいのですが
発言  かみちゃん  - 04/6/8(火) 20:44 -

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

>というプログラミングなのですが、(1,1)に2進数ではなく10進数を入力すると、
>(1,2)に数が表示されてしまいます。10進数を入力すると、(1,2)に何も表示されない
>ようにするにはどうすればよいでしょうか。

(1,1)はCells(1, 1)、(1,2)はCells(1, 2)のことをおっしゃっていると思うのですが、このプログラミングでは、Cells(1, 2)には、表示されません。
MsgBoxでメッセージボックスが表示されるだけです。

ちなみに、考えていただきたいことを下記で書きましたが、どうお考えなのでしょうか?
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=14729;id=excel
要は、どうしたいのかを説明していただかないと、ヒントは出せないのですが・・・

【14848】Re:お聞きしたいのですが
発言  かみちゃん  - 04/6/8(火) 20:50 -

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

> Cells(1,1)の中が2進数の時、0は計算しても0になるので1だけを考えればいいのですか。

Cells(1 ,1)の内容を一文字ずつ見て、その一文字が1か0でなければ、表示しない、というチェックが必要です。
ただし、以前にも書きましたが、10とか100とかのときは、10進数なのか2進数なのかが判断できないのですが、それはどうするのでしょうか?

【14851】Re:お聞きしたいのですが
質問  たすけてください  - 04/6/8(火) 21:00 -

引用なし
パスワード
   ▼かみちゃん さん:
Sub 二進数を十進数へ()
 A = Cells(1, 1).Value
 B = Len(Cells(1, 1).Value)
 For i = 1 To B
   x = x + Mid(A, i, 1) * 2 ^ (B - i)
Next i
 c = x
 Cells(1, 2).Value = c
End Sub

のまちがいでした。すみません。
またこのプログラミングの場合、10は2進数とみなしています。

【14852】Re:セルの値が2進数文字列かどうかを判断...
回答  かみちゃん  - 04/6/8(火) 21:16 -

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

>またこのプログラミングの場合、10は2進数とみなしています。

Sub 二進数を十進数へ()
 A = Cells(1, 1).Value
 B = Len(Cells(1, 1).Value)
 For i = 1 To B
   'Cells(1, 1)の値が2進数文字列(1または0で構成される文字列)でない場合
   If Mid(A, i, 1) <> "1" And Mid(A, i, 1) <> "0" Then
    x = 0
    'Cells(1, 2)は表示しない
    Cells(1, 2).Value = ""
    'マクロを終了する。
    MsgBox "Err"
    Exit Sub
   End If
   'チェックOKの場合だけ、10進数変換の計算をする。
   x = x + Mid(A, i, 1) * 2 ^ (B - i)
 Next
 Cells(1, 2).Value = x
End Sub

でどうですか?
ただし、情報Bの課題としては、変数の宣言がない、プロシージャ名が英数字でないなど、個人的に「う〜ん」と思うところがあります。

【14854】Re:セルの値が2進数文字列かどうかを判断...
質問  たすけてください  - 04/6/8(火) 21:23 -

引用なし
パスワード
   ▼かみちゃん さん:
度々すみません。
教えて下さったプログラミングはどういう意味ですか。
ちなみに教師からは二進数は1と0だけで成りたっているから
それ以外の数を除くのを付け足すように言われました。

【14859】Re:セルの値が2進数文字列かどうかを判断...
発言  かみちゃん  - 04/6/8(火) 22:20 -

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

>教えて下さったプログラミングはどういう意味ですか。

'で始まる行はコメント行で、プログラムでは無視されますので、そこに意味を書いたのですが、具体的にどこがわからないのですか?

なお、さきほど、のコードに1行だけ不要な行がありましたので、訂正します。

Sub 二進数を十進数へ()
 A = Cells(1, 1).Value
 B = Len(Cells(1, 1).Value)
 For i = 1 To B
   'Cells(1, 1)の値が2進数文字列(1または0で構成される文字列)でない場合
   If Mid(A, i, 1) <> "1" And Mid(A, i, 1) <> "0" Then
    x = 0
    'Cells(1, 2)は表示しない
    Cells(1, 2).Value = ""
    'マクロを終了する。
    'MsgBox "Err" ' ←この行が不要です。削除してください。すみません。
    Exit Sub
   End If
   'チェックOKの場合だけ、10進数変換の計算をする。
   x = x + Mid(A, i, 1) * 2 ^ (B - i)
 Next
 Cells(1, 2).Value = x
End Sub

>ちなみに教師からは二進数は1と0だけで成りたっているから
>それ以外の数を除くのを付け足すように言われました。

「それ以外の数を除く」という仕様がわからないですね。
123001という数字があった場合、どうしたいのですか?
上記のコードであれば、0または1以外の文字があれば、2進数でないと判断して処理を中止するようにしているのですが。

【14860】Re:セルの値が2進数文字列かどうかを判断...
質問  たすけてください  - 04/6/8(火) 22:29 -

引用なし
パスワード
   'で始まる行はコメント行で、プログラムでは無視されますので、そこに意味を書いたのですが、具体的にどこがわからないのですか?

If Mid(A, i, 1) <> "1" And Mid(A, i, 1) <> "0" Then
    x = 0
    'Cells(1, 2)は表示しない
    Cells(1, 2).Value = ""     , Exit Sub
 
の部分の意味が分かりません。

【14862】Re:セルの値が2進数文字列かどうかを判断...
発言  かみちゃん  - 04/6/8(火) 22:34 -

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

>の部分の意味が分かりません。

'Cells(1, 1)の値が2進数文字列(1または0で構成される文字列)でない場合
If Mid(A, i, 1) <> "1" And Mid(A, i, 1) <> "0" Then
 '10進数変換用の変数xをクリアする。必要ないかもしれないが、一応。
 x = 0
 'Cells(1, 2)に""とする。(表示しない)
 Cells(1, 2).Value = ""
 'マクロを終了する。Sub〜プロシージャ(マクロ)をExit(抜ける)する
 Exit Sub
End If

とコメント書いてあるのですが、どこがわからないですか?

【14866】Re:セルの値が2進数文字列かどうかを判断...
質問  たすけてください  - 04/6/8(火) 23:07 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>の部分の意味が分かりません。
>
>'Cells(1, 1)の値が2進数文字列(1または0で構成される文字列)でない場合
>If Mid(A, i, 1) <> "1" And Mid(A, i, 1) <> "0" Then
> '10進数変換用の変数xをクリアする。必要ないかもしれないが、一応。
> x = 0
> 'Cells(1, 2)に""とする。(表示しない)
> Cells(1, 2).Value = ""
> 'マクロを終了する。Sub〜プロシージャ(マクロ)をExit(抜ける)する
> Exit Sub
>End If
>
>とコメント書いてあるのですが、どこがわからないですか?


<>これって何の記号ですか。

【14868】Re:セルの値が2進数文字列かどうかを判断...
回答  かみちゃん  - 04/6/8(火) 23:14 -

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

> <>これって何の記号ですか。

「比較演算子」をヘルプで確認してみてください。答えが載ってます。
高校の情報Bでは出てこないのかな?よくわかりませんが。

【14874】Re:セルの値が2進数文字列かどうかを判断...
質問  たすけてください  - 04/6/8(火) 23:29 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>> <>これって何の記号ですか。
>
>「比較演算子」をヘルプで確認してみてください。答えが載ってます。
>高校の情報Bでは出てこないのかな?よくわかりませんが。


等しくない、ということですね。

【14875】Re:セルの値が2進数文字列かどうかを判断...
回答  かみちゃん  - 04/6/8(火) 23:36 -

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

>等しくない、ということですね。

そうです。
Mid(A, i, 1) <> "1"
で、「変数Aのi桁目から1文字を取得した値」が「1」と「等しくない」となります。

【14879】Re:セルの値が2進数文字列かどうかを判断...
お礼  たすけてください  - 04/6/9(水) 0:07 -

引用なし
パスワード
   ▼かみちゃん さん:
有難うございました。またお世話になるかと思いますが、どうぞよろしくお願いします。

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