Как найти непустые ячейки в excel vba

Елена_88

1

Поиск непустой ячейки в столбце

11.02.2009, 07:42. Показов 19694. Ответов 6


Студворк — интернет-сервис помощи студентам

Приветствую !
Понимаю, задачка смешная, но мне, как новичку очень нужна помощь
Нужно написать функцию, которая будет возвращать значение первой непустой ячейки сверху.
т.е., например, стоим на А10, первая заполненная у нас А3, так как вытащить ее значение ?

Добавлено через 20 минут 39 секунд
Можно ли потом найти вторую заполненную ячейку ?

Sasha_Smirnov

5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

12.02.2009, 01:31

2

Вот из этой простенькой «сабрутины» я и предлагаю сваять нужную Вам функцию. Отзовитесь, ау!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub FindAndCountEmptyCells(): Static k As Long 'если файл не пуст, то +1 при каждом вызове
 
 
If k = 0 Then  'а это так: 1) при первом вызове данной функции; 2) ещё не придумал
 
    Range("a1").Activate                            'проверка ячейки A1
    If Not IsEmpty(ActiveCell) Then k = k + 1       'если в A1 не пусто, то счёт ведётся с неё
    k = k + 1
    Application.FindFormat.NumberFormat = "General" 'аналог нажатия <Ctrl>+<F> (формат "Общий")
    
    'Активация k-й непустой ячейки.
    Cells.Find(What:="*", SearchFormat:=True, SearchOrder:=xlByColumns).Activate
 
Else
 
    Cells.FindNext(After:=ActiveCell).Activate 'при повторных вызовах - поиск следующей непустой
    k = k + 1
    If ActiveCell.Column & ":" & ActiveCell.Row = "1:1" Then k = 1 'это когда прошли всю таблицу
End If
 
 
MsgBox "Это " & k & "-я непустая ячейка (" & ActiveCell.Column & ":" & ActiveCell.Row & ")."
'здесь вместо этого мэссиджа Вы можете присваивать функции значение выделенной (активной) ячейки
 
End Sub

Вот тут действительно функция! Функциональность её та же.
Что делает основная программа (Sub), ясно из её названия.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Function FindAndCountNotEmptyCells()
'функция ищет на листе Excel k-ю (при k-м вызове) непустую ячейку (по столбцам)
  
Static firstfoundRow As Long, firstfoundCol As Long 'координаты первой найденной непустой ячейки
Static k As Long 'если файл не пуст, то при каждом вызове возвращает № очередной непустой ячейки
     
 
If k = 0 Then  'а это так при первом вызове функции и при возврате по GoTo (когда всё обыскано)
        Cells.Find(What:="*", SearchOrder:=xlByColumns).Activate 'Активация 1-й непустой ячейки.
          
        If Not IsEmpty(Cells(1, 1)) Then 'если в A1 не пусто, то при 1-м вызове считаем с неё
            firstfoundRow = 1: firstfoundCol = 1    'Запомнили координаты 1-й ячейки: (1, 1) -
            Cells.FindPrevious(After:=ActiveCell).Activate                  'и вернулись в неё.
        Else
            firstfoundRow = ActiveCell.Row: firstfoundCol = ActiveCell.Column
        End If
Else
    Cells.FindNext(After:=ActiveCell).Activate 'поиск следующей ячейки при повторных вызовах
End If
 
 
If (ActiveCell.Column = firstfoundCol) And (ActiveCell.Row = firstfoundRow) And (k > 1) Then
    k = 0       'сброс k; функция обошла ("просканировала") все ячейки активного листа
    FindAndCountNotEmptyCells = "I HAVE RETIRED)"
    Exit Function                                   'завершение работы функции: она всё обыскала
End If
  
 
FindAndCountNotEmptyCells = ActiveCell 'функция принимает значение очередной непустой ячейки
  
k = k + 1
 
MsgBox k & "-я непустая ячейка листа """ & ActiveSheet.Name & """ содержит: " & ActiveCell _
& vbCr & "(формат этого значения - """ & ActiveCell.NumberFormat & """)"
End Function
  
  
  
Sub I_seek_for_the_2_first_negative_cells_in_ActiveSheet()
  
Dim the1StNegativeCell, the2NdNegativeCell '1-е и 2-е отриц. числа (если есть) или что найдётся
  
Do
    the1StNegativeCell = FindAndCountNotEmptyCells
    If IsNumeric(the1StNegativeCell) And the1StNegativeCell < 0 Then Exit Do
Loop Until the1StNegativeCell = "I HAVE RETIRED)"
'выходим из цикла, как только находим в таблице ПЕРВОЕ отрицательное число, или когда его там нет
  
 
If the1StNegativeCell <> "I HAVE RETIRED)" Then 'то есть 1-е отриц. число всё же найдено
''''''''' продолжаем вызывать функцию поиска ''''''''''''''
    Do
    the2NdNegativeCell = FindAndCountNotEmptyCells
    If IsNumeric(the2NdNegativeCell) And the2NdNegativeCell < 0 Then Exit Do
    Loop Until the2NdNegativeCell = "I HAVE RETIRED)"
    'выходим из цикла, как только находим в таблице ВТОРОЕ отриц. число, или когда его там нет
    
    If the2NdNegativeCell = "I HAVE RETIRED)" Then _
        the2NdNegativeCell = "Второго отрицательного числа у вас в таблице (пока) нет."
Else
    MsgBox "На рабочем листе """ & ActiveSheet.Name & """ вашей таблицы отрицательных чисел нет."
    Exit Sub
End If
  
 
MsgBox "the1StNegativeCell = " & the1StNegativeCell 'сообщение, чему = 1-е отриц. число (в столбце)
MsgBox "the2NdNegativeCell = " & the2NdNegativeCell 'сообщение, чему = 2-е отриц. число (следующее)
End Sub

Это более-менее работоспособный вариант.

Классики Си! Видите, сколько мороки на бэйсике? Где ж ваше веское слово… Ну хотя бы просто в поиске первой ячейки, с содержимым.



0



Супер-модератор

8782 / 2533 / 144

Регистрация: 07.03.2007

Сообщений: 11,873

15.02.2009, 05:11

3

а если перед поиском сделать фильтр. так ты найдешь адрес первой непустой ячейки. потом фильтр можно снять



0



5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

15.02.2009, 15:49

4

Я и без фильтра нашёл: по контрол-F в Excel.

И вообще, это Елена ищет. А форум что-то молчит, хоть и просмотров под полторы сотни.



0



5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

18.02.2009, 20:23

5

Я и без фильтра нашёл: по контрол-F в Excel.

А форум всё молчит, хоть и просмотров за две сотни.



0



5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

05.03.2009, 16:26

6

Вот черновой вариант. Повторяю, поскольку на прежних сломалась кнопка запуска.



0



5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

05.03.2009, 16:51

7

Или, скорее, так: назначенная макросу кнопка, при архивировании, теряет связь с макросом.

Поэтому-то и прошу — поискать непустые ячейки на Си, ассемблере и пр.

Не будешь же (в жизни) каждый раз объяснять пользователю, мол, жми альт-F8, щёлкай по имени, жми кнопку Выполнить, — нудно!



0



Свойство End объекта Range применяется для поиска первых и последних заполненных ячеек в VBA Excel — аналог сочетания клавиш Ctrl+стрелка.

Свойство End объекта Range возвращает объект Range, представляющий ячейку в конце или начале заполненной значениями области исходного диапазона по строке или столбцу в зависимости от указанного направления. Является в VBA Excel программным аналогом сочетания клавиш — Ctrl+стрелка (вверх, вниз, вправо, влево).

Возвращаемая свойством Range.End ячейка в зависимости от расположения и содержания исходной:

Исходная ячейка Возвращаемая ячейка
Исходная ячейка пустая Первая заполненная ячейка или, если в указанном направлении заполненных ячеек нет, последняя ячейка строки или столбца в заданном направлении.
Исходная ячейка не пустая и не крайняя внутри исходного заполненного диапазона в указанном направлении Последняя заполненная ячейка исходного заполненного диапазона в указанном направлении
Исходная ячейка не пустая, но в указанном направлении является крайней внутри исходного заполненного диапазона Первая заполненная ячейка следующего заполненного диапазона или, если в указанном направлении заполненных ячеек нет, последняя ячейка строки или столбца в заданном направлении.

Синтаксис

Expression.End (Direction)

Expression — выражение (переменная), представляющее объект Range.

Параметры

Параметр Описание
Direction Константа из коллекции XlDirection, задающая направление перемещения. Обязательный параметр.

Константы XlDirection:

Константа Значение Направление
xlDown -4121 Вниз
xlToLeft -4159 Влево
xlToRight -4161 Вправо
xlUp -4162 Вверх

Примеры

Скриншот области рабочего листа для визуализации примеров применения свойства Range.End:

Примеры возвращаемых ячеек свойством End объекта Range("C10") с разными значениями параметра Direction:

Выражение с Range.End Возвращенная ячейка
Set myRange = Range("C10").End(xlDown) Range("C16")
Set myRange = Range("C10").End(xlToLeft) Range("A10")
Set myRange = Range("C10").End(xlToRight) Range("E10")
Set myRange = Range("C10").End(xlUp) Range("C4")

Пример возвращения заполненной значениями части столбца:

Sub Primer()

Dim myRange As Range

Set myRange = Range(Range(«C10»), Range(«C10»).End(xlDown))

MsgBox myRange.Address  ‘Результат: $C$10:$C$16

End Sub


Допустим, в диапазоне существует много несмежных пустых ячеек, и теперь вам нужно выбрать все ячейки с текущим содержимым. Как легко выбрать все непустые ячейки в Excel? Есть несколько уловок, чтобы решить эту проблему.

  • Выберите непустые ячейки в диапазоне с помощью специальной функции Перейти
  • Выберите непустые ячейки в диапазоне с помощью VBA
  • Выберите непустые ячейки в диапазоне с помощью Kutools for Excel (только один шаг)

Выберите непустые ячейки в диапазоне с помощью специальной функции Перейти

Функция Go To Special может помочь нам выбрать непустые ячейки в выбранном диапазоне с помощью следующих шагов.

1. Выберите диапазон, из которого вы выберете все непустые ячейки, и нажмите F5 Клавиша открытия диалогового окна «Перейти». Затем нажмите кнопку Особый кнопку, чтобы открыть диалоговое окно Перейти к специальному.

Внимание: Вы также можете открыть Перейти к специальному диалоговое окно, щелкнув Главная > Найти и выбрать > Перейти к специальному.

2. В диалоговом окне «Перейти к специальному» установите флажок Константы вариант, Номера вариант, Текст вариант, Логика вариант, и ошибки и нажмите OK кнопку.

Теперь вы увидите, что только непустые ячейки с содержимым выбраны в указанном диапазоне. См. Скриншоты ниже:

Один щелчок, чтобы выбрать все непустые ячейки в диапазоне в Excel

Kutools for ExcelАвтора Выбрать непустые ячейки Утилита может помочь вам быстро выбрать все непустые ячейки из выбранного диапазона одним щелчком мыши.

ad выберите непустые ячейки

Выберите непустые ячейки в диапазоне с помощью VBA

Здесь мы предоставляем макрос VBA для выбора всех непустых ячеек из указанного диапазона. Пожалуйста, сделайте следующее:

1, нажмите другой + F11 клавиши, чтобы открыть окно Microsoft Visual Basic для приложений.

2, Нажмите Вставить > Модули, а затем вставьте следующий код VBA в открывающееся окно модуля.

VBA: выберите непустые ячейки из диапазона

Sub SelectNonBlankCells()
Dim Rng As Range
Dim OutRng As Range
Dim InputRng As Range
Dim xTitle As String
On Error Resume Next
xTitle = Application.ActiveWindow.RangeSelection.Address
Set InputRng = Application.InputBox("Range :", "KutoolsforExcel", xTitle, Type:=8)
Set InputRng = Application.Intersect(InputRng, Application.ActiveSheet.UsedRange)
For Each Rng In InputRng
If Not Rng.Value = "" Then
If OutRng Is Nothing Then
Set OutRng = Rng
Else
Set OutRng = Application.Union(OutRng, Rng)
End If
End If
Next
If Not (OutRng Is Nothing) Then
OutRng.Select
End If
End Sub

3, нажмите F5 ключ или щелкните Run кнопку для запуска этого VBA.

4. В открывшемся диалоговом окне укажите диапазон, в котором вы будете выбирать только непустые ячейки, и нажмите кнопку OK кнопку.

Теперь все непустые ячейки выбираются сразу в указанном диапазоне.


Выберите непустые ячейки в диапазоне с помощью Kutools for Excel

Kutools for ExcelАвтора Выбрать непустые ячейки Утилита позволяет выбрать все непустые ячейки из определенного диапазона одним щелчком мыши.

Выберите диапазон, в котором вы выберете только непустые ячейки, и нажмите кнопку Кутулс > Выберите > Выбрать непустые ячейки.

Теперь все непустые ячейки в указанном диапазоне выбираются сразу.

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now


Демонстрация: выделение непустых ячеек в диапазоне в Excel


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (0)


Оценок пока нет. Оцените первым!

Be it for troubleshooting formula errors or data integrity, you might find yourself trying to identify those cells going through the entire workbook. In this article we’re going to show to find in Excel if cell is blank using VBA and automate this process.

How to find in Excel if cell is blank using VBA

VBA has some predefined types for the cells that contains special values. These can be accessed with the SpecialCells method. The SpecialCells method uses two arguments to specify the cells; Type and Value. Using a combination of these two arguments you can easily access the cell or range type you desired. Below is a list of values both arguments can get.

Type

  • xlCellTypeAllFormatConditions. Cells of any format
  • xlCellTypeAllValidation. Cells having validation criteria
  • xlCellTypeBlanks. Empty cells
  • xlCellTypeComments. Cells containing comments
  • xlCellTypeConstants. Cells containing constants
  • xlCellTypeFormulas. Cells containing formulas
  • xlCellTypeLastCell. The last cell in the selected range. Note that this will include empty cells that have had any cells that changed from their default format.
  • xlCellTypeSameFormatConditions. Cells having the same format
  • xlCellTypeSameValidation. Cells having the same validation criteria
  • xlCellTypeVisible. All visible cells

Value

  • xlErrors
  • xlLogical
  • xlNumbers
  • xlTextValues

To find the blank cells using VBA, using xlCellTypeBlanks constant for the type argument is enough. The value argument can be omitted.

An important point in here is that the Selection.SpecialCells(xlCellTypeBlanks).Cells returns an array of cells. So, before returning any information, we need to step through each cell in the array. A For Each…Loop is perfect for arrays consisting of objects. We designed our code to return the address of all blank cells in a Message Box.

To be able to run codes, you need to add a module into the workbook or the add-in file. Copy and paste the code into the module to run it. The main advantage of the module method is that it allows saving the code in the file, so that it can be used again later. Furthermore, the subroutines in modules can be used by icons in the menu ribbons or keyboard shortcuts. Remember to save your file in either XLSM or XLAM format to save your VBA code.

Find blank cells

Sub FindBlankCells()

    Dim rng As Range, message As String

    For Each rng In Selection.SpecialCells(xlCellTypeBlanks).Cells

        message = message & Chr(10) & rng.Address 'Chr(10) is for new line

    Next

    MsgBox message, vbOKOnly, "Empty Cells" 'vbOKOnly is the type of the message box

End Sub

Like this post? Please share to your friends:
  • Как найти неповторяющиеся значения в столбцах excel
  • Как найти неопределенный интеграл в excel
  • Как найти необходимые значения в excel
  • Как найти необходимые данные в таблице excel
  • Как найти неизвестное значение в excel