Как найти значение в столбце и вставить диапазоны из других листов в соседние столбцы

Придется изменить модель для работы с пакетными вызовами, как @ rhaertel80 добавил в свой комментарий.

2
задан Pᴇʜ 21 January 2019 в 07:47
поделиться

2 ответа

For x = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row
    If InStr(1, Cells(x, 1), UserValue) > 0 Then
        ws1.Cells(x, 2) = ws2.Cells(23, 6).Value
        ws1.Cells(x, 3) = ws2.Cells(23, 7).Value
        ws1.Cells(x, 4) = ws2.Cells(23, 8).Value

        ws1.Cells(x, 6) = ws3.Cells(90, 6).Value
        ws1.Cells(x, 7) = ws3.Cells(90, 7).Value
        ws1.Cells(x, 8) = ws3.Cells(90, 8).Value

        ws1.Cells(x, 10) = ws4.Cells(18, 6).Value
        ws1.Cells(x, 11) = ws4.Cells(18, 7).Value
        ws1.Cells(x, 12) = ws4.Cells(18, 8).Value
    Else:
    End If
Next x

Выше я работаю вместо цикла while.

0
ответ дан Valkeif 21 January 2019 в 07:47
поделиться

Два совета при работе с Excel:

  1. всегда задайте переменные для каждого листа / книги, с которыми вам нужно работать
  2. Избегайте использования диапазонов и объекты, если вы можете. Намного проще выполнять итерации по отдельным ячейкам, используя массив и цикл for, как я делал ниже.

Я был немного смущен тем, что именно нужно сделать, поэтому вам нужно будет немного изменить это, чтобы он соответствовал вашим диапазонам / туда, куда вы хотите, чтобы данные шли. Если вы не уверены или вам нужна дополнительная помощь, дайте мне знать, и я обновлю это.

Dim userValue
Dim xrow As Long, ws1 As Worksheet, ws2 As Worksheet, ws3 as Worksheet, ws4 as Worksheet
Dim arrData() as variant

set ws1 = Worksheets("Report")
set ws2 = Worksheets("Sheet2")
set ws3 = Worksheets("Sheet3")
set ws4 = Worksheets("Sheet4")

userValue = ComboBox1.Value
xrow = 1

ws2.activate
'the InStr function checks if the first condition contains the second, and when it does, it returns 1, which in turn triggers the if statement
for x = 1 To ws2.Cells(rows.count, 1).end(xlup).row
    if InStr(1, Cells(x, 1), userValue) > 0 Then
        arrData(0) = ws2.Cells(x, 2).value
        arrData(1) = ws2.Cells(x, 3).value
        arrData(2) = ws2.Cells(x, 4).value
    else:
    end if
next x

ws3.activate
for x = 1 To ws3.Cells(rows.count, 1).end(xlup).row
    if InStr(1, Cells(x, 1), userValue) > 0 Then
        arrData(3) = ws3.Cells(x, 2).value
        arrData(4) = ws3.Cells(x, 3).value
        arrData(5) = ws3.Cells(x, 4).value
    else:
    end if
next x

ws4.activate
for x = 1 To ws4.Cells(rows.count, 1).end(xlup).row
    if InStr(1, Cells(x, 1), userValue) > 0 Then
        arrData(6) = ws4.Cells(x, 2).value
        arrData(7) = ws4.Cells(x, 3).value
        arrData(8) = ws4.Cells(x, 4).value
    else:
    end if
next x

ws1.activate
ws1.Cells(xrow, 1) = userValue
for y = 0 To 8
    ws1.Cells(xrow, y+1).value = arrData(y)
next y
xrow = xrow + 1
0
ответ дан Jane 21 January 2019 в 07:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: