1

Новичок в VBA, и запутанный, пытаясь выяснить несколько команд одновременно.

Я хочу сравнить значения в столбце K со значениями в столбце I, и, если значение в столбце K больше, скопируйте эту строку и вставьте ее в Sheet9, чтобы у меня был список всех случаев, где K> I.

Вот что у меня есть:

    Sub compareresult()

Dim i As Integer

For i = 8 To 500
    If Cells(i, 11).Value > Cells(i, 9).Value Then
        ActiveCell.EntireRow.Select
        Selection.copy
        Sheets("Sheet9").range("A65000").End(xlUp).Offset(1, 1).PasteSpecial
    End If
Next i

End Sub

Прямо сейчас он выдаёт мне сообщение об ошибке 400, но в какой-то момент, когда я возиться, он скопирует и вставит значения друг на друга в Листе 9, чтобы он в конечном итоге отображал только последнее время K> I. Есть мысли?

2 ответа2

2

Добро пожаловать в Superuser.

Это довольно просто, попробуйте использовать код ниже. Обязательно замените "sheet1" на любой номерной лист, которым вы пользуетесь.

 Sub compareresult()

 Dim row1 As Integer
 Dim row2 As Integer

 row2 = 1
 For row1 = 8 To 500
     If sheet1.Cells(row1, 11).value > sheet1.Cells(row1, 9).value Then
         sheet1.Cells(row1, 1).EntireRow.Copy Sheets(11).Cells(row2, 1)
         row2 = row2 + 1
     End If
 Next row1

 End Sub

На что обратить внимание:

  1. Мы не используем выбор или активацию, что происходит быстрее.
  2. Мы копируем и вставляем в одно утверждение, что быстрее.
  3. Мы перемещаем строку назначения вниз по одной за раз, что делает наш код быстрее.
  4. Мы переходим к листам источника и назначения по номеру, что безопаснее.
  5. Мы используем значимые имена переменных, что помогает удобочитаемости нашего кода.
0

Изучите это:

Sub compareresult()

Dim i As Long, K As Long

K = 1
For i = 8 To 500
    If Cells(i, 11).Value > Cells(i, 9).Value Then
        Cells(i, 11).EntireRow.Copy Sheets("Sheet9").Range("A" & K)
        K = K + 1
    End If
Next i

End Sub

ЗАМЕТКИ:

  1. мы избегаем выбора
  2. мы копируем / вставляем в одном выражении
  3. мы перемещаем строку назначения вниз на одну строку за раз

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .