В данный момент вы просматриваете объект диапазона. На клеткуОдин небольшой набор данных это хорошо, но в вашей текущей попытке вам нужно изменить:
Range("B2:B4").Value = "Correct"
для cell.Offset(0,1).value = "Correct"
Согласно моему комментарию, вы можете сделать это немного умнее/Быстрее. Цикл по ячейкам таблицы медленен, конечно, для больших наборов данных (1000 строк - это не так уж много, если честно). Тем не менее, полезно знать, что хорошей практикой является использование массивов. Позвольте мне показать вам следующее:
Sub Testing()
Dim lr As Long, x As Long
Dim arr As Variant
With Sheet1 'Change accordingly
lr = .Cells(.Rows.Count, 1).End(xlUp).Row
arr = .Range("A2:B" & lr)
For x = LBound(arr) To UBound(arr)
If arr(x, 1) = "yes.com" Then
arr(x, 2) = "correct"
End If
Next x
.Range("A2:B" & lr).Value = arr
End With
End Sub
Итак, вы можете увидеть несколько полезных вещей:
- Ссылка на лист (через
CodeName
для обозначенияродительский диапазон. Без него макрос будет просто ссылаться на ActiveSheet
, который по понятным причинам не всегда является правильным. - Я использовал массив динамического размера. Переменная
lr
получитпоследняя использованная строка в столбце A, поэтому вам больше не нужно работать с полными квалифицированными ссылками. - Переменная
arr
- это массив, который переносит значения из указанного диапазона в память. данные в памяти намного быстрее, чем цикл / итерация по ячейкам таблицы. Это станет намного заметнее, если вы будете иметь еще большие наборы данных. - Я записал массив обратно в диапазон за один раз вместо нескольких записей.
Надеюсь, это помогло =)
Как уже упоминалось, 1000 строк по-прежнему не так много. Несмотря на то, что я предлагаю вам придерживаться подхода Array
, вы также можете Evaluate
столбец A и заполнить столбец B соответствующим образом за один раз вместо того, чтобы проходить через объект диапазона. Это замаскированная формула массива, поэтому она не очень быстра для реальных больших наборов данных.
Sub Testing()
Dim lr As Long
Dim rng As Range
With Sheet1 'Change accordingly
lr = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rng = .Range("A2:B" & lr)
rng.Columns(2).Value = .Evaluate("IF(" & rng.Columns(1).Address & "=""yes.com"",""correct"","""")")
End With
End Sub