У меня есть мастер-лист со всеми моими данными. Я с уважением "украл" следующий код, чтобы скопировать все строки, содержащие определенную текстовую строку во втором столбце, на другой лист.

For Each r In Src.Range("B2:B" & LastRow)
 If r.Value = "1. Early Season Visits" Then
 If CopyRange Is Nothing Then
            Set CopyRange = r.EntireRow
    Else
            Set CopyRange = Union(CopyRange, r.EntireRow)
    End If
 End If
Next r
If Not CopyRange Is Nothing Then
CopyRange.Copy Dst.Range("A1")
End If
End Sub

Приведенное выше форматирование испортилось, но вы должны понять. Это сработало, как рекламировалось после того, как я внес коррективы в свой конкретный случай. Он даже пытался перенести правила условного форматирования - хотя мне пришлось вносить незначительные корректировки во все эти, чтобы получить его правильно, потому что Excel сделал некоторую бессмысленную ссылку.

Проблемы с вышеупомянутым:

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

Итак, есть ли лучший способ сделать то, что я хочу сделать? Если так, то, что это?

1 ответ1

0

Вы можете вставить формулы в каждую ячейку вместо значений

For Each r In Src.Range("A2:A" & LastRow)
  If r.Value <> "9999999**" Then
      Dst.Range("A" & r.row).Formula = "=Sheet6!A" & r.row
      Dst.Range("B" & r.row).Formula = "=Sheet6!B" & r.row
  ...and so on...

  End If
Next r

В ответ на ваш вопрос, я предполагаю, что вы знаете, где разместить код, и проблема в том, что он делает.

Dst.Range("A" & r.row).Formula = "=Sheet6!A" & r.row

Когда r перебирает все ячейки в столбце A Листа 6, он возьмет строку текущего r (r.row) и вставит формулу в соответствующую ячейку Листа7. Таким образом, если r является первой ячейкой в Sheet6 (A1), то в ячейке A1 Sheet7 будет вставлена следующая формула: =Sheet6!A1 и лист B1 будут иметь =Sheet6!B1 ... и так далее ...

Иногда полезно сначала попытаться вставить формулы вручную, чтобы лучше понять, какими они должны быть, прежде чем кодировать их в макрос

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