我正在尝试根据来自三个不同单元格的n-1个值填充单元格。我在y上获得了x的成功,但是在z上遇到了问题
例如,我输入:
x y z
5 2 2
输出应为:
x应具有0、1、2、3、4;每个重复两次
y应该有0和1;每次重复五次
z应该为0和1;每次重复五次,但输出与x或y
x y z
0 1 0
1 0 0
2 1 0
3 0 0
4 1 0
0 0 0
1 1 0
2 0 0
3 1 0
4 0 0
0 1 1
1 0 1
2 1 1
3 0 1
4 1 1
0 0 1
1 1 1
2 0 1
3 1 1
4 0 1
我用过:
对于x
= IF(ROW()<= 1 + A $ 1 * A $ 2 * A $ 3,INT((ROW()-2)/(A $ 2 * A $ 3)),“ 0”)
y的
= IF(ROW()<= 1 + A $ 1 * A $ 2 * A $ 3,MOD(ROW()-1,A $ 3),“ 0”)
对于z
= IF(ROW()<= 1 + A $ 1 * A $ 2 * A $ 3,MOD(ROW()-1,A $ 2),“ 0”)
A1到A3具有xyz的项目数。关于如何执行此操作有什么建议吗?
答案 0 :(得分:0)
很抱歉,您的回答很晚。如果您让自己使用VBA
(因为您在评论中要求使用它),就说您有下一张纸:
您可以将下一个Macro
放在按钮GO
上:
Sub CartesianProduct()
'Constants:
Dim top_x As Integer
top_x = ActiveSheet.Cells(2, 1).Value - 1
Dim top_y As Integer
top_y = ActiveSheet.Cells(2, 2).Value - 1
Dim top_z As Integer
top_z = ActiveSheet.Cells(2, 3).Value - 1
'Coordinates
Dim x As Integer
Dim y As Integer
Dim u As Integer
'Counter (row):
Dim c As Integer
c = 2
'----------
For x = 0 To top_x
For y = 0 To top_y
For z = 0 To top_z
ActiveSheet.Cells(c, 5).FormulaR1C1 = x
ActiveSheet.Cells(c, 6).FormulaR1C1 = y
ActiveSheet.Cells(c, 7).FormulaR1C1 = z
c = c + 1
Next z
Next y
Next x
End Sub
然后,通过单击GO
,用表中笛卡尔积的集合填充表:
如果要避免使用具有相同值的坐标点,只需进行以下调整:
For x = 0 To top_x
For y = 0 To top_y
For z = 0 To top_z
If x <> y Or x <> z Or y <> z Then
ActiveSheet.Cells(c, 5).FormulaR1C1 = x
ActiveSheet.Cells(c, 6).FormulaR1C1 = y
ActiveSheet.Cells(c, 7).FormulaR1C1 = z
c = c + 1
End If
Next z
Next y
Next x