本文へ

エクセル計算 文字と文字の間にドット

レス5
(トピ主 0
😣
こばん
話題
こんばんは。
指定のルールでパターン数とパターンを知りたいですが、思いつかず、教えていただきたいです。
エクセルに文字を入力すると、そのパターン数とパターンが出てくるのが理想です。

例えば、
abc
と文字があるとすると、
a.bc
ab.c
a.b.c
abc
のように文字と文字の間に.を挿入した場合のパターン数とパターンを知りたいのです。

ルール
1.ドットの重複は不可(a..b.cなどはなく、必ず1つだけ.が入る)
2.文字の最初と最後にはドットはつかない(.a.bcやa.bc.とはならない)
3.ドットなしはOK
4.文字の数は決まっていない(abcだったり、abcdだったり、最大は決めてもいい)

トピ内ID:4553765414

これポチに投票しよう!

ランキング

レス

レス数5

このトピックはレスの投稿受け付けを終了しました

とりあえずパターン数だけ

041
Smartweed
「ab」だと、ドットがあるかないかの2通り。「abc」だとabの間で2通り、bcの間で2通りで、合計 2 X 2 で4通り、「abcd」だと、文字と文字の間は3つあるので 2 X 2 X 2 で8通り... ということで、文字数が n とすると、パターン数は 2^(n-1) ということになります。 全パターンを求めるとなると、VBA でも使わないとダメでしょうか。 ちなみに、エクセルは 1048576行あるので、21文字までは一列で全パターンを表示できます。(2^(21-1) == 2^20 == 1048576)

トピ内ID:5684380675

...本文を表示

行方向に展開すれば表示はできますが……

🙂
ochapi
この問題は、「字と字の間に(何もいれない|.を入れる)」という問題なので、数は既にレスがついているとおり取り得る状態数 2を字間の個数掛けたもの、つまり、2^(字の間の数)=2^(文字数-1)通りになります。 VBAを使わずに実装するなら、字間の状態を表すために(0|1)を使ってIF関数で判別して、空文字と.に変換。それを文字列結合。みたいな方法で可能です。 # VBAで処理するのに比べるとスマートじゃないですけど。 abcなら、 0番目 00 a0b0c → abc 1番目 01 a0b1c → ab.c 2番目 10 a1b0c → a.bc 3番目 11 a1b1c → a.b.c みたいな感じで。 ○番目から対応する1と0の文字列に変換するためには、DEC2BIN関数が使えます。

トピ内ID:3550346537

...本文を表示

マクロ(1)

😑
のまど
Sub ドット付き文字() 'A1セルに5文字以下の文字を入れて実行 M = Range("A1") ms = Len(M) n = 2 ^ (ms - 1) M1 = Mid(M, 1, 1) M2 = Mid(M, 2, 1) M3 = Mid(M, 3, 1) M4 = Mid(M, 4, 1) M5 = Mid(M, 5, 1) X1 = "" X2 = "" X3 = "" X4 = "" Cells(1, 2) = M1 & X1 & M2 & X2 & M3 & X3 & M4 & X4 & M5 '続きます

トピ内ID:9029813862

...本文を表示

マクロ(2)

😑
のまど
'続き For i = 2 To n If X1 = "." Then X1 = "" If X2 = "." Then X2 = "" If X3 = "." Then X3 = "" If X4 = "" Then X4 = "." Else X = "" End If Else X3 = "." End If Else X2 = "." End If Else X1 = "." End If Cells(i, 2) = M1 & X1 & M2 & X2 & M3 & X3 & M4 & X4 & M5 Next i End Sub ありゃりゃ、If文のTABが消えてしまった?

トピ内ID:9029813862

...本文を表示

マクロ(拡張版)

😑
のまど
Sub ドット文字() 'セルA1に21文字以内を入力して実行 Dim M(21) As String Dim X(21) As String MJ = Range("A1") ms = Len(MJ) N = 2 ^ (ms - 1) For i = 1 To ms M(i) = Mid(MJ, i, 1) X(i) = "" Next i Range("B1") = MJ For i = 2 To N j = 1 10 If X(j) = "." Then X(j) = "" j = j + 1 If j < ms Then GoTo 10 If X(j) = "" Then X(j) = "." Else X(j) = "" End If End If Else X(j) = "." End If Mdot = "" For k = 1 To ms Mdot = Mdot & M(k) & X(k) Next k Cells(i, 2) = Mdot Next i End Sub

トピ内ID:9029813862

...本文を表示
[PR]
気に入ったトピを保存するといつでも読み返せる
気に入ったトピを保存するといつでも読み返せる
使用イメージ
使用イメージ

マイページ利用でもっと便利に!

お気に入り機能を使う ログイン
レス求!トピ一覧