У меня есть три листа: "Bom", "MPS" и "DData". То, что я пытаюсь сделать, - это сначала прочитать значение ячейки A2 из "MPS" и извлечь все строки из "bom", которые в столбце A имеют это значение, и перечислить их в "DData".
В то же время мне нужно, чтобы значения в столбцах C и D из "MPS" извлекались в соответствующие строки. Таким образом, если значение в ячейке A2 "MPS" соответствует 4 строкам в "bom", значения из ячеек C2 и D2 следует поместить после этих 4 строк. Это не работает должным образом в данный момент.
Как только этот цикл завершен, он должен перейти к значению ячейки A3 в "MPS" и так далее ... Код ниже несколько работает. Я попытался добавить второй цикл for и все остальное, что пришло в голову, но безуспешно. Самая большая проблема в том, что если MPS!A2
имеет значение 1, A3
= 2, а A4
снова равно 1, во второй раз значения "bom" не отображаются.
Код основан на этом изначально: https://stackoverflow.com/a/26912176
Public Sub CommandButton1_Click()
Dim countRows1 As Long, countRows2 As Long
countRows1 = 2 'the first row of your dataset in sheet1
endRows1 = 50 'the last row of your dataset in sheet1
countRows2 = 2 'the first row where you want to start writing the found rows
For j = countRows1 To endRows1
Dim keyword As String: keyword = Sheets("MPS").Cells("A2, A100").Value
If Sheets("bom").Range("A2, A100").Value = keyword Then
Sheets("DData").Rows(countRows2).Value = Sheets("bom").Rows(j).Value
Sheets("DData").Rows(countRows2).Cells(6).Value = Sheets("MPS").Rows(countRows2).Cells(3).Value
Sheets("DData").Rows(countRows2).Cells(7).Value = Sheets("MPS").Rows(countRows2).Cells(4).Value
countRows2 = countRows2 + 1
End If
Next j
End Sub
Мое мнение говорит, что это определенно нуждается в двух циклах, но я просто не мог заставить это работать.
Я не могу публиковать изображения, но постараюсь проиллюстрировать, что нужно и что будет лучше, ниже.
Листовая структура и данные (диапазон А1: Е7):
id desc id_part desc_part qty
30010 build1 10200 part1 1
30010 build1 23002 part2 3
30010 build1 21003 part3 500
30010 build1 21503 part4 400
20010 build2 10210 part5 100
20010 build2 10001 part6 5
Структура и данные листа "MPS" (диапазон A1:D4):
id desc week batches
30010 build1 1 2
20010 build2 2 4
30010 build1 2 0
Структура листа "DData" (диапазон A1:H3) и то, что возвращается с вашим кодом panhandel:
id desc id_part desc_part qty week batches total(=qty*batches)
30010 1 2
30010 2 0
И моя цель заключается в следующем:
id desc id_part desc_part qty week batches total (=qty*batches)
30010 build1 10200 part1 1 1 2
30010 build1 23002 part2 3 1 2
30010 build1 21003 part3 500 1 2
30010 build1 21503 part4 400 1 2
20010 build2 10210 part5 100 2 4
20010 build2 10001 part6 5 2 4
30010 build1 10200 part1 1 2 0
30010 build1 23002 part2 3 2 0
30010 build1 21003 part3 500 2 0
30010 build1 21503 part4 400 2 0
... также где H2, например, будет иметь значение E2 * G2.
*** я пытался изменить
Sheets("DData").Range("A" & countRows2).Value = Sheets("bom").Range("A" & lCount).Value
в
Sheets("DData").Rows(countRows2).Value = Sheets("bom").Rows(lCount).Value
например, но Excel начал сильно рушиться. Разумнее ли использовать Range вместо Rows?