VBA копировать / вставить строку на другой лист, если ячейка больше ячейки в другом столбце

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

Я хочу сравнить значения в столбце K со значениями в столбце I, и если значение в столбце K больше, скопируйте эту строку и вставьте ее в Лист9, чтобы у меня был список всех экземпляров, где 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. какие-либо мысли?

5
задан rontob452
источник

2 ответов

изучить этот:

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. мы избегаем Select
  2. мы копируем / вставляем в одном операторе
  3. мы перемещаем строку назначения вниз на одну строку за раз
0
отвечен Gary's Student 2017-07-13 14:24:11
источник

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

Это довольно просто, попробуйте использовать код ниже. Убедитесь, что хотя заменить "лист1" с любым номером листа ваш источник.

 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. мы используем осмысленные имена переменных, что помогает читабельности нашего кода.
2
отвечен wizlog 2017-07-13 14:32:34
источник

Другие вопросы microsoft-excel vba