我需要输入多个变量的最大值和最小值,并生成包含每个可能组合的数组。
示例:输入数组
[A min, A max
B min, B max]
应该返回
[A min, B min
A min, B max
A max, B min
A max, B max]
我能够做到这一点,但是只能使用3个以下的变量,但是无法方便地扩展它。我不知道如何使它适用于任何数量的变量,例如是否有一个C也具有最大值和最小值。
有人有建议吗?
编辑: 如果这对任何人都有用,则此功能的目的是找到基于变量的表达式的极限。第一个数组是根据表达式中包含的变量生成的,然后将这些变量替换为第二个数组中的值。因此,从本质上讲,每一项都经过计算以找到可能的最高结果和可能的最低结果。
因此创建第一个数组的输入可能类似于:'A + B' 然后,对于第二个数组中的每一行,将用指令值替换“ A”和“ B”。
答案 0 :(得分:0)
这是一个VBA函数,可用于解决您的问题的一种解释:
Function Products(A As Variant) As Variant
'A is assumed to be a 2-column 1-based array
'The function returns another 2-column 1-based array
'Where each successive 4 rows gives the Cartesian product
'of two of the rows of A, with the earlier row
'providing the first element and the latter row the second
Dim i As Long, j As Long, k As Long, n As Long
Dim P As Variant
n = UBound(A, 1)
ReDim P(1 To 2 * n * (n - 1), 1 To 2)
k = 1
For i = 1 To n - 1
For j = i + 1 To n
P(k, 1) = A(i, 1)
P(k, 2) = A(j, 1)
P(k + 1, 1) = A(i, 1)
P(k + 1, 2) = A(j, 2)
P(k + 2, 1) = A(i, 2)
P(k + 2, 2) = A(j, 1)
P(k + 3, 1) = A(i, 2)
P(k + 3, 2) = A(j, 2)
k = k + 4
Next j
Next i
Products = P
End Function
使用方式:Range("C1:D12").Value = Products(Range("A1:B3").Value)