如何从 VBA 中的父数据创建子零件号

How to create child part number from parent data in VBA

我有两个 sheet:

MHT 包含如下产品信息: MHT Sheet

TitleHelper 包含变体信息,例如:TitleHelper Sheet

这是 sheet MHT 上的预期结果:MHT Result


因此,为了获得预期的结果,我们必须将 MHT 每一行的特定单元格与 TitleHelper

进行比较

所以首先我们需要将 MHT 的模式 1 或模式 2(Col J 或 Col K)与 TitleHelpers 模式(Col A)相匹配。所以第一项 (D123456) 有两个模式匹配项。

另一个匹配标准是 MHT 上的权重(H 列)需要小于或等于最大权重并且大于或等于 TitleHelper 上匹配模式的最小权重(B 列和 C 列) )

如果满足这些条件:对于每个匹配项,我都需要在 MHT 上的原始项目下方插入一行,并在零件号末尾添加一个带有匹配项子代码的星号。所以因为 D123456 有两场比赛并且重量是正确的。它在其下方添加了两行。第一个插入的行具有第一个匹配项的部件号 "D123456*M",第二个插入的行具有部件号 "D123456*XL"

如果模式匹配但权重不在最小值和最大值之间,它将跳过该行而不插入任何内容,这就是为什么 "H10-101" 没有收到其下的子部件号。


我不知道这是否有帮助,但这是我的尝试,我只是卡在 for each 语句、if 语句和循环相互交互的部分。以及通过这两项工作合并循环sheets.

Sub parentCHILD()
Dim childROW As Long
Dim parentROW As Long
Dim childPATTERN As Range
Dim oMAX  As Range
Dim oMIN  As Range
Dim parentPATTERN As Range
Dim parentPATTERN2 As Range
Dim parentWEIGHT As Range
Dim i     As Long

With Sheets("TitleHelper")
    Set childROW = Cells(Rows.Count, 1).End(xlUp).Row
    Set childPATTERN = Range("A" & childROW)
    Set oMAX = Range("B" & childROW)
    Set oMIN = Range("C" & childROW)
End With


With Sheets("MHT")
    Set parentRow = Cells(Rows.Count, 1).End(xlUp).Row
    Set parentPATTERN = Range("J" & parentROW)
    Set parentPATTERN2 = Range("K" & parentROW)
    Set parentWEIGHT = Range("H" & parentROW)

    For i = 1 To childROW
        if parentPATTERN or parentPATTERN2 = childPATTERN and parentWEIGHT <= oMAX and parentWEIGHT >= oMIN then . . .
    Next i
End With

End Sub

编辑:这是对@N8 代码的改编

Sub parentCHILD()
Dim childROWmax    As Long
Dim parentROWmax   As Long
Dim i              As Long
Dim j              As Long
Dim parentPATTERN  As Range
Dim parentPATTERN2 As Range
Dim parentWEIGHT   As Range
Dim childPATTERN   As Range
Dim oMAX           As Range
Dim oMIN           As Range
Dim childCODE      As Range
Dim parentPART     As Range
Dim newPART        As String


    childROWmax = Sheets("TitleHelper").Cells(Rows.Count, 1).End(xlUp).Row
    parentROWmax = Sheets("MHT").Cells(Rows.Count, 1).End(xlUp).Row
    MHTROWmax = Sheets("MHT Result").Cells(Rows.Count, 1).End(xlUp).Row


    For i = 2 To parentROWmax

        'Increment Result sheet row
        MHTROWmax = MHTROWmax + 1

        'get MHT row info for comparison

           Set parentPATTERN = Worksheets("MHT").Range("J" & i)
           Set parentPATTERN2 = Worksheets("MHT").Range("K" & i)
           Set parentWEIGHT = Worksheets("MHT").Range("H" & i)
           Set parentPART = Worksheets("MHT").Range("A" & i)

        'Write a row to MHT Result Table
        Sheets("MHT").Rows(i).Copy Sheets("MHT Result").Rows(MHTROWmax)

        For j = 2 To childROWmax

            'get TitleHelper row info for comparison
            Set childPATTERN = Worksheets("TitleHelper").Range("A" & j)
            Set oMAX = Worksheets("TitleHelper").Range("C" & j)
            Set oMIN = Worksheets("TitleHelper").Range("B" & j)
            Set childCODE = Worksheets("TitleHelper").Range("F" & j)
            newPART = parentPART & "*" & childCODE

            'Perform if/then
            If (parentPATTERN = childPATTERN _
                Or parentPATTERN2 = childPATTERN) _
               And parentWEIGHT <= oMAX _
               And parentWEIGHT >= oMIN Then

                'Increment Result sheet row
                MHTROWmax = MHTROWmax + 1

                'Criteria is met, write a row to MHT Result Table
                Sheets("MHT").Rows(i).Copy Sheets("MHT Result").Rows(MHTROWmax)
                Sheets("MHT Result").Cells(MHTROWmax, 1) = newPART

            End If
        Next j

    Next i
End Sub

以上是我作品的最终子集sheet

像这样。注意:这在 SQL 中要简单得多。这是建立数据库来解决的一类问题。

Sub parentCHILD()
Dim childROWmax  As Long
Dim parentROWmax As Long
Dim i            As Long
Dim j            As Long

childROWmax = Sheets("TitleHelper").Cells(Rows.Count, 1).End(xlUp).Row
parentROWmax = Sheets("MHT").Cells(Rows.Count, 1).End(xlUp).Row
MHTROWmax = Sheets("MHT Result").Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To parentROWmax
    'Increment Result sheet row
    MHTROWmax = MHTROWmax + 1
    'get MHT row info for comparison            
    'Write a row to MHT Result Table
   Sheets("MHT").Rows(i).Copy Sheets("MHT Result").Rows(MHTROWmax)

   For j = 1 To childROWmax

        'get TitleHelper row info for comparison

        'Perform if/then
        If (parentPATTERN = childPATTERN _
            or parentPATTERN2 = childPATTERN) _
           and parentWEIGHT <= oMAX _
           and parentWEIGHT >= oMIN then

          'Increment Result sheet row
          MHTROWmax = MHTROWmax + 1
          'Criteria is met, write a row to MHT Result Table
          Sheets("MHT").Rows(i).Copy Sheets("MHT Result").Rows(MHTROWmax)
          Sheets("MHT Result").Cells(MHTROWmax, 1) = concatValue
        End If
    Next j

Next i