• ベストアンサー

vba 組み合わせ表示

EXCEL  A列のA1からA10に数値がある。 B列のB1からB10に数値がある。 なお各jについてAjとBjは値が異なります。Aj<Bj(j=1~10) Cjに、AjまたはBjからどちらかをもってきます。 こうしたときC1からC10を1組としてできる組みとしては、1024通りの組ができますが、 そのできた組をCell(21,1)からCell(30,1)を(1組)、として、Cell(21,1024)からCell(30,1024)まで表示したい。VBAにてどのように記述すればよいかお教え願いたい。 自分で考えたたけど、複雑になって手におえません。よろしくお願いします。

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

  • ベストアンサー
回答No.1

ExcelのバージョンによってはColumnが1024もないので A1からA10に1から10までを B1からB10に11から20までを入力し、 出力場所を (21,1) = A21 から(21,10) = J21を一組として (1044,1)= A1044 から(1044,10) = J1044までに変更しています。 [考え方。] 10bitの2進数を考えます。 位の高い方から順にbit9,bit8・・・・bit0と呼ぶことにします。 つまりこの二進数を十進数で書くと 2^9 * bit9 + 2^8 * bit8 + ・・・・+ 2^0 * bit0となります。 さて、bitNはANかBNかの判定に用いられ、1ならばBNを、0ならばANを選びます。 今1024通りに0から2^10-1の番号を振ったとして この番号2^(N+1)で割った余りを、2^Nで割った商がbitNになります。 何か解りにくい説明だな ================== Option Explicit Sub hoge() Dim i As Integer Dim j As Integer Dim k As Integer For i = 0 To 2 ^ 10 - 1 k = i For j = 9 To 0 Step -1 If k \ 2 ^ j = 1 Then Cells(i + 21, j + 1).Value = Cells(j + 1, 2).Value 'BN ElseIf k \ 2 ^ j = 0 Then Cells(i + 21, j + 1).Value = Cells(j + 1, 1).Value 'AN End If k = k Mod 2 ^ j Next j Next i End Sub

taktta
質問者

お礼

やっと理解できました。 とても参考になり、おかげで解決しました。どうもありがとうございました。

関連するQ&A

専門家に質問してみよう