Здравствуйте уважаемые программисты!!! Столкнулся с проблемой, а именно с выборочным удалением значений ячеек, в своей электронной таблице. В excel имеется вкладка "выделение группы ячеек". Работает все это замечательно, но выделяет, как бульдозер и соответственно возникают проблемы по удалению значений в ячейках с нужным для меня форматом. Хотел перехитрить все это дело с помощью рекодера и написать собственный макрос по каждому ниже перечисленному пункту, но как говорится: "Тямы не хватает". Ребята!!! Как всегда, заранее вам спасибо!!!
1. удалить значения из ячеек только с числовыми значениями;
2. удалить значения из ячеек только с текстовыми значениями;
3. удалить значения из ячеек только с формулами;
4. удалить значения из ячеек только с датами;
5. удалить значения из ячеек только с общими;
Здравствуйте уважаемые программисты!!! Столкнулся с проблемой, а именно с выборочным удалением значений ячеек, в своей электронной таблице. В excel имеется вкладка "выделение группы ячеек". Работает все это замечательно, но выделяет, как бульдозер и соответственно возникают проблемы по удалению значений в ячейках с нужным для меня форматом. Хотел перехитрить все это дело с помощью рекодера и написать собственный макрос по каждому ниже перечисленному пункту, но как говорится: "Тямы не хватает". Ребята!!! Как всегда, заранее вам спасибо!!!
1. удалить значения из ячеек только с числовыми значениями;
2. удалить значения из ячеек только с текстовыми значениями;
3. удалить значения из ячеек только с формулами;
4. удалить значения из ячеек только с датами;
5. удалить значения из ячеек только с общими;tasdel
Сообщение отредактировал tasdel - Суббота, 22.09.2018, 09:30
Public Sub Чистилище(Optional ByVal msg As Variant) Ячейки_Очистить "Числа", ActiveSheet.UsedRange End Sub
Public Function Ячейки_Очистить(ByVal str As String, _ rng As Range) _ As Variant Dim eL As Range For Each eL In rng If str = "Числа" Then Ячейку_Число_Очистить eL ' If str = "Дата" Then Ячейку_Дата_Очистить eL Next End Function
Public Function Ячейку_Число_Очистить(eL As Range) As Variant With eL If .MergeCells = False Then _ If Left$(eL.Value, 1) <> "=" Then _ If IsNumeric(.Value) Then .ClearContents End With End Function
Public Function Ячейку_Дата_Очистить(eL As Range) As Variant With eL ' Ваш код End With End Function
[/vba]
Привет! [vba]
Код
Option Explicit
Public Sub Чистилище(Optional ByVal msg As Variant) Ячейки_Очистить "Числа", ActiveSheet.UsedRange End Sub
Public Function Ячейки_Очистить(ByVal str As String, _ rng As Range) _ As Variant Dim eL As Range For Each eL In rng If str = "Числа" Then Ячейку_Число_Очистить eL ' If str = "Дата" Then Ячейку_Дата_Очистить eL Next End Function
Public Function Ячейку_Число_Очистить(eL As Range) As Variant With eL If .MergeCells = False Then _ If Left$(eL.Value, 1) <> "=" Then _ If IsNumeric(.Value) Then .ClearContents End With End Function
Public Function Ячейку_Дата_Очистить(eL As Range) As Variant With eL ' Ваш код End With End Function
китин, я приложил файл. и хде он? и хде ваш ответ?
Даже если бы вопрос был поставлен корректно, это вовсе не означает, что ответ будет быстро и будет вообще - отвечают здесь обычно при наличии времени, желания и возможности
А по поводу вопроса есть вопросы 1. Числовые значения любые или только константы (не формулы)? Числовое значение в текстовом формате берем или нет? 2. Аналогично первой части п.1. Текстовые значения в числовом формате берем? 3. Понятно 4. Нужно ловить определенный формат дат или вообще любые даты? Если в ячейке формат даты, но в ней введено текстовое значение, то берем эту ячейку или нет? Если дату возвращает формула, то берем? 5. Если в ячейке общий формат и введено значение с апострофом (например, '01.01.2018), то это считается датой или общим форматом?
По-хорошему Вам бы нужно было в файле раскрасить (или как-то еще пометить) группы ячеек для каждого из пяти случаев
китин, я приложил файл. и хде он? и хде ваш ответ?
Даже если бы вопрос был поставлен корректно, это вовсе не означает, что ответ будет быстро и будет вообще - отвечают здесь обычно при наличии времени, желания и возможности
А по поводу вопроса есть вопросы 1. Числовые значения любые или только константы (не формулы)? Числовое значение в текстовом формате берем или нет? 2. Аналогично первой части п.1. Текстовые значения в числовом формате берем? 3. Понятно 4. Нужно ловить определенный формат дат или вообще любые даты? Если в ячейке формат даты, но в ней введено текстовое значение, то берем эту ячейку или нет? Если дату возвращает формула, то берем? 5. Если в ячейке общий формат и введено значение с апострофом (например, '01.01.2018), то это считается датой или общим форматом?
По-хорошему Вам бы нужно было в файле раскрасить (или как-то еще пометить) группы ячеек для каждого из пяти случаев_Boroda_
Sub app0() With Application: .ScreenUpdating = 0: .Calculation = 3: End With End Sub Sub app1() With Application: .ScreenUpdating = 1: .Calculation = 1: End With End Sub Sub mChisla() app0 Set d0_ = Cells(1).SpecialCells(xlCellTypeConstants, 1) For Each d_ In d0_ If IsNumeric(d_) Then d_.MergeArea.ClearContents Next d_ Application.Calculation = xlCalculationAutomatic app1 End Sub Sub mText() app0 Set d0_ = Cells(1).SpecialCells(xlCellTypeConstants, 2) For Each d_ In d0_ If d_.NumberFormat = "@" Then d_.MergeArea.ClearContents Next d_ Application.Calculation = xlCalculationAutomatic app1 End Sub Sub mForm() app0 Set d0_ = Cells(1).SpecialCells(xlCellTypeFormulas, 23) For Each d_ In d0_ If d_.NumberFormat = "General" Then 'думаю, что это не нужно If d_.HasFormula Then d_.MergeArea.ClearContents End If Next d_ Application.Calculation = xlCalculationAutomatic app1 End Sub Sub mDat() app0 Set d0_ = Cells(1).SpecialCells(xlCellTypeConstants, 1) For Each d_ In d0_ If IsDate(d_) Then d_.MergeArea.ClearContents Next d_ Application.Calculation = xlCalculationAutomatic app1 End Sub Sub mOb() app0 Set d0_ = Cells(1).SpecialCells(xlCellTypeConstants, 2) For Each d_ In d0_ If d_.NumberFormat = "General" Then d_.MergeArea.ClearContents Next d_ Application.Calculation = xlCalculationAutomatic app1 End Sub
[/vba]
Так нужно? [vba]
Код
Sub app0() With Application: .ScreenUpdating = 0: .Calculation = 3: End With End Sub Sub app1() With Application: .ScreenUpdating = 1: .Calculation = 1: End With End Sub Sub mChisla() app0 Set d0_ = Cells(1).SpecialCells(xlCellTypeConstants, 1) For Each d_ In d0_ If IsNumeric(d_) Then d_.MergeArea.ClearContents Next d_ Application.Calculation = xlCalculationAutomatic app1 End Sub Sub mText() app0 Set d0_ = Cells(1).SpecialCells(xlCellTypeConstants, 2) For Each d_ In d0_ If d_.NumberFormat = "@" Then d_.MergeArea.ClearContents Next d_ Application.Calculation = xlCalculationAutomatic app1 End Sub Sub mForm() app0 Set d0_ = Cells(1).SpecialCells(xlCellTypeFormulas, 23) For Each d_ In d0_ If d_.NumberFormat = "General" Then 'думаю, что это не нужно If d_.HasFormula Then d_.MergeArea.ClearContents End If Next d_ Application.Calculation = xlCalculationAutomatic app1 End Sub Sub mDat() app0 Set d0_ = Cells(1).SpecialCells(xlCellTypeConstants, 1) For Each d_ In d0_ If IsDate(d_) Then d_.MergeArea.ClearContents Next d_ Application.Calculation = xlCalculationAutomatic app1 End Sub Sub mOb() app0 Set d0_ = Cells(1).SpecialCells(xlCellTypeConstants, 2) For Each d_ In d0_ If d_.NumberFormat = "General" Then d_.MergeArea.ClearContents Next d_ Application.Calculation = xlCalculationAutomatic app1 End Sub
_Boroda_, Ну что я могу еще сказать: "Это просто круто!!!". В очередной раз Вам огромное спасибо!!! На самом деле эта тема действительно актуальная. Для тех, кто ведет учет с помощью массивных электронных таблиц этот макрос является настоящим - "бальзамом надушу". Мною был упущен один момент - это удаление по цвету ячейки. Можно будет сделать дополнение к основному макросу? Заранее Спасибо!!!
_Boroda_, Ну что я могу еще сказать: "Это просто круто!!!". В очередной раз Вам огромное спасибо!!! На самом деле эта тема действительно актуальная. Для тех, кто ведет учет с помощью массивных электронных таблиц этот макрос является настоящим - "бальзамом надушу". Мною был упущен один момент - это удаление по цвету ячейки. Можно будет сделать дополнение к основному макросу? Заранее Спасибо!!!tasdel