У меня есть два листа:
MHT содержит информацию о продукте, например: MHT Sheet
и TitleHelper содержит информацию о вариантах, такую как: Лист TitleHelper
, и вот то, что ожидаемый результат должен быть на листе MHT: Результат MHT
Таким образом, чтобы получить ожидаемый результат, мы должны сравнить конкретные ячейки из каждой строки MHT с TitleHelper
Итак, сначала нам нужно сопоставить Pattern1 OR Pattern2 (Col J или Col K) MHT с TitleHelpersPattern (Col A).Таким образом, первый элемент (D123456) имеет ДВУХ совпадений для шаблона.
Другой критерий соответствия состоит в том, что вес на MHT (Col H) должен быть меньше или равен максимальному весу и больше или равенМинимальный вес соответствующего шаблона на TitleHelper (Col B & C)
Если эти критерии соблюдены: для каждого соответствия мне нужно вставить строку ниже исходного элемента в MHT и добавить звездочку с дочерним кодомматча в конце номера.Так как у D123456 было два матча, и вес был правильным.он добавляет две строки под ним.Первая вставленная строка, имеющая номер детали "D123456 * M" для первого совпадения, и вторая вставленная строка, имеющая номер детали "D123456 * XL"
Если шаблон соответствует, но вес не находится междуминимум и максимум он просто пропустит строку и ничего не вставит, поэтому «H10-101» не получил под ней номер детали для ребенка.
Не знаю, полезно ли это, ноВот моя попытка, и я просто застрял в той части, где оператор for для каждого оператора if и цикл взаимодействуют друг с другом.а также включение циклического перебора по обоим рабочим листам.
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
Выше приведен последний подпункт для моего рабочего листа