
No.2ベストアンサー
- 回答日時:
以下でどうなりますか
★ 部分を有効にすると、左詰め表示します
Public Sub Samp1()
Dim vA As Variant, vB As Variant
Dim i As Long, j As Long, k As Long, n As Long
vA = WorksheetFunction.Transpose( _
Range("A1", Cells(Rows.Count, "A").End(xlUp)))
Application.ScreenUpdating = False
With Range("C1").Resize(, UBound(vA))
.EntireColumn.Clear
k = 1
For i = 1 To UBound(vA)
ReDim vB(1 To UBound(vA))
j = 1
n = 0
Do While (1)
While (n < i)
vB(j) = vA(j)
j = j + 1
n = n + 1
Wend
k = k + 1
.Rows(k).Value = vB
vB(j - 1) = Empty
n = n - 1
If ((UBound(vA) - j + 1) < (i - n)) Then
j = j - 2
Do While (j > 0)
If (vB(j) <> "") Then
vB(j) = Empty
j = j + 1
n = n - 1
If ((UBound(vA) - j + 1) >= (i - n)) Then Exit Do
j = j - 1
End If
j = j - 1
Loop
If (j < 1) Then Exit Do
End If
Loop
Next
With .Resize(k)
.HorizontalAlignment = xlCenter
.Borders.LineStyle = xlContinuous
On Error Resume Next
' .SpecialCells(xlCellTypeBlanks).Delete xlShiftToLeft ' ★
.Columns.AutoFit
End With
End With
Application.ScreenUpdating = True
End Sub
30246kikuさん
ありがとうございます。
ほぼイメージ通りなのですが、一点気になるところがあるので質問させてください。
ふた通り以降の組み合わせで、りんごとみかんの出力は問題ないのですが、みかん以降の組み合わせを出力する際にりんごと組み合わせるパターンがなくなってしまいます。
りんごの組み合わせの場合は、6通りでみかんの組み合わせの場合は5通り、以降は4通り、3通りと減っている形になります。
これを、全て6通りの出力パターンにしたいです。
以降のりんご、みかん、ばななの組み合わせの際も同様です。伝わりにくいかも知れませんが、対処法を教えて頂けないでしょうか
よろしくお願い致します。
No.1
- 回答日時:
こんにちは。
基本的に、数式では、
n C r
n=総数 r=抜き取り数
ですね。
おっしゃっている「ひとつだけ、ふたつだけ」というのは、[抜き取り数]だと思います。
しかし、「値が全てブランク」というのは、
論理的にはあるかもしれませんし、Excelでも、
=COMBIN(7,0) 答えは1
として成立するようですが、これは省かせていただきます。
検算方法としては、 = COMBIN(7, i)
7つの内1つ 7
7つの内2つ 21
7つの内3つ 35
7つの内4つ 35
7つの内5つ 21
7つの内6つ 7
7つの内7つ 1
----
合計:127
ということでよろしいでしょうか?
以下は、古くからある組合せアルゴリズムを今風にアレンジしたものです。
'//
Dim n_TOTAL As Long 'Numbers of total -全体の個数
Dim r_PICK As Long 'Numbers of extraction -抽出数
Dim k As Long
Sub MakingCombin()
Dim Stock() As Variant
Dim i As Long
n_TOTAL = Cells(Rows.Count, 1).End(xlUp).Row 'A列のA1から
For r_PICK = 1 To n_TOTAL
ReDim Stock(0)
For i = 1 To n_TOTAL
ReDim Preserve Stock(i - 1)
Stock(i - 1) = Cells(i, 1).Value
Next i
Call sCombinations(Stock, r_PICK)
Next r_PICK
End Sub
Sub sCombinations(ByRef Stock() As Variant, ByVal r As Long)
Dim num As Long
Dim ar As Variant
Dim i As Long, j As Long
'Dim k As Long
num = UBound(Stock) - LBound(Stock)
r = r - 1
ReDim ar(0, r)
Dim idx() As Long
ReDim idx(0 To r)
For i = 0 To r
idx(i) = i
Next i
Do
For j = 0 To r
ar(0, j) = Stock(idx(j))
Next j
k = k + 1
Cells(k, 3).Resize(, r_PICK).Value = ar 'C列からの出力
i = r
While (idx(i) = num - r + i)
i = i - 1
If i = -1 Then
Exit Sub
End If
Wend
idx(i) = idx(i) + 1
For j = i + 1 To r
idx(j) = idx(i) + j - i
Next j
Loop
End Sub
'///
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
2つの数値のうち、数値が小さい...
-
風俗店へ行く前のご飯
-
血液検査の結果が悪くefgrの値...
-
小数点以下を繰り上げたものを...
-
リンク先のファイルを開かなく...
-
透亮像について。 先日会社の健...
-
excelでsin二乗のやり方を教え...
-
excel関数で TRUEやFALSEについて
-
イタリアから帰国する際、肉製...
-
【エクセル】0以外が入力され...
-
MIN関数で空白セルを無視したい...
-
Excel 0目標に対して数字があ...
-
「内数」という言葉の意味がよ...
-
ワードのページ番号をもっと下...
-
値が入っているときだけ計算結...
-
Excel 数値の前の「 ' 」を一括...
-
WORDで複数語句を検索するには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
アトピー性皮膚炎
-
コロナになるのが死ぬほど怖い...
-
検便についてです。 便は取れた...
-
24歳、女性です。性欲が強すぎ...
-
未成年の従姉妹が自分の真似絵...
-
頭痛に関する質問です。現在高...
-
血液検査の結果が悪くefgrの値...
-
肝臓がんになりたいです。肝機...
-
何故 削除され続けるか、
-
◎敢えてノンジャンルカテゴリー...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
風俗店へ行く前のご飯
-
2つの数値のうち、数値が小さい...
-
病院側から早く来てくださいと...
-
EXCELで条件付き書式で空白セル...
-
Excel 数値の前の「 ' 」を一括...
-
リンク先のファイルを開かなく...
-
値が入っているときだけ計算結...
おすすめ情報