Всем привет!
-Друзья прошу помочь разобраться с созданием пользовательской функции, которая поможет мне определить какая строка таблицы скрыта;
-В Файле-примере сильно упрощенная ситуация, мне нужно определять какая строка скрыта в таблице около 1000 строк, строки которой будут скрываться в зависимости от различных настроек фильтров;
-Для решения этой задачи хочу сделать пользовательскую функцию, которая позволит определять для каждой конкретной строки скрыта они или нет, что затем использовать в операторе СУММЕСЛИМН, как второе условия при суммирование;
-Но код не работает, как должен, из-за того, что не понимаю синтаксис VBA, вот код:
Код |
---|
Function определятель(ByVal rCell As Range) As String If Rows(rCell).Height = False Then определятель = 1 Else определятель = 2 End If End Function |
-Так же хотел идти, через Hidden, но возникли сложности с пониманием работы оператора;
Как скрыть или отобразить строки и столбцы с помощью свойства Range.Hidden из кода VBA Excel? Примеры скрытия и отображения строк и столбцов.
Range.Hidden — это свойство, которое задает или возвращает логическое значение, указывающее на то, скрыты строки (столбцы) или нет.
Синтаксис
Expression — выражение (переменная), возвращающее объект Range.
- True — диапазон строк или столбцов скрыт;
- False — диапазон строк или столбцов не скрыт.
Примечание
Указанный диапазон (Expression) должен охватывать весь столбец или строку. Это условие распространяется и на группы столбцов и строк.
Свойство Range.Hidden предназначено для чтения и записи.
Примеры кода с Range.Hidden
Пример 1
Варианты скрытия и отображения третьей, пятой и седьмой строк с помощью свойства Range.Hidden:
Sub Primer1() ‘Скрытие 3 строки Rows(3).Hidden = True ‘Скрытие 5 строки Range(«D5»).EntireRow.Hidden = True ‘Скрытие 7 строки Cells(7, 250).EntireRow.Hidden = True MsgBox «3, 5 и 7 строки скрыты» ‘Отображение 3 строки Range(«L3»).EntireRow.Hidden = False ‘Скрытие 5 строки Cells(5, 250).EntireRow.Hidden = False ‘Скрытие 7 строки Rows(7).Hidden = False MsgBox «3, 5 и 7 строки отображены» End Sub |
Пример 2
Варианты скрытия и отображения третьего, пятого и седьмого столбцов из кода VBA Excel:
Sub Primer2() ‘Скрытие 3 столбца Columns(3).Hidden = True ‘Скрытие 5 столбца Range(«E2»).EntireColumn.Hidden = True ‘Скрытие 7 столбца Cells(25, 7).EntireColumn.Hidden = True MsgBox «3, 5 и 7 столбцы скрыты» ‘Отображение 3 столбца Range(«C10»).EntireColumn.Hidden = False ‘Отображение 5 столбца Cells(125, 5).EntireColumn.Hidden = False ‘Отображение 7 столбца Columns(«G»).Hidden = False MsgBox «3, 5 и 7 столбцы отображены» End Sub |
Пример 3
Варианты скрытия и отображения сразу нескольких строк с помощью свойства Range.Hidden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub Primer3() ‘Скрытие одновременно 2, 3 и 4 строк Rows(«2:4»).Hidden = True MsgBox «2, 3 и 4 строки скрыты» ‘Скрытие одновременно 6, 7 и 8 строк Range(«C6:D8»).EntireRow.Hidden = True MsgBox «6, 7 и 8 строки скрыты» ‘Отображение 2, 3 и 4 строк Range(«D2:F4»).EntireRow.Hidden = False MsgBox «2, 3 и 4 строки отображены» ‘Отображение 6, 7 и 8 строк Rows(«6:8»).Hidden = False MsgBox «6, 7 и 8 строки отображены» End Sub |
Пример 4
Варианты скрытия и отображения сразу нескольких столбцов из кода VBA Excel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub Primer4() ‘Скрытие одновременно 2, 3 и 4 столбцов Columns(«B:D»).Hidden = True MsgBox «2, 3 и 4 столбцы скрыты» ‘Скрытие одновременно 6, 7 и 8 столбцов Range(«F3:H40»).EntireColumn.Hidden = True MsgBox «6, 7 и 8 столбцы скрыты» ‘Отображение 2, 3 и 4 столбцов Range(«B6:D6»).EntireColumn.Hidden = False MsgBox «2, 3 и 4 столбцы отображены» ‘Отображение 6, 7 и 8 столбцов Columns(«F:H»).Hidden = False MsgBox «6, 7 и 8 столбцы отображены» End Sub |
Доброго дня.
для перебора всех не пустых ячеек я использую цикл Do While loop
например:
Visual Basic | ||
|
Данный цикл игнорирует ячейки скрытые автофильтром, то есть обрабатываются все ячейки как есть.
Как определить, что ячейка скрыта автофильтром и ее не нужно обрабатывать? То есть нужно обработать только видимые ячеки…
Буду признателен за пример: либо поменять сам цикл (чтобы по умолчанию обрабатывал только видимые ячейки), либо внутри цикла сделать определение, что ячейка скрыта.
Данные исходные коды VBA-макросов умеют быстро находить все скрытые строки и столбцы на листе Excel. Также они выводят всю информацию о скрытых строках и столбцах. Номера строк отображаются числами, а номера столбцов преобразуются в буквы заголовков, что очень удобно.
Как найти все скрытые строки на листе Excel с помощью макроса
У нас иметься таблица с данными по заказам, но некоторые строки листа скрыты:
Необходимо узнать сколько и какие строки скрытии от визуального анализа таблицы заказов. По умолчанию Excel не располагает таким инструментом, который смог бы решить данную задачу в пару кликов мышкой. Вручную выполнить задачу можно, но сложно. Особенно если после отображения скрытых строк нам нужно снова их скрывать. Кроме того, лист может быть защищен от изменений паролем. Оптимальным решением данной задачи будет написание собственного макроса для отображения информации о скрытых строках.
Чтобы написать свой макрос откройте редактор кода макроса: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:
В редакторе вставьте новый модуль выбрав инструмент «Insert»-«Module» и введите в него этот код:
Sub HiddenLinesInfo()
Dim i As Long
Dim text As String
Dim pervoj As String
text = "В данном листе скрыты следующие строки: "
For i = 1 To ActiveSheet.Rows.Count
If ActiveSheet.Rows(i).Hidden = True Then
If pervoj = "" Then
pervoj = i
End If
Else
If pervoj <> "" Then
text = text & vbNewLine & pervoj & ":" & i - 1
pervoj = ""
Else
If i > ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row Then
Exit For
End If
End If
End If
Next
MsgBox text
End Sub
Теперь если в таблице заказов необходимо получить информацию о скрытых строках, тогда выберите инструмент для запуска макроса: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«HiddenLinesInfo»-«Выполнить».
В результате после запуска макроса отобразиться сообщение с информацией о всех скрытых строках таблицы заказов.
Описание исходного VBA-кода для поиска скрытых строк
В начале данного кода объявляются сразу 3 переменные:
- i – счетчик циклов.
- text – содержит текст для текущего сообщения информации о скрытых строках.
- pervoj – номер первой скрытой строки в группе скрытых строк.
В начале тела кода макроса для переменной text присваиваем начало текста сообщения. После выполняется цикл, в котором проверяться по очереди все строки в пределах используемого диапазона листа. И определяется какие из них скрытые. Если текущая строка является скрытой, значит запускается проверка значения переменной pervoj. Если в переменную еще не было присвоено ни одно значение, тогда для нее присваивается номер первой скрытой строки в отдельной группе скрытых строк. Дальше проверяется и выполняется следующее условие. Если проверяемая строка не является скрытой и переменная pervoj уже содержит в своем значении номер первой скрытой сроки, тогда выполняется целый ряд следующих операций:
- К тексту в переменной text дописывается (с новой строки) номер первой скрытой строки из текущей группы скрытых строк.
- К тексту в переменной text дописывается двоеточие и номер последней строки из текущей группы строк. Данное значение взято из счетчика цикла текущее числовое значение в переменной i-1.
- Удаляется значение из переменной pervoj. Таким образом создается возможность для запуска этих же операций для следующей группы скрытых строк.
В конце кода макроса выполняются инструкции для последнего условия. Если проверяемая текущая строка не является скрытой и находиться ниже последней ячейки используемого диапазона листа, тогда выполняется выход из цикла проверки строк на скрытость.
Примечание. Последняя ячейка используемого диапазона листа – это последняя ячейка, которая имеет любое изменение: новое значение, новый формат отображения значений, измененный цвет заливки тип границ. И максимально отдаленная от первой ячейки листа A1.
В самом конце макроса вызывается сообщение в теле которого должно содержаться текстовое значение из переменной text.
Если исходная таблица не содержит ни одной скрытой строки, тогда после запуска макроса будет отображаться только первая строка текста из переменной text: «В данном листе скрыты следующие строки:»
Такое сообщение для данной ситуации является немного ошибочным. Если нужно сделать так, чтобы при отсутствии скрытых строк в таблице макрос отобразил другой текст сообщения, нужно задекларировать еще одну булевою переменную HidViz логического типа Boolean:
Dim HidViz As Boolean
В ней будет содержаться одно из двух традиционных логических значений True or Fasle (истина или ложь), в зависимости от того будет ли таблица содержать хотя-бы одну скрытую строку или нет. Далее после строки кода макроса:
If ActiveSheet.Rows(i).Hidden = True Then
дописываем инструкцию изменяющую логическое значение для переменной HidViz:
HidViz = True
Дополнительно в конце кода перед строкой:
MsgBox text
добавьте инструкции для изменения текста сообщения на альтернативный, в тому случаи если не найдено ни одной скрытой строки в исходной таблице:
If HidViz = False Then text = «На текущем листе нет ни одной скрытой строки!»
Полная версия измененного кода макроса выглядит так:
Sub HiddenLinesInfo()
Dim i As Long
Dim text As String
Dim pervoj As String
Dim HidViz As Boolean
text = "В данном листе скрыты следующие строки: "
For i = 1 To ActiveSheet.Rows.Count
If ActiveSheet.Rows(i).Hidden = True Then
HidViz = True
If pervoj = "" Then
pervoj = i
End If
Else
If pervoj <> "" Then
text = text & vbNewLine & pervoj & ":" & i - 1
pervoj = ""
Else
If i > ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row Then
Exit For
End If
End If
End If
Next
If HidViz = False Then text = "На текущем листе нет ни одной скрытой строки!"
MsgBox text
End Sub
Результат действия измененного макроса в тому случаи если скрытые строки отсутствуют:
Поиск скрытых столбцов на листе Excel используя VBA-макрос
Но что если необходимо сделать так чтобы макрос показывал информацию не о скрытых строках, а и о скрытых столбцах таблицы:
В таком случае сделаем так:
- Скопируйте выше описанный код макроса для отображения информации о скрытых строках в этот же модуль и переименуйте его на «HiddenColumnInfo».
- Измените тексты сообщений, а именно измените по смыслу слова «строки» на «столбцы».
- В коде измените все свойства где встречается Rows на Columns.
- Измените строку для отображения текста сообщения с информацией о скрытых столбцах. Ведь заголовки столбцов у нас отображаются буквами, а не числами. Для этого воспользуемся строкой кода, которая умеет возвращать букву столбца VBA. Поэтому вместо строки:
pervoj = i
пишем:
pervoj = Split(Cells(1, i).Address, «$»)(1)
a вместо строки для вывода сообщения:
text = text & vbNewLine & pervoj & «:» & i – 1
пишем модифицированный код генерации сообщений с буквами для заголовков столбцов:
text = text & vbNewLine & pervoj & «:» & Split(Cells(1, i — 1).Address, «$»)(1)
Код макроса для получения информации о скрытых столбцах в таблице выглядит следующим образом:
Sub HiddenColumnInfo()
Dim i As Long
Dim text As String
Dim pervoj As String
Dim HidViz As Boolean
text = "В данном листе скрыты следующие столбцы: "
For i = 1 To ActiveSheet.Columns.Count
If ActiveSheet.Columns(i).Hidden = True Then
HidViz = True
If pervoj = "" Then
pervoj = Split(Cells(1, i).Address, "$")(1)
End If
Else
If pervoj <> "" Then
text = text & vbNewLine & pervoj & ":" & Split(Cells(1, i - 1).Address, "$")(1)
pervoj = ""
Else
If i > ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column Then
Exit For
End If
End If
End If
Next
If HidViz = False Then text = "На текущем листе нет ни одного скрытого столбца!"
MsgBox text
End Sub
Пример работы макроса HiddenColumnInfo в действии:
Обратите внимание что теперь вместо числовых номеров, в сообщении отображаются буквы заголовков столбцов. Это очень удобно и правильно!
Таким образом мы создали новый макрос, который предназначен для работы со скрытыми столбцами. За основу использовали предыдущий код макроса.
В этот же модуль можно написать еще один 3-тий макрос, который будет вызывать поочередно эти два макроса описаны в данном примере. Одним словом, с помощью простейшего кода VBA выполним запуск двух макросов из другого макроса Excel:
Sub HiddenLineColumnInfo()
HiddenLinesInfo
HiddenColumnInfo
End Sub
Этот макрос сначала позволит нам получить всю информацию о скрытых строках, а потом и о скрытых столбцах таблицы в один клик мышкой. Теперь нам не нужно по отдельности запускать оба макроса, достаточно лишь запустить их из «РАЗРАБОТЧИК»-«Код»-«Макросы»-«HiddenLineColumnInfo»-«Выполнить».
В этой статье говорится о проверке, скрыта ли строка в указанном диапазоне или на листе в Excel.
Проверьте, скрыта ли строка в выбранном диапазоне с кодом VBA
Проверьте, скрыта ли строка на листе с кодом VBA
Проверьте, скрыта ли строка в выбранном диапазоне с кодом VBA
Пожалуйста, сделайте следующее, чтобы проверить, скрыты ли строки в выбранном диапазоне, и найдите номер скрытой строки.
1. Выберите диапазон, в котором вы будете проверять наличие скрытых строк. нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.
2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте ниже код VBA в окно кода.
Код VBA: проверка скрытых строк в выбранном диапазоне
Sub HiddenRowsInRange()
'Update by Extendoffice 2018/5/15
Dim I As Long
Dim xStr As String
Dim xOne, xTwo As Long
Dim xRg, xRgVsb, xRgItem As Range
On Error Resume Next
Set xRg = Range("A1:A100")
Set xRgVsb = xRg.SpecialCells(xlCellTypeVisible)
If xRg.Count <> xRgVsb.Count Then
For I = 1 To xRgVsb.Areas.Count - 1
Set xRgItem = xRgVsb.Areas.Item(I)
xOne = xRgItem.Rows(xRgItem.Rows.Count).Row
xTwo = xRgVsb.Areas.Item(I + 1).Rows(1).Row
xStr = xStr & Str(xOne + 1) & " --" & Str(xTwo - 1) & ","
Next
xStr = Left(xStr, Len(xStr) - 1)
MsgBox "Hidden rows in selected range are:" & xStr
Else
MsgBox "No rows hidden"
End If
End Sub
3. нажмите F5 ключ для запуска кода.
Тогда Microsoft Excel диалоговое окно всплывает, чтобы показать вам скрытые строки, как показано ниже.
Проверьте, скрыта ли строка на листе с кодом VBA
Приведенный ниже код VBA может помочь вам проверить скрытые строки на листе в Excel. Пожалуйста, сделайте следующее.
1. Откройте рабочий лист, который нужно проверить на наличие скрытых строк, нажмите кнопку другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.
2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте ниже код VBA в окно кода.
Код VBA: проверьте, скрыта ли строка на листе
Sub HiddenRowsInSheet()
'Update by Extendoffice 2018/5/15
Dim I As Long
Dim xStr As String
Dim xOne, xTwo As Long
Dim xRg, xRgVsb, xRgItem As Range
On Error Resume Next
Set xRg = ActiveSheet.UsedRange
Set xRgVsb = xRg.SpecialCells(xlCellTypeVisible)
Debug.Print xRgVsb.Address
If xRg.Count <> xRgVsb.Count Then
For I = 1 To xRgVsb.Areas.Count - 1
Set xRgItem = xRgVsb.Areas.Item(I)
xOne = xRgItem.Rows(xRgItem.Rows.Count).Row
xTwo = xRgVsb.Areas.Item(I + 1).Rows(1).Row
xStr = xStr & Str(xOne + 1) & " --" & Str(xTwo - 1) & ","
Next
xStr = Left(xStr, Len(xStr) - 1)
MsgBox "Hidden rows in active sheet are:" & xStr
Else
MsgBox "No rows hidden"
End If
End Sub
3. нажмите F5 ключ для запуска кода.
Тогда Microsoft Excel диалоговое окно всплывает, чтобы показать вам скрытые строки на текущем листе, как показано ниже.
Внимание: Если теперь скрытые строки существуют в выбранном диапазоне или на листе, вы получите диалоговое окно, как показано ниже.
Статьи по теме:
- Как проверить, является ли первый символ в ячейке буквой или цифрой в Excel?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!