>マクロの使い方がわからないので、出来れば関数で教えていただけると有り難いです。
ーー
だから下記は質問者には意味がないかと思う。
エクセル関数で説明してほしいということだろう。
しかし、エクセル関数での回答は、おいそれとは、出ないだろう。
エクセルは数を数えるのは得意で簡単なばあいが多い。
順列の数は
Sub test03()
MsgBox Application.WorksheetFunction.Permut(5, 5)
End Sub
や
エクセルのPERMUT関数で出せる。
しかし変数を使えない関数では、本件は、式が複雑になるだろう。
もし関数の回答が出て、それほど雑な式でなく、短いものなら、その回答者に、本当に感謝してください。
===
>重複しない組合せ全通り
は順列の問題ではないかと思う。
この点間違っていたらすみません。-->本回答はスルーしてください。
ーー
あえて掲げる理由は、
将来この質問と似た質問を考えて、VBAでもよいと、WEB照会する人が出れば、参考にしてもらおうと、下記を挙げてみました。
下記は、https://excel-ubara.com/excelvba5/EXCELVBA264.html
を借用しました。
Public Sub permutation(ByRef aryIn, ByRef aryOut, Optional ByVal i As Long = 0)
Dim j As Long
Dim ix As Long
Dim sTemp
Dim ary
If i < UBound(aryIn) Then
For j = i To UBound(aryIn)
'配列を入れ替える
ary = aryIn
sTemp = aryIn(i)
aryIn(i) = aryIn(j)
aryIn(j) = sTemp
'再帰処理、開始位置を+1
Call permutation(aryIn, aryOut, i + 1)
aryIn = ary '配列を元に戻す
Next
Else
'配列の最後まで行ったので出力
If IsEmpty(aryOut) Or Not IsArray(aryOut) Then
ix = 0
ReDim aryOut(UBound(aryIn), ix)
Else
ix = UBound(aryOut, 2) + 1
ReDim Preserve aryOut(UBound(aryIn), ix)
End If
For j = LBound(aryIn) To UBound(aryIn)
aryOut(j, ix) = aryIn(j)
Next j
End If
End Sub
Sub sample1()
Dim aryIn
Dim aryOut
'入力配列
aryIn = Array(1, 2, 3, 4, 5)
'順列作成
Call permutation(aryIn, aryOut)
'シートへ出力
Cells.ClearContents
Range("A1").Resize(UBound(aryOut, 2) + 1, UBound(aryOut, 1) + 1) = _
WorksheetFunction.Transpose(aryOut)
End Sub
ーー
そして数字で出てくる結果を、具体的な、氏名の例にするため作成した(自作)
s = Array("", "木村", "野村", "東", "泉", "大友")
の部分は、勝手な例なので、適当な名称のものに、かえてください。
5人の場合ですが。
Sub test04()
s = Array("", "木村", "野村", "東", "泉", "大友")
Dim cl As Range
Set sh1 = Worksheets("Sheet2")
Set sh2 = Worksheets("Sheet4")
For Each cl In sh1.Range("a1:f120")
sh2.Cells(cl.Row, cl.Column) = s(cl)
Next
End Sub
===