Excel VBA質問箱 IV

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

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


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

【63087】任意の数だけ、0か1をわりあてる MAK 09/10/6(火) 14:20 質問[未読]
【63088】Re:任意の数だけ、0か1をわりあてる ichinose 09/10/6(火) 19:50 発言[未読]
【63106】Re:任意の数だけ、0か1をわりあてる MAK 09/10/8(木) 22:07 お礼[未読]

【63087】任意の数だけ、0か1をわりあてる
質問  MAK  - 09/10/6(火) 14:20 -

引用なし
パスワード
   [0,0,1,0][1,0,0,1]
のように、何個かの桁にすべて0〜すべて1までの0か1の割り当て全通りを
出したいと考えています.

上の例では4ケタにしましたが、任意の桁数(20〜30くらいの数)としたいので
ループに出来ません.
結果は、できれば配列(1桁目をA[1]など)にしたいと考えています.


割り当て出力[0,0,0,0,]
→これを用いた計算
→次の割り当て
→これを用いた計算・・・

という感じ計算していきます.

再帰計算等試しましたが、難しくかなり手づまっております.
簡単にできそうなものなんですが・・・.
ご教授いただけたら幸いです.ぜひお願いします.

【63088】Re:任意の数だけ、0か1をわりあてる
発言  ichinose  - 09/10/6(火) 19:50 -

引用なし
パスワード
   ▼MAK さん:
こんばんは。


>再帰計算等試しましたが、難しくかなり手づまっております.
試したコードも見せてください。
0と1の並びなら、二進数ですよね?
下記は、15桁の例です。桁数が、17以上だとシートに表示するのは無理ですけど(Excel2002では)。

'=============================================================
Sub test()
  Const 桁 = 15
  Dim g1 As Long
  Dim g0 As Long
  g1 = 1
  For g0 = 0 To 2 ^ 桁 - 1
    Range(Cells(g1, 1), Cells(g1, 桁)).Value = decbin(g0, 桁)
    g1 = g1 + 1
  Next
End Sub

'================================================================
Function decbin(myvalue As Long, 桁 As Long) As Variant
'30桁ぐらいなら、これでいけます
  Dim g0 As Long
  ReDim bit(1 To 桁) As Long
  For g0 = 1 To 桁
    bit(桁 - g0 + 1) = 0
    If myvalue And 2 ^ (g0 - 1) Then bit(桁 - g0 + 1) = 1
  Next
  decbin = bit()
  Erase bit()
End Function

【63106】Re:任意の数だけ、0か1をわりあてる
お礼  MAK  - 09/10/8(木) 22:07 -

引用なし
パスワード
   ▼ichinose さん:
ありがとうございました、うまくいきました.
作ったのは、
>    bit(桁 - g0 + 1) = 0
>    If myvalue And 2 ^ (g0 - 1) Then bit(桁 - g0 + 1) = 1
の部分がわからず困っていたのです.後はだいたい同じなのですが・・.
こんなにシンプルに書けるとは、驚きです.
お礼が遅れてしまいましたが、本当にありがとうございました.


>▼MAK さん:
>こんばんは。
>
>
>>再帰計算等試しましたが、難しくかなり手づまっております.
>試したコードも見せてください。
>0と1の並びなら、二進数ですよね?
>下記は、15桁の例です。桁数が、17以上だとシートに表示するのは無理ですけど(Excel2002では)。
>
>'=============================================================
>Sub test()
>  Const 桁 = 15
>  Dim g1 As Long
>  Dim g0 As Long
>  g1 = 1
>  For g0 = 0 To 2 ^ 桁 - 1
>    Range(Cells(g1, 1), Cells(g1, 桁)).Value = decbin(g0, 桁)
>    g1 = g1 + 1
>  Next
>End Sub
>
>'================================================================
>Function decbin(myvalue As Long, 桁 As Long) As Variant
>'30桁ぐらいなら、これでいけます
>  Dim g0 As Long
>  ReDim bit(1 To 桁) As Long
>  For g0 = 1 To 桁
>    bit(桁 - g0 + 1) = 0
>    If myvalue And 2 ^ (g0 - 1) Then bit(桁 - g0 + 1) = 1
>  Next
>  decbin = bit()
>  Erase bit()
>End Function

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