- ベストアンサー
A~H 4桁 組み合わせパターン 全件リスト
A, B, C, D, E, F, G, Hのうち4桁(桁数固定, 文字重複可)の組み合わせパターンをExcelなどでリスト化する方法を教えてください。 例 AAAA ABCD
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
AからHまでの8文字ですから、数字に置き換えれば、0から7までです。 ですから八進法の0000から7777まで(十進法の0から4095)まで、縦にセルを埋めて、0→A、1→Bと置換していけば、リストが出来上がります。 具体的にには 1)A1に0を入力 2)B1に=DEC2OCT(A1)の式を入力(八進法表示) 3)C1に=TEXT(B1,"0000")の式を入力(頭を0で埋めた文字列に変換) 4)A列を0から4095まで埋める 5)B列・C列の式を下にコピー 6)C列のすべての値(式ではない)をD列にコピー 7)置換機能でD列の数字をアルファベットに8回全置換する。 0→A、1→B、2→C、3→D、4→E、5→F、6→G、7→H
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
8文字のうち4つを取り出し、その組み合わせは=COMBIN(8,4) で70 その各々の4文字の1組に対し、AAAAのような組み合わせも許すのだから、=4*4*4*4のバリエーション(組み合わせ)があって =G1*256で 17920 通りあるのでは。 ーー >8文字のうち4つを取り出しの、具体例は(このパターンの質問が多い)エクセルシートのセルに打ち出す場合、 ここの質問や、WEB記事にVBAコードが見つかり、 https://oshiete.goo.ne.jp/qa/3063237.htmlのベストアンサーにもあります。 再帰処理というロジックを使っている例です。 === 以下標準モジュールに、 Const nStr As String = "ABCDEFGH" '←n個の文字列 Const m As Integer = 4 '←取り出す個数 Dim n As Integer '←ご質問文のn Dim rStr As String '←m個取り出した文字列を結合したもの Dim mRow As Integer '←エクセル表へ書き出す際の行番号 Dim Nest As Integer '←再帰呼び出しの深さ=rStrの何文字目に取り出すのか '----------------------- Sub combi() n = Len(nStr) 'nStrの文字列長をnに代入 If m > n Then Exit Sub 'nよりmが大きければ終了 rStr = String(m, " ") 'rStrにm個の空白を代入 Cells.ClearContents '書き出す表をクリア mRow = 0 '書き出す行番号0クリア Nest = 0 '再帰呼び出し深さ0クリア combiPr (0) 'サブルーチン combiPr を引数0で呼び出し End Sub '----------------------- Sub combiPr(n1) 'サブルーチン開始 引数はその時点での開始位置(nStrの何文字目まで処理したか) Dim mCol As Integer '←エクセル表へ書き出す際の列番号 For nn = n1 + 1 To n - m + Nest + 1 'nnを開始位置の次の文字から始めて残りの文字数の手前までFor~Nextを繰り返す Nest = Nest + 1 '再帰呼び出しを1カウントアップ Mid(rStr, Nest, 1) = Mid(nStr, nn, 1) 'rStrのNest番目にnStrのnn番目を代入 If Nest = m Then 'rStrに取り出したのがm文字目なら mRow = mRow + 1 'エクセル表の次の行へ For mCol = 1 To m 'rStrの1文字目からm文字目まで書き出す。 Cells(mRow, mCol).Value = Mid(rStr, mCol, 1) Next Else 'そうでなければ、つまり現在の開始位置(=nStrの何文字目まで処理したか)がm個まで達してなければ Call combiPr(nn) '現在の到達位置(nStrの何文字目まで処理したか)にnnをセットしてcombiPrを呼び出す(再帰呼び出し) End If Nest = Nest - 1 '再帰呼び出しを1後退 Next End Sub を実行すると、70行の結果が返りました。行が多いので掲載略。 =COMBIN(8,4) での70という結果と一致してますので正しいでしょう。 === あとそれぞれの(上記結果の各行の、各列4セルの)4文字について、第1桁には第1文字4個(4種)、第2桁には第1文字4個(4種)、第3桁には、第3文字4個(4種)、第4桁には第4文字4個(4種)の組み合わせをForNextの繰り返しで、結果の4セル分のパターンを作ればよいと思う。 ==== こういうのはVBA(プログラムで処理)が普通と思うが。 既に出ているご回答と数が違うようなので心配。 この分野(順列・組み合わせ)の勉強が、小生十分でないのでとりあえずここで止めます。
- SI299792
- ベストアンサー率47% (772/1616)
すみません G迄と勘違いをしていました。 A1: =CONCAT(CHAR(MID(BASE(ROW()-1,8,4),ROW($1:$4),1)+65)) A4096 迄コピペ。
- SI299792
- ベストアンサー率47% (772/1616)
A1: =CONCAT(CHAR(MID(BASE(ROW()-1,7,4),ROW($1:$4),1)+65)) Excel2019 の場合、Ctrl+Shift +Enter で配列数式数式にします。(数式に{}が付きます) A2401 迄コピペ。 (7^4=2401です) Excel2016 以前では使えません。補足に書いていただければ、2016以前の数式を上げます。
お礼
シンプルな操作で目的のリストが作れました。 ありがとうございました。