根据多个变量约束生成零件代码

时间:2019-07-17 08:41:27

标签: excel vba

我需要以一致的方式根据许多不同的约束条件生成数千个独特的描述性股票代码。因此,例如,产品组a由材料,规格,周长,折痕和锥度定义。这些类别中的每种都有不同的数量-因为有2种独特的材料,10种独特的量规,20种独特的周长,10种独特的折痕,它们是否为锥形。因此,例如,产品代码应类似于:MAT11.001100G7FTY,它是材料1、1.00规格,1100围长,7折,锥形。

产品组b的另一个示例受材料,规格,产品类型(组b中有多种产品类型),长度,宽度和高度的约束。因此,示例代码为MAT11.25SUMP800Lx900Wx700H,它是材料1、1.25规格,集液槽,800长,900宽,700高。

需要生成利用所有约束的所有组合。因此,ABCDE是零件代码,而ACE不是。

约束数据非常简单,我可以将其转换为所需的任何形式。目前,我将每个产品组分开,然后每列设置一个约束类型,并将该约束的所有可能选项作为行。按照下面的

我对VBA有基本的了解,但是正在努力解决此问题的最佳解决方案。我应该生成每个约束的数组,然后将每个数组中的每个值彼此串联吗?还是多维数组?还是我应该遍历所有行和所有列,然后将值直接写到将直接存储最终值的列中,而不是沿途将它们存储在变量中

我需要的最终结果是一列,每行一个零件代码。

编辑:这是约束数据和我当前的代码-目前可以使用,但是数组的数量和数组的大小是硬编码的。有什么办法可以概括一下吗?

enter image description here

Option Explicit

Sub test()

    Dim m(0 To 1) As String 'material array
    Dim g(0 To 18) As String 'girth array
    Dim f(0 To 9) As String 'fold array
    Dim t(0 To 1) As String 'taper array

    Dim mItem As Variant 'material array element
    Dim gItem As Variant 'girth array element
    Dim fItem As Variant 'fold array element
    Dim tItem As Variant 'taper array element

    Dim i As Integer 'for iterating

    For i = 0 To 1
        m(i) = Cells(i + 1, 1).Value 'store materials in material array
    Next i

    For i = 0 To 18
        g(i) = Cells(i + 1, 2).Value 'store girth in material array
    Next i

    For i = 0 To 9
        f(i) = Cells(i + 1, 3).Value 'store folds in material array
    Next i

    For i = 0 To 1
        t(i) = Cells(i + 1, 4).Value 'store taper in material array
    Next i

    'reset iteration to row 1
    i = 1

    'loop through each arary and concatate values
    For Each mItem In m()
        For Each gItem In g()
                For Each fItem In f()
                    For Each tItem In t()

                        ActiveSheet.Cells(i, 10).Value = ActiveSheet.Cells(i, 10).Value & mItem 'write material value to result col
                        ActiveSheet.Cells(i, 10).Value = ActiveSheet.Cells(i, 10).Value & gItem 'write girth value to result col
                        ActiveSheet.Cells(i, 10).Value = ActiveSheet.Cells(i, 10).Value & fItem 'write fold value to result col
                        ActiveSheet.Cells(i, 10).Value = ActiveSheet.Cells(i, 10).Value & tItem 'write taper value to result col

                        i = i + 1 'next row
                Next
            Next
        Next
    Next

End Sub

0 个答案:

没有答案