Vba excel поиск пустой ячейки в столбце в excel

 

Подскажите как при помощи VBA определить наличие пустой ячейки (не заполненной = «» ;)  в диапазоне (например А1:С300) или ячейки с значением = 0 ?

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Нашли, дальше что? Перебрать диапазон/массив и при нахождении пустой/нулевой выйти из цикла с сообщением.

 

Антон

Пользователь

Сообщений: 617
Регистрация: 01.01.1970

#3

28.01.2014 01:20:21

посредством перебора каждого значения массива и сравнением )

Код
'перебираем строки 
For i=1 to 300 
'перебираем столбцы 
For y=1 to 3 
If cells(i,y).Value="" then 
Msgbox("пустая ячейка") 
Exit for
End if 
If cells(i,y).Value=0 then 
Msgbox("нуль.")  
Exit for 
End if    
Next y   
Next i

Изменено: Антон28.01.2014 01:25:02

 

Да, если такие ячейки имеются вывести сообщение и прекратить дальнейшее выполнение макроса, если таких ячеек нет продолжить выполнение макроса.

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#5

28.01.2014 01:28:51

Код
Sub Test()
Dim Rng As Range, rCell As Range
    Set Rng = Range("A1:C300")
    For Each rCell In Rng
        If IsEmpty(rCell) Or rCell = 0 Then
            MsgBox "Найдено в ячейке " & rCell.Address(0, 0), 64, "Для сведения"
            Exit For
        End If
    Next
End Sub 
 
 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#7

28.01.2014 02:01:36

Без цикла, но и без адресов:

Код
Sub Test2()
Dim Rng As Range
    Set Rng = Range("A1:C300")
    x = Application.WorksheetFunction.CountA(Rng)
    y = Application.WorksheetFunction.CountIf(Rng, 0)
    If Rng.Cells.Count <> x Then MsgBox "Есть пустые."
    If y > 0 Then MsgBox "Есть нули."
End Sub 
 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Я сам — дурнее всякого примера! …

 

Max.il

Пользователь

Сообщений: 64
Регистрация: 05.12.2018

Юрий М, Юрий, добрый вечер. Развивая тему, если нужно проверить несколько ячеек, к примеру А3, Т16 и Т22, если они пустые — залить эту ячейку красным цветом. Если в ней есть что-то , пропустить. Если во всех ячейках есть данные, то просто прекратить выполнение макроса без вывода сообщения.
Спасибо  

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

 

Max.il

Пользователь

Сообщений: 64
Регистрация: 05.12.2018

Юрий М,Нет, т.к. проверка должна осуществляться после макроса.  

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

УФ сработает и после макроса. А макрос написать не смогу: нет у меня файла, где имеются перечисленные Вами ячейки ))
Вы бы уточнили: три ячейки — это только для примера? А по факту? И как макрос должен понять, какие именно ячейки проверять? Где-то есть список этих ячеек?

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#13

27.05.2019 23:32:23

Нет ответа…

Код
Dim rCell As Range
    For Each rCell In Range("A3, T16, T22")
        If rCell = "" Then
            rCell.Interior.ColorIndex = 3
        Else
            rCell.Interior.ColorIndex = xlNone
        End If
    Next
 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#14

27.05.2019 23:39:10

Цитата
Max.il написал:
к примеру
Код
Sub qq()
    Dim r As Range
    Set r = [a1:c3]
    On Error Resume Next
    r.SpecialCells(4).Interior.ColorIndex = 3
End Sub
 

Max.il

Пользователь

Сообщений: 64
Регистрация: 05.12.2018

RAN,  Юрий М, Мужчины, спасибо, что помогаете . Искренняя благодарность.  

 

Николай Китаев

Пользователь

Сообщений: 2
Регистрация: 01.01.1970

#16

17.12.2021 13:26:01

Цитата
написал:
Подскажите как при помощи VBA определить наличие пустой ячейки

Такая конструкция не работает: If cells(i,y).Value=»» then….

А так — должно работать:
If IsEmpty(cells(i,y).Value) = True Then ……., где К — переменная содержащая или несодержащая значение, или переменная, содержащая адрес ячейки Cell, которую проверяем.

Изменено: Николай Китаев17.12.2021 14:07:17

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Николай Китаев, с момента создания темы прошло почти 8 лет, а ТС был последний раз почти 2 года назад — в курсе?  :D

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Ничего страшного. Можно считать, что памятка для себя. Тем более проверка вида cells(i,y).Value=»» не работает.

 

БМВ

Модератор

Сообщений: 21378
Регистрация: 28.12.2016

Excel 2013, 2016

#19

17.12.2021 14:19:40

Цитата
Николай Китаев написал:
Тем более проверка вида cells(i,y).Value=»» не работает.

докажите.

По вопросам из тем форума, личку не читаю.

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Если вас что-то не устраивает, то не нужно поднимать со дна старую тему, тем более, что спросить автора не получится — создайте свою и там всё подробно опишите и/или спросите

И тут гляньте:

VBA. UDF. Функция для проверки значения на строку нулевой длины «=»»»

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#21

17.12.2021 23:29:31

Цитата
Николай Китаев написал: If IsEmpty(cells(i,y).Value) = True Then ……., где К — переменная

И где К? )

The below code works fine to find the first empty cell in a given column (here column B). But what I need is a code to find the first blank cell in that column.

Sub macro1()
    Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
    Dim currentRowValue As String
    sourceCol = 2   'column B has a value of 2
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row
    'for every row, find the first blank cell and select it
    For currentRow = 1 To rowCount
        currentRowValue = Cells(currentRow, sourceCol).Value
        If IsEmpty(currentRowValue) Or currentRowValue = "" Then
            Cells(currentRow, sourceCol).Select
        End If
    Next
End Sub

Also, it should start looking from row 10 instead of row 1.

Can somebody rewrite this code to do this?

asked Aug 6, 2014 at 8:37

Stan's user avatar

3

Could something like this be what you’re looking for:

Sub test()
Dim ws As Worksheet

Set ws = ActiveSheet

For Each cell In ws.Columns(2).Cells
    If IsEmpty(cell) = True Then cell.Select: Exit For
Next cell
End Sub

This will run through each cell in column B in the active worksheet and select the first empty one it comes across. To set the sheet to a particular one Change Set ws = ActiveSheet to Set ws = Sheets("EnterSheetNameHere")

Or you could try using:

Sub test()
Dim ws As Worksheet

Set ws = ActiveSheet

For Each cell In ws.Columns(2).Cells
     If Len(cell) = 0 Then cell.Select: Exit For
Next cell
End Sub

answered Aug 6, 2014 at 13:43

Tom's user avatar

TomTom

9,6873 gold badges31 silver badges48 bronze badges

My problem is solved by using the following code.

Sheets("sheet1").Select
Dim LR2 As Long, cell2 As Range, rng2 As Range
With Sheets("sheet1")
    LR2 = .Range("B" & Rows.Count).End(xlUp).Row
    For Each cell2 In .Range("B8:B" & LR2)
        If cell2.Value <> "" Then
            If rng2 Is Nothing Then
                Set rng2 = cell2
            Else
                Set rng2 = Union(rng2, cell2)
            End If
        End If
    Next cell2
    rng2.Select
End With

answered Aug 7, 2014 at 10:59

Stan's user avatar

StanStan

9274 gold badges15 silver badges33 bronze badges

Just my two cents.

The function will look for the first encountered BLANK cell in a range, so it should work with columns and rows.

'Find first BLANK cell in a given range, returnt a range (one cell)
Function FirstBlank(ByVal rWhere As Range) As Range

    Dim vCell As Variant
    Dim answer As Range
    Set answer = Nothing

    For Each vCell In rWhere.Cells

        If Len(vCell.Formula) = 0 Then

            Set answer = vCell
            Exit For

        End If

    Next vCell

    Set FirstBlank = answer

End Function

And then do whatever you want with the cell.

answered Oct 21, 2015 at 10:49

Eilthalearin Kheru's user avatar

Try this code to select the first empty cell below cell B10. But it requires B10 and B11 to be pre-occupied.

Range(«B10»).End(xlDown).Offset(1, 0).Select

or

Range(«B100000»).End(xlUp).Offset(1, 0).Select

answered Aug 28, 2018 at 22:50

user10287104's user avatar

0 / 0 / 0

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

Сообщений: 53

1

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

17.02.2019, 14:46. Показов 13934. Ответов 6


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

Помогите, пожалуйста, новичку. Есть таблица, в которую постоянно вручную добавляются заполненные строки (от 1 до 10000), как макросом найти первую пустую ячейку столбца А, чтобы сделать вручную очередную вставку строк ?



0



11482 / 3773 / 677

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

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

17.02.2019, 14:57

2

прокрути страницу вниз. Там сайт (для ленивых не желающих пользоваться поиском) подбирает сообщения
Там есть ответ на вопрос



0



0 / 0 / 0

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

Сообщений: 53

17.02.2019, 15:08

 [ТС]

3

Спасибо за быстрый ответ, но перед созданием темы я все пересмотрел, я не нашел ответ на свой вопрос, может Вы мне поможете. Если код нужно как-то изменить, то самостоятельно я не смогу это сделать, поэтому и обратился к профессионалам в надежде на помощь. Спасибо.



0



Vlad999

3827 / 2254 / 751

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

Сообщений: 5,930

18.02.2019, 09:32

4

Visual Basic
1
2
3
4
5
6
7
Dim lLastRow As Long
Dim lLastCol As Long
lLastRow = Cells(Rows.Count,1).End(xlUp).Row 'последняя строка по 1 столбцу
lLastCol = Cells(1, Columns.Count).End(xlToLeft).Column 'последний столбец по 1 строке
 
если есть скрытые строчки
lRow = Activesheet.usedrange.row + Activesheet.usedrange.rows.count - 1



1



Alex77755

11482 / 3773 / 677

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

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

19.02.2019, 00:47

5

несколько вариантов

Visual Basic
1
2
3
4
5
6
7
8
9
lLastRow = Cells(Rows.Count,1).End(xlUp).Row
lLastRow = Cells.SpecialCells(xlLastCell).Row
lLastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
LastRow = Worksheets(1).Cells(1, 1).CurrentRegion.Rows.Count
 
LastColumn = Worksheets(1).Cells(1, 1).CurrentRegion.Columns.Count
lLastCol = Cells(1, Columns.Count).End(xlToLeft).Column
lLastCol = Cells.SpecialCells(xlLastCell).Column
lLastCol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1



1



0 / 0 / 0

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

Сообщений: 53

19.02.2019, 21:51

 [ТС]

6

Спасибо огромное !



0



tmash

35 / 30 / 6

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

Сообщений: 121

20.02.2019, 22:31

7

Привет!

Visual Basic
1
2
3
4
5
6
Public Function Столбец_Ячейка_Пустая(ByVal r As Range) _
        As Range
 
    Set Столбец_Ячейка_Пустая = r.SpecialCells(xlCellTypeBlanks)(1)
 
End Function



1



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

ttv

Дата: Вторник, 24.10.2017, 10:05 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 29


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

добрый день!
как заставить макрос в excel найти первую пустую ячейку в столбце А (после всех заполненных), вставить пустую строку НАД ней и скопировать туда формулы из предыдущей строки? файл прилагаю (та ячейка с которой всегда должен начинаться макрос — залита красным).
В макросах и VBA вообще не соображаю, код написан «методом тыка», все работает, кроме одного — оператору вручную надо выделять ячейку залитую красным — и только потом запускать макрос. Но если будет выделена любая другая ячейка и оператор случайно запустит макрос — это приведет к неправильным расчетам. Хотелось бы исключить этот фактор риска.
Буду ОЧЕНЬ благодарна за ответы!

К сообщению приложен файл:

001.xlsm
(24.3 Kb)

Сообщение отредактировал ttvВторник, 24.10.2017, 10:08

 

Ответить

Pelena

Дата: Вторник, 24.10.2017, 10:37 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте.
Как вариант
[vba]

Код

Sub Макрос3()
    Set lastcell = Cells(Rows.Count, 1).End(xlUp)
    With lastcell
        .Resize(1, 18).Copy .Offset(1)
        .Offset(1) = .Value + 1
        .Offset(1, 1).Resize(1, 3).ClearContents
        .Offset(1, 8).Resize(1, 6).ClearContents
    End With
    Application.CutCopyMode = False
End Sub

[/vba]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

al-Ex

Дата: Вторник, 24.10.2017, 10:48 |
Сообщение № 3

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 190


Репутация:

59

±

Замечаний:
0% ±


Excel 2010

Так попробуй

К сообщению приложен файл:

001_1.xlsm
(23.1 Kb)

 

Ответить

ttv

Дата: Вторник, 24.10.2017, 11:01 |
Сообщение № 4

Группа: Пользователи

Ранг: Новичок

Сообщений: 29


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

СПАСИБО огромнейшее!!!! Работает как надо!

 

Ответить

Список данных может быть заполнен пустыми ячейками. Чтобы найти первую пустую ячейку в выбранном диапазоне столбца, просмотрите приведенное ниже руководство для получения дополнительных сведений.

Найдите первую пустую ячейку в столбце с формулой
Найдите первую пустую ячейку в столбце с кодом VBA


Найдите первую пустую ячейку в столбце с формулой

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

1. Выберите пустую ячейку для отображения результата.

2. Скопируйте и вставьте формулу. = МИН (ЕСЛИ (A1: A23 = «»; СТРОКА (A1: A23))) в панель формул, затем нажмите Ctrl + Shift + Enter клавиши на клавиатуре. Смотрите скриншот:

Внимание: Измените диапазон в формуле на свой собственный.

После этого в выбранной ячейке отобразится номер строки. Поскольку указанный вами диапазон находится в столбце A, в зависимости от отображаемого числа это означает, что первая пустая ячейка — это A16.


Найдите первую пустую ячейку в столбце с кодом VBA

Помимо формулы, вы также можете найти первую пустую ячейку в столбце с кодом VBA. Пожалуйста, сделайте следующее.

1. Нажмите другой + A11 в то же время открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, дважды щелкните текущее имя рабочего листа на левой панели, чтобы открыть редактор кода.

3. Скопируйте и вставьте следующий код VBA в редактор.

Код VBA: найти первую пустую ячейку в столбце

Sub Findfirstblankcell()
	Dim Rng As Range
	Dim WorkRng As Range
	On Error Resume Next
	xTitleId = "KutoolsforExcel"
	Set WorkRng = Application.Selection
	Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type: = 8)
	For Each Rng In WorkRng
		If Rng.Value = "" Then
			MsgBox "No Value, in " & Rng.Address
		End If
	Next
End Sub

4. Нажмите Run кнопку или нажмите кнопку F5 ключ для запуска кода.

5. После запуска кода KutoolsforExcel появится диалоговое окно, выберите диапазон, в котором вы хотите найти первую пустую ячейку, затем щелкните OK кнопка. Смотрите скриншот:

Затем появляется диалоговое окно с адресом первой пустой ячейки в указанном столбце, указанном внутри.

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


Статьи по теме:

  • Как найти позицию первого / последнего числа в текстовой строке в Excel?
  • Как найти ячейки с условным форматированием / с условным форматированием в Excel?
  • Как найти ячейки с / с проверкой данных в 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% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

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


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

Понравилась статья? Поделить с друзьями:
  • Vba excel поиск повторяющихся значений
  • Vba excel поиск по части слова
  • Vba excel поиск по тексту в word
  • Vba excel поиск по всем файлам
  • Vba excel поиск по textbox