根据x乘y乘以z单元格值来填充单元格

时间:2019-03-14 08:50:17

标签: excel excel-formula

我正在尝试根据来自三个不同单元格的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的项目数。关于如何执行此操作有什么建议吗?

1 个答案:

答案 0 :(得分:0)

很抱歉,您的回答很晚。如果您让自己使用VBA(因为您在评论中要求使用它),就说您有下一张纸:

ActiveSheet

您可以将下一个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,用表中笛卡尔积的集合填充表:

ActiveSheet

如果要避免使用具有相同值的坐标点,只需进行以下调整:

    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