Excelで組合せを列挙するユーザー定義関数

Pocket

Excelを使って組合せをすべて列挙する関数「KUMIAWASE」を作りました。

書式

KUMIAWASE(全体,抜き取り数)
全体 抜き取る対象をカンマ区切りの文字列で指定します。「a,b,c,」のように末尾に「,」を付けます。
抜き取り数 抜き取る組み合わせ1組に含まれる項目の数を指定します。

解説

  • 組合せを「a,b;a,c;b,c;」のような文字列で返します。「a,b」「a,c」「b,c」の組合せが列挙されます。
  • 全体の末尾が「,」でない場合、あるいは総数<抜き取り数である場合、エラー値#VALUE!が返されます。

コード

Function KUMIAWASE(zentai, nukitorisu)
    '使用例
    'zentai="a,b,c,"
    'nukitorisu=2
    'KUMIAWASE="a,b;a,c;b,c;"
    Const sep = ";"
    Dim arrayall, arraypart
    Dim numall As Long, numpart As Long, i As Long, j As Long
    Dim temp As String, textpart As String
    If Right(zentai, 1) <> "," Then
        KUMIAWASE = "#VALUE!"
        Exit Function
    End If
    arrayall = Split(zentai, ",")
    numall = UBound(arrayall)
    If nukitorisu > numall Then
        KUMIAWASE = "#VALUE!"
    ElseIf nukitorisu = 1 Then
        For i = 0 To numall - 1
            KUMIAWASE = KUMIAWASE & arrayall(i) & sep
        Next i
    ElseIf nukitorisu > 1 Then
        For i = 0 To numall - nukitorisu
            temp = ""
            For j = i + 1 To numall - 1
                temp = temp & arrayall(j) & ","
            Next j
            textpart = KUMIAWASE(temp, nukitorisu - 1)
            arraypart = Split(textpart, ";")
            numpart = UBound(arraypart)
            For j = 0 To numpart - 1
                KUMIAWASE = KUMIAWASE & arrayall(i) _
                    & "," & arraypart(j) & sep
            Next j
        Next i
    End If
End Function

使用例

全体 抜き取り数 KUMIAWASE
a,b,c,d,e, 1 a;b;c;d;e;
a,b,c,d,e, 2 a,b;a,c;a,d;a,e;b,c;b,d;b,e;c,d;c,e;d,e;
a,b,c,d,e, 3 a,b,c;a,b,d;a,b,e;a,c,d;a,c,e;a,d,e;b,c,d;b,c,e;b,d,e;c,d,e;
a,b,c,d,e, 4 a,b,c,d;a,b,c,e;a,b,d,e;a,c,d,e;b,c,d,e;
a,b,c,d,e, 5 a,b,c,d,e;

[ 2012年10月16日 | カテゴリー: Excel | タグ: , , ]

« | »

コメント

  1. nakai より:

    こんにちは。

    プログラムのDimでは、
    Dim numall, numpart, i, j As Long
    の様にすると、

    jだけがLongになります。
    numall, numpart, iは型宣言した事にはならないので、valiantになってしまいます。ご注意ください。

  2. stabucky より:

    nakaiさん
    ありがとうございます。訂正しました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報