ここから本文です

組み合わせ表を作るExcel VBAのマクロについて N個の中から2個の物を重複を許さ...

mar********さん

2016/2/522:19:27

組み合わせ表を作るExcel VBAのマクロについて

N個の中から2個の物を重複を許さず選ぶ組み合わせ表を生成することを目的とした
マクロ(Excel VBA)を作成しました。

"Subああ"のNに適当な自然数を入れるとN個の中から2個の物を重複を許さず選ぶ組み合わせ表
を生成します。

参考にするものもなかったので三角数の考え方を使って独自に考えたものなので、
アルゴリズム正しいものが出来ているのかという点でも若干不安なのですが、
より賢いアルゴリズムはないでしょうか?ご教示下さい。

よろしくお願いします。
(用途としては、複数のデータセット間の距離を測る際に使います)


Sub ああ()
N = 10
M_max = (N * (N - 1) / 2)
For M = 1 To M_max
Cells(M, 1) = M
Cells(M, 2) = CN2(N, M, 1)
Cells(M, 3) = CN2(N, M, 2)
Next M
End Sub

Function CN2(N, M, p)
N = Application.WorksheetFunction.RoundDown(N, 1)
M = Application.WorksheetFunction.RoundDown(M, 1)
M_max = (N * (N - 1) / 2)
If M > M_max Then GoTo CN2_err
If N <= 0 Then GoTo CN2_err
If M <= 0 Then GoTo CN2_err
a = 0
For K = 1 To N

If M > a Then
i = K
S = (N - K) + a
j = N + M - S
End If
a = (N - K) + a
Next K

If 0 <> 0 Then
CN2_err:
i = 0
j = 0
End If

If p = 1 Then
CN2 = i
ElseIf p = 2 Then
CN2 = j
Else
CN2 = 0
End If
End Function

閲覧数:
238
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

uso********さん

2016/2/522:44:55

''コレ、只の二重ループと何が違うん?
''[VBScript上で稼働]''
Sub bb(N)
  Dim I, J, M
  M = 0
  For I = 1 To N - 1
    For J = I + 1 To N
      M = M + 1
''    Cells(M, 1) = M
''    Cells(M, 2) = I
''    Cells(M, 3) = J
      WScript.Echo(M & ":[" & I & "," & J & "]")
    Next
  Next
End Sub
Call bb(5)

質問した人からのコメント

2016/2/12 20:36:45

回答いただきありがとうございました。VBSがよくわからないのですが勉強します。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる