Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос на удаление пустых строк с определенным условием - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос на удаление пустых строк с определенным условием (Макросы/Sub)
Макрос на удаление пустых строк с определенным условием
Ruslan454 Дата: Пятница, 07.02.2020, 14:26 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Всем привет. Имею такой вот код, всё работает но не совсем как нужно. Не понимаю почему проверка не идет в указанном диапазоне ("C1:E70"), а проверяет с "А1". То есть, хочу
чтоб столбики A, B не учитывались. Поможете?

[vba]
Код
Sub Udalenie_pust_strok()
  Dim i As Long
  Dim diapaz1 As Range
  Dim diapaz2 As Range
Set diapaz1 = Application.Range(ActiveSheet.Range("C1:E70"), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
For i = 1 To diapaz1.Rows.Count
If WorksheetFunction.CountA(diapaz1.Rows(i).EntireRow) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Rows(i).EntireRow
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Rows(i).EntireRow)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox "Нет пустых строк."
Else
diapaz2.[Delete]
End If
End Sub
[/vba]
 
Ответить
СообщениеВсем привет. Имею такой вот код, всё работает но не совсем как нужно. Не понимаю почему проверка не идет в указанном диапазоне ("C1:E70"), а проверяет с "А1". То есть, хочу
чтоб столбики A, B не учитывались. Поможете?

[vba]
Код
Sub Udalenie_pust_strok()
  Dim i As Long
  Dim diapaz1 As Range
  Dim diapaz2 As Range
Set diapaz1 = Application.Range(ActiveSheet.Range("C1:E70"), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
For i = 1 To diapaz1.Rows.Count
If WorksheetFunction.CountA(diapaz1.Rows(i).EntireRow) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Rows(i).EntireRow
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Rows(i).EntireRow)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox "Нет пустых строк."
Else
diapaz2.[Delete]
End If
End Sub
[/vba]

Автор - Ruslan454
Дата добавления - 07.02.2020 в 14:26
Ruslan454 Дата: Пятница, 07.02.2020, 14:57 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Меняешь на "C1" тоже реакции никакой, как удалял пустые строки учитывая столбец A, так и удаляет.


Сообщение отредактировал Ruslan454 - Пятница, 07.02.2020, 15:02
 
Ответить
СообщениеМеняешь на "C1" тоже реакции никакой, как удалял пустые строки учитывая столбец A, так и удаляет.

Автор - Ruslan454
Дата добавления - 07.02.2020 в 14:57
Kuzmich Дата: Пятница, 07.02.2020, 15:04 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
[vba]
Код
Set diapaz1 = Application.Range(ActiveSheet.Range("C1:E70"), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
[/vba]
Чему равна LastCell?
 
Ответить
Сообщение[vba]
Код
Set diapaz1 = Application.Range(ActiveSheet.Range("C1:E70"), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
[/vba]
Чему равна LastCell?

Автор - Kuzmich
Дата добавления - 07.02.2020 в 15:04
Ruslan454 Дата: Пятница, 07.02.2020, 15:06 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Kuzmich, ну вообще то E70. Хотя признаюсь писал код не сам. Поэтому хз как должно быть
Идея такая - в указанном диапазоне или начиная с С1 проверить строки не проверяя столбцы А и B, если строка пустая, удалить всю строку.


Сообщение отредактировал Ruslan454 - Пятница, 07.02.2020, 15:09
 
Ответить
СообщениеKuzmich, ну вообще то E70. Хотя признаюсь писал код не сам. Поэтому хз как должно быть
Идея такая - в указанном диапазоне или начиная с С1 проверить строки не проверяя столбцы А и B, если строка пустая, удалить всю строку.

Автор - Ruslan454
Дата добавления - 07.02.2020 в 15:06
Kuzmich Дата: Пятница, 07.02.2020, 15:09 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Попробуйте выделить диапазон diapaz1 и посмотреть его границы
 
Ответить
СообщениеПопробуйте выделить диапазон diapaz1 и посмотреть его границы

Автор - Kuzmich
Дата добавления - 07.02.2020 в 15:09
Ruslan454 Дата: Пятница, 07.02.2020, 15:34 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Kuzmich,
xlCellTypeLastCell=11
diapaz1.Rows.Count=7

Больше ничего не показывает
 
Ответить
СообщениеKuzmich,
xlCellTypeLastCell=11
diapaz1.Rows.Count=7

Больше ничего не показывает

Автор - Ruslan454
Дата добавления - 07.02.2020 в 15:34
Kuzmich Дата: Пятница, 07.02.2020, 15:41 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Вы лучше приведите пример и опишите, что надо делать
 
Ответить
СообщениеВы лучше приведите пример и опишите, что надо делать

Автор - Kuzmich
Дата добавления - 07.02.2020 в 15:41
Ruslan454 Дата: Пятница, 07.02.2020, 15:56 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Kuzmich, Вот собрал таблицу, оригинал бросить не могу, слишком большой и много не нужной инфы.
По идее макрос должен удалить все желтые строки, потому что там по столбикам C D E нет инфы. Желтым закрасил только для наглядности
К сообщению приложен файл: 1535856.xlsm (17.6 Kb)


Сообщение отредактировал Ruslan454 - Пятница, 07.02.2020, 15:58
 
Ответить
СообщениеKuzmich, Вот собрал таблицу, оригинал бросить не могу, слишком большой и много не нужной инфы.
По идее макрос должен удалить все желтые строки, потому что там по столбикам C D E нет инфы. Желтым закрасил только для наглядности

Автор - Ruslan454
Дата добавления - 07.02.2020 в 15:56
boa Дата: Пятница, 07.02.2020, 16:19 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
[vba]
Код
If WorksheetFunction.CountA(diapaz1.Rows(i)) = 0 Then
[/vba]

EntireRow - это вся строка от 1-й до последней колонки листа




Сообщение отредактировал boa - Пятница, 07.02.2020, 16:23
 
Ответить
Сообщение[vba]
Код
If WorksheetFunction.CountA(diapaz1.Rows(i)) = 0 Then
[/vba]

EntireRow - это вся строка от 1-й до последней колонки листа

Автор - boa
Дата добавления - 07.02.2020 в 16:19
Ruslan454 Дата: Пятница, 07.02.2020, 16:21 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
ммммм.. Это прикол какой то? Код видит что пустых строк всего 11 начиная с ячейки С1, а так же определяет что всего 15 строк.
Но почему не работает?
 
Ответить
Сообщениеммммм.. Это прикол какой то? Код видит что пустых строк всего 11 начиная с ячейки С1, а так же определяет что всего 15 строк.
Но почему не работает?

Автор - Ruslan454
Дата добавления - 07.02.2020 в 16:21
Ruslan454 Дата: Пятница, 07.02.2020, 16:23 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
boa, ААААААА..... как ты это нашел?))) Спасибо
 
Ответить
Сообщениеboa, ААААААА..... как ты это нашел?))) Спасибо

Автор - Ruslan454
Дата добавления - 07.02.2020 в 16:23
boa Дата: Пятница, 07.02.2020, 16:24 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
как ты это нашел?
глазками :)


 
Ответить
Сообщение
как ты это нашел?
глазками :)

Автор - boa
Дата добавления - 07.02.2020 в 16:24
Kuzmich Дата: Пятница, 07.02.2020, 16:50 | Сообщение № 13
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
удалить все желтые строки, потому что там по столбикам C D E нет инфы

[vba]
Код
Sub DelRow()
Dim i As Long
Dim iLastRow As Long
    iLastRow = Cells(Rows.Count, "B").End(xlUp).Row
  For i = iLastRow To 2 Step -1
   If WorksheetFunction.CountA(Range("C" & i & ":E" & i)) = 0 Then
     Rows(i).Delete
   End If
   Next
End Sub
[/vba]
 
Ответить
Сообщение
Цитата
удалить все желтые строки, потому что там по столбикам C D E нет инфы

[vba]
Код
Sub DelRow()
Dim i As Long
Dim iLastRow As Long
    iLastRow = Cells(Rows.Count, "B").End(xlUp).Row
  For i = iLastRow To 2 Step -1
   If WorksheetFunction.CountA(Range("C" & i & ":E" & i)) = 0 Then
     Rows(i).Delete
   End If
   Next
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 07.02.2020 в 16:50
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос на удаление пустых строк с определенным условием (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!