私の質問は 推奨される重複 とは異なることに注意してください。提案された複製は、オプションの数に基づいて考えられるすべてのバリエーションを示しているわけではないため、3の入力は1、2、および3の入力のバリエーションを持つことができます。提案された複製は、バリエーションごとに常に3つの入力を提供します。
さらに、私の質問では、入力の可能なすべての順序を示すためにバリエーションも求めています。推奨される複製では、列Aは常に出力の左端の位置にあり、列bは出力の中央にあり、列cは出力の左側にあります。
したがって、提案された重複は私の質問に回答しますしません。
任意の数の指定された入力値を取り、可能なすべての出力値を生成する数式を作成するにはどうすればよいですか 組み合わせ 指定された入力値に基づく順列。
たとえば、入力値が次のような場合
One
Two
生成された出力は次のようになります
One
OneTwo
Two
TwoOne
3つの値が指定された場合、次のようになります。
誰もがこれをExcelで行う方法を知っていますか?
任意の数の入力値を入力できるようにしたいのですが、入力値は任意の単語、フレーズ、数字、文字、または 組み合わせ それらすべての順列。
私はこれを試しました https://www.ozgrid.com/forum/forum/help-forums/Excel-vba-macros/146983-all-possible-combinations-from-single-column しかし、それは機能していないようです。
A列に入力した場合(1行に1ワード):
One
Two
Three
列Bで、VBAは私に(単一のセルで)与えます:
one,two,three
それは私にすべてを可能にするわけではありません 組み合わせ 順列、それは私が垂直方向に列に入力したものを変更し、水平方向に結果を出力します。
このスプレッドシートを作成してくれた次のVBAスクリプト:
これはスクリプトです:
Option Explicit
Sub PermutationsN()
Dim vElements As Variant, vresult As Variant
Dim lRow As Long, i As Long
vElements = Application.Transpose(Range("A1", Range("A1").End(xlDown)))
Columns("B:Z").Clear
For i = 1 To UBound(vElements)
ReDim vresult(1 To i)
Call PermutationsNPR(vElements, i, vresult, lRow, 1)
Next i
End Sub
Sub PermutationsNPR(vElements As Variant, p As Long, vresult As Variant, lRow As Long, iIndex As Integer)
Dim i As Long, unique As Variant
For i = 1 To UBound(vElements)
vresult(iIndex) = vElements(i)
If iIndex = p Then
unique = UniqueArray(vresult)
If (UBound(vresult) = UBound(unique)) Then
lRow = lRow + 1
Cells(lRow, 3).Value = Join(unique)
End If
Else
Call PermutationsNPR(vElements, p, vresult, lRow, iIndex + 1)
End If
Next i
End Sub
Function UniqueArray(todoarray As Variant) As Variant
Dim arr As New Collection, a
Dim i As Long
On Error Resume Next
For Each a In todoarray
arr.Add a, a
Next
ReDim returnVal(1 To arr.count)
For i = 1 To arr.count
returnVal(i) = arr(i)
Next
UniqueArray = returnVal
End Function
マクロは、Excelの制限内で、A列の任意の数のアイテムに対して機能します。
この例を考えてみますA列データ:-数値(ヘッダー)1 2 3 4 5 B列データ:-OutPut(ヘッダー)
この数式をB2に貼り付けます:-
=IFERROR(IF(INDEX(OFFSET($A$1,1,0,COUNTA($A$2:$A$20)),ROUNDUP(ROWS($A$1:A1)/COUNTA($A$2:$A$20),))=INDEX(OFFSET($A$1,1,0,COUNTA($A$2:$A$20)),MOD(ROWS($A$1:A1)-1,COUNTA($A$2:$A$20))+1),INDEX(OFFSET($A$1,1,0,COUNTA($A$2:$A$20)),ROUNDUP(ROWS($A$1:A1)/COUNTA($A$2:$A$20),)),INDEX(OFFSET($A$1,1,0,COUNTA($A$2:$A$20)),ROUNDUP(ROWS($A$1:A1)/COUNTA($A$2:$A$20),))&INDEX(OFFSET($A$1,1,0,COUNTA($A$2:$A$20)),MOD(ROWS($A$1:A1)-1,COUNTA($A$2:$A$20))+1)),"")
この関数は、A20までのデータを持つ「数値」列で機能します。