Подскажите пожалуйста в чём ошибка? Намудрил я похоже Условия - есть заполненная таблица, Задача - определить ту её облать которая заполнена данными и очистить её. Присвоил имя диапазону (из одной ячейки) test2. По моей логике, диапазон должен быть выделен от этой ячейки до (столбец = столбец test2 +1, строка = последняя заполненная в столбце test2)
Прошу прощения за несвоевременность, но внесу небольшие уточнения, очистить нужно только содержимое таблицы не трогая ничего остального, в таблице может быть заполнение весьма произвольное - все строчки, половина пустые, вообще одна в середине или в конце..
SuperCat, появились недостатки вашего метода , даже два
1. если первые две ячейки в проверяемом столбце не заполнены, то очистка вообще не производится. 2. если и заполнена хотя бы первая ячейка, то при наличии пустых строк между данными в таблице макрос очищает всё до пустой строки.
Сливочный написал: очистить нужно только содержимое таблицы не трогая ничего остального, в таблице может быть заполнение весьма произвольное - все строчки, половина пустые, вообще одна в середине или в конце
Приведите все описанные варианты заполнения таблиц на разных листах одной книги.
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
не знаю на сколько смог донести информацию, но, всё это должно работать в связке с именованной ячейкой test2, т.к. если прописать макрос на очистку со ссылкой на конкретные ячейки, то при добавлении/удалении строк/столбцов очистка будет уже не того что нужно
JayBhagavan, файл почему-то сразу не приложился, сейчас есть в посте № 8, смотрите. А на счёт именованного диапазона - называется test2 и это всего лишь одна ячейка.
Вообще я думал каким-то образом данный код поможет Cells(Rows.cont, test2.Row).End(xlUp).Row + offset, но у меня не получилось корректно применить их
JayBhagavan, да, но в пределах таблицы, стандартные методы хороши например
Код
Sub macro_mass1() ' очищает указанный диапазон 1 способ (любое смещение таблицы допускать нельзя)
ThisWorkbook.Sheets("data").Range("J6:K21").ClearContents
End Sub
или
Код
Sub macro_mass2() ' очищает указанный диапазон 2 способ (любое смещение таблицы допускать нельзя)
ThisWorkbook.Sheets("data").Range(Cells(6, 10), Cells(21, 11)).ClearContents
End Sub
или этот более приближенный к нужному результату
Код
Sub macro_mass3() ' очищает указанный диапазон 3 способ (любое смещение таблицы допускать нельзя)
Range("J6:K" & Cells(Rows.Count, 10).End(xlUp).Row).ClearContents
End Sub
но они привязаны к конкретным ячейкам, и получается что смещать таблицу в книге уже нельзя, а если мне нужно добавить столбцы или строки левее или выше таблицы?
Sub macro_mass4() ' очищает указанный диапазон 4 способ (допускается смещение таблицы)
Dim test2 As Range
Range("test2").CurrentRegion.Offset(1).ClearContents
End Sub
но он не срабатывает по причинам каким я описал выше
Цитата
Сливочный написал: 1. если первые две ячейки в проверяемом столбце не заполнены, то очистка вообще не производится. 2. если и заполнена хотя бы первая ячейка, то при наличии пустых строк между данными в таблице макрос очищает всё до пустой строки.
Путём не хитрых совмещений методов решение нашлось! Ура товарищи))
Код
Sub macro_mass3_2() ' очищает указанный диапазон 3 способ (любое смещение таблицы допускать нельзя)
Dim a As Integer, b As Integer, c As Integer
a = Range("test2").Column
b = Range("test2").Row
c = Cells(Rows.Count, a).End(xlUp).Row
Range(Cells(b, a), Cells(c, a + 1)).ClearContents
End Sub
SuperCat, если люди заняты не сидеть же мне на месте ровно проблема сама собой не решится.
и сразу нашлась другая проблема.. (немного конкретизировал макрос) если выполнять макрос на листе где эта таблица, то всё нормально, если выполнять на другом листе, отличном от того где таблица, почему-то выдаёт ошибку.. в чём может быть проблема и как её решить?
Код
Sub macro_mass3_2() ' очищает указанный диапазон 3_2 способ (допускается смещение таблицы)
Dim a As Integer, b As Integer, c As Integer
a = ThisWorkbook.Sheets("data").Range("test2").Column
b = ThisWorkbook.Sheets("data").Range("test2").Row
c = ThisWorkbook.Sheets("data").Cells(Rows.Count, a).End(xlUp).Row
ThisWorkbook.Sheets("data").Range(Cells(b, a), Cells(c, a + 1)).ClearContents
End Sub
Sub macro_mass3_2()
Dim a As Integer, b As Integer, c As Integer
With ThisWorkbook.Sheets("data")
a = .Range("test2").Column
b = .Range("test2").Row
c = .Cells(.Rows.Count, a).End(xlUp).Row
.Range(.Cells(b, a), .Cells(c, a + 1)).ClearContents
End With
End Sub
Юрий М, при запуске макроса на другом листе, почему-то выскакивала ошибка, а вот так всё работает, единственное что не нравится - то что операцию пришлось два раза прописать из-за условия if else, мелочь а не знаю как обойти, GoTo не хочу внедрять
Код
Sub report_clearcontent1() ' очищает указанный диапазон 3_2 способ (допускается смещение таблицы)
Dim a As Integer, b As Integer, c As Integer
Dim z As String
If ThisWorkbook.ActiveSheet.Name = "data" Then
a = ThisWorkbook.Sheets("data").Range("test2").Column
b = ThisWorkbook.Sheets("data").Range("test2").Row
c = ThisWorkbook.Sheets("data").Cells(Rows.Count, a).End(xlUp).Row
ThisWorkbook.Sheets("data").Range(Cells(b, a), Cells(c, a + 1)).ClearContents
Else
Application.ScreenUpdating = False
z = ThisWorkbook.ActiveSheet.Name
Sheets("data").Activate
a = ThisWorkbook.Sheets("data").Range("test2").Column
b = ThisWorkbook.Sheets("data").Range("test2").Row
c = ThisWorkbook.Sheets("data").Cells(Rows.Count, a).End(xlUp).Row
ThisWorkbook.Sheets("data").Range(Cells(b, a), Cells(c, a + 1)).ClearContents
Sheets(z).Activate
Application.ScreenUpdating = True
End If
End Sub
Проблемы из-за отсутствия привязки диапазонов к соотв. листу:
Код
with ThisWorkbook.Sheets("data")
a = .Range("test2").Column
b = .Range("test2").Row
c = .Cells(.Rows.Count, a).End(xlUp).Row
.Range(.Cells(b, a), .Cells(c, a + 1)).ClearContents
end with