- ベストアンサー
エクセル変わった表の作り方
例えばABCと三つの文字があるとして、これらの全ての組み合わせは(A,B,C,AB、AC、BC、ABC)七種類ですよね。これをエクセルで一発で表にしてくれる方法ないですかね?A,B,C,D・・・・と入力したら全ての組み合わせが表示されるようにしたいのですが・・・無理ですか?いちいち自分で全部しらべて入力するしかないですかねー?教えてください。お願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
実際自分で使ったことないので説明できないのですが、ダウンロードして使えます。 参考まで...。
その他の回答 (1)
- nishi6
- ベストアンサー率67% (869/1280)
A B C D 1 あ あ 1 2 い い 1 3 う あい 2 4 う 1 5 あう 2 6 いう 2 7 あいう 3 2進数のビット演算で計算してみました。 上図で説明すると、A1:A3に使用する文字(例では あ、い、う)を入力して、 その範囲(A1:A3)を選択した状態で、下記マクロを実行します。 C列に結果の文字列を、D列にその文字列の長さを出力します(ソートのため) 出力はソートしていません。必要ならば手動でソートして下さい。 選択範囲に文字がなかったりした場合のチェックはしていません。 使う文字は計算上、15個まで可能です。実際は10個までしかテストしていません。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入します。 出てきたコードウインドウに下記マクロをコピーして貼り付けます。 Sub Kumiawase() Dim st() As String '// 組合せに使う文字 Dim num As Integer '// 組合せに使う文字数 num = Selection.Rows.Count ReDim st(num) '// 組合せに使う文字を取り込む Dim cot As Integer For cot = 1 To num st(cot) = ActiveCell.Offset(cot - 1, 0).Text Next Dim v As Integer '// 使用不使用を決定するための数値 Dim rw As Long '// 出力行数 Dim strOut As String '// 組み合わせ結果の文字列 '// ***** ビット演算で組合せを決定する ***** For v = 1 To 2 ^ num - 1 strOut = "" For cot = 0 To num - 1 '// ビットが立っていれば使う If v And 2 ^ cot Then strOut = strOut & st(cot + 1) End If Next ActiveCell.Offset(rw, 2) = strOut '// 作成した文字列 ActiveCell.Offset(rw, 3) = Len(strOut) '// ソートのために桁数も出力 rw = rw + 1 Next End Sub