@青水蛙鸣 @Will__Cheung @xzk235自定义函数完成版
单元格输出结果如下
2 found:
1-A:1,4-B:3,3-C:2,2-D:1,Total=7;
2-A:1,4-B:3,3-C:2,1-D:1,Total=7;
Public aResult As Variant
Function UO(rMatrix As Variant) As Variant
Dim iSize As Integer
Dim aMatrix As Variant
Dim iResult As Integer, iColumn As Integer, iLineTotal As Integer, iMax As Integer, iSenorioCount As Integer
Dim sResult As String, sLineResult As String
ReDim aResult(0)
aMatrix = rMatrix
iSize = UBound(aMatrix, 2)
Call Pick("", iSize)
For iResult = 1 To UBound(aResult)
iLineTotal = 0
sLineResult = ""
For iColumn = 1 To iSize
iLineTotal = iLineTotal + aMatrix(Mid(aResult(iResult), iColumn, 1), iColumn)
sLineResult = sLineResult & rMatrix.Cells(1, 1).Offset(Mid(aResult(iResult), iColumn, 1) - 1, -1) & "-" & rMatrix.Cells(1, 1).Offset(-1, iColumn - 1) & ":" & aMatrix(Mid(aResult(iResult), iColumn, 1), iColumn) & ","
Next iColumn
sLineResult = sLineResult & "Total=" & iLineTotal & ";" & vbCrLf
If iLineTotal > iMax Then
iSenorioCount = 1
iMax = iLineTotal
sResult = sLineResult
ElseIf iLineTotal = iMax Then
iSenorioCount = iSenorioCount + 1
sResult = sResult & sLineResult
End If
Next iResult
sResult = iSenorioCount & " found: " & vbCrLf & sResult
UO = sResult
End Function
Sub Pick(ByVal s As String, iSize As Integer)
Dim i As Integer
For i = 1 To iSize
If InStr(1, s, i) Then
ElseIf Len(s) + 1 = iSize Then
ReDim Preserve aResult(UBound(aResult) + 1)
aResult(UBound(aResult)) = s & i
Else
Call Pick(s & i, iSize)
End If
Next i
End Sub