Как я могу показать данные в конкретной ячейке? - PullRequest
1 голос
/ 23 октября 2019

Привет, я хочу показать вывод в определенную ячейку в столбце B, но я действительно не знаю, как это сделать, чтобы показать. Пример: если у «A2» есть запись, я хочу, чтобы «B2» показывал вывод. Если «A100» имеет запись, я хочу, чтобы «B100» показывал выходные данные

Sub Testing()

  Dim cell As Range
  For Each cell In Range("A2:A4")
    If cell.Value = "yes.com" Then
      Range("B2:B4").Value = "Correct"
    End If
  Next
End Sub

Приведенный выше код показывает выходные данные «Correct» от «B2» до «B4», но что я хочу, чтобы это былопоказать только конкретную ячейку. Пожалуйста, помогите

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

В данный момент вы просматриваете объект диапазона. На клеткуОдин небольшой набор данных это хорошо, но в вашей текущей попытке вам нужно изменить:

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
1 голос
/ 23 октября 2019

Просто попробуйте:

Sub test()
  Dim i As Long
  For i = 1 To Rows.Count
    If Cells(i, 1) = "yes.com" Then Cells(i, 2) = "Correct"
  Next
End Sub

Он будет проходить по всему столбцу A.

В качестве альтернативы, вы можете ввести в формулу B1:

=IF(A1="yes.com","Correct","")

иперетащите его полностью вниз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...