#excel #vba
Вопрос:
У меня возникли проблемы с решением этой конкретной проблемы . В настоящее время я пытаюсь автоматизировать функцию, в которой макрос автоматически обновлял бы значение из столбца C в столбец D
Например, если в отфильтрованных ячейках C2 и C4 есть значение, я хотел бы вставить его в ячейки D2 и D4 и пропустить D3
Я надеюсь , что мое объяснение имеет смысл, так как это образец, который я могу придумать для объяснения в более широком масштабе
Комментарии:
1. Зачем вам нужен макрос — разве формулы «ЕСЛИ» недостаточно?
2. Вы говорите об этих двух клетках или обо всех видимых клетках двух вовлеченных клеток? Если последнее предположение, используя VBA, вы должны использовать
SpecialCells((xlCellTypeVisible))
и должны понимать, что такой диапазон состоит из областей . Таким образом, вы должны выполнить итерацию между каждым элементом области и скопировать его в соответствующую ячейку столбца.3. Это основное объяснение проблемы в моем основном проекте ,в основном проекте столбец D будет заполнен из столбца B и столбца C вместе как класс 1 ,2 и 3. Дело в том, что столбец B имеет значение в строке 1 и строке 3, в то время как столбец 3 имеет значение в строке 2 и строке 4
4. Итак, вам не нужно/не нужно копировать из диапазона видимых ячеек ? Если нет, то на основании чего делать VBA, зная, что вы хотите копировать из B (строки 1 и 3) и из C (строки 2 и 4)?
5. Невозможно скопировать некондиционные диапазоны в другие некондиционные диапазоны. Вам нужно скопировать каждую область одну за другой.
Ответ №1:
Для копирования отфильтрованных ячеек столбца «C:C» (начиная со второй строки) в соответствующие строки столбца «D:D»:
Sub copyVisCells()
Dim sh As Worksheet, lastR As Long, rngVS As Range, Ar As Range
Set sh = ActiveSheet
lastR = sh.Range("C" amp; sh.rows.count).End(xlUp).row
Set rngVS = sh.Range("C2:C" amp; lastR).SpecialCells(xlCellTypeVisible) 'here it needs error checking in case of no visible cells...
For Each Ar In rngVS.Areas
Ar.Copy Ar.Offset(0, 1)
Next Ar
End Sub
Если вы можете определить правило, основанное на том, какие значения копировать из B:B, скажем, строку перед видимыми ячейками в D:D, код можно адаптировать для этого, но вы должны объяснить, на основе какого правила это делать…
Комментарии:
1. Привет , спасибо! Из этого примера я понимаю , что нужно изменить, и код прекрасно работает, как только я применяю проверку ошибок