На Sheet1 у меня есть три столбца, которым нужны данные, введенные в них. Три столбца всегда будут заканчиваться в одной строке, но последняя строка будет изменяться с каждым набором данных.Диапазон копирования ячеек, содержащих только видимые данные
Лист2 принимает информацию, указанную в трех столбцах на листе1, и применяет ее к формулам, которые помещают его в определенный формат, который мне нужно скопировать и вставить в файл txt для другой программы.
Формулы на Sheet2 содержат формулы IF (ISBLANK), которые заполняют ячейки только в том случае, если на листе 1 есть данные. Если в Sheet1 не введены данные, ложный аргумент возвращает «» в ячейку.
Я хочу кнопку макроса или управления на Sheet1, которая скопирует диапазон A6: B500 на Sheet2, но только если ячейки заполнены данными из Sheet1, что делает формулы IF истинными.
Вот код того, что происходит:
Лист 1 было объяснено, и не содержит в себе ничего особенного.
Лист 2 содержит следующие начиная с A6 и каждые 5 ячеек вниз, пока он не достигнет: 496
=IF(ISBLANK(Sheet1!A2),"","host "&(INDIRECT(E6))&" {")
Эти формулы также продолжают обновлять позиции ячейки от Лист1. Начиная B7 через B10 есть аналогичные формулы для больше текста с клетки, взятые из листа 1 обновляется до столбца B не достигнет B500, и эти формулы следующим образом:
B7: =IF(ISBLANK(Sheet1!C2),"","hardware ethernet "&(INDIRECT(E7))&";")
B8: =IF(ISBLANK(Sheet1!B2),"","fixed-address "&(INDIRECT(E8))&";")
B9: =IF(ISBLANK(Sheet1!A2),"","option host-name "&""""&(INDIRECT(E9))&""";")
B10: =IF(ISBLANK(Sheet1!A2),"","}")
До сих пор мои макрос выглядит следующим образом:
Sub CommandButton1_Click()
Dim rng As Range
If Not Selection Is Nothing Then
Set rng = Sheets("Sheet2").Range("Sheet2!A6:Sheet2!B500").Cells.SpecialCells(xlCellTypeVisible)
rng.Copy
End If
End Sub
проблема у меня в том, что независимо от того, что данные введены, макро копирует все ячейки в диапазоне, и у меня есть куча пустых новых линий после моих видимых данных.
Не уверен, что я точно понимаю, что вы после. Кажется, что часть проблемы определяет последнюю заполненную строку. Правда? Если это так, вы можете использовать 'UsedRange' для этой цели, например. 'maxRow = ActiveSheet.UsedRange.Rows.Count' – David
Возможный дубликат [Диапазон копирования ячеек, содержащих только видимые данные, не включая формулы] (http://stackoverflow.com/questions/21141204/copy-range-of-cells -that-contains-only-visible-data-not-includes-formula) – pnuts