Поиск пустого столбца excel vba

I know how to find last column with data:

 finalcolumn = .Cells(1, .Columns.Count).End(xlToLeft).Column

But I would like to find first empty column, that is, in my case, somewhere before last column with data.

 firstemptycolumn = ?

asked Nov 20, 2017 at 13:38

Creakush Coliko's user avatar

Creakush ColikoCreakush Coliko

1031 gold badge2 silver badges10 bronze badges

1

Try like this for the first empty column of row 1:

finalcolumn  =  1 + .Cells(1, 1).End(xlToRight).Column

It is quite the same logic as your code, but you start from the left and you move to the right.


There are two cases, where this code will give wrong values:

  • if the last column with value is the last column in Excel («XFD»), then it will return a column, that does not exist;

  • if there is no value on the first column at all, it will return the same — 16384 + 1.

Both can be checked this way, working only with Excel versions after Excel 2003:

Function GetFinalFirstColumn(wks As Worksheet) As Long

    GetFinalFirstColumn = 1 + wks.Cells(1, 1).End(xlToRight).Column
    
    'Case for empty first row
    'Case for column XFD
    If GetFinalFirstColumn = 2 ^ 14 + 1 Then
        GetFinalFirstColumn = -1
    End If
End Function

answered Nov 20, 2017 at 13:40

Vityata's user avatar

0

You just need to add 1 to the last column found with data to find the first empty column.

finalcolumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
firstemptycolumn = finalcolumn + 1

answered Nov 20, 2017 at 13:44

Subodh Tiwari sktneer's user avatar

3

This will find the first empty column even if it embedded in other data:

Sub FirstEmptyColumn()
    Dim i As Long

    With Application.WorksheetFunction
            For i = 1 To Columns.Count
                If .CountA(Cells(1, i).EntireColumn) = 0 Then
                    MsgBox i
                    Exit Sub
                End If
            Next i
        End With
End Sub

answered Nov 20, 2017 at 13:47

Gary's Student's user avatar

Gary’s StudentGary’s Student

95.3k9 gold badges58 silver badges98 bronze badges

 

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

 

Юрий М

Модератор

Сообщений: 60586
Регистрация: 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

 

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

 

Юрий М

Модератор

Сообщений: 60586
Регистрация: 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 
 
 

Юрий М

Модератор

Сообщений: 60586
Регистрация: 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, если они пустые — залить эту ячейку красным цветом. Если в ней есть что-то , пропустить. Если во всех ячейках есть данные, то просто прекратить выполнение макроса без вывода сообщения.
Спасибо  

 

Юрий М

Модератор

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

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

 

Max.il

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

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

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

 

Юрий М

Модератор

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

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

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

 

Юрий М

Модератор

Сообщений: 60586
Регистрация: 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

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

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

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

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

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

 

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

 

БМВ

Модератор

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

Excel 2013, 2016

#19

17.12.2021 14:19:40

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

докажите.

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

 

Jack Famous

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

Сообщений: 10852
Регистрация: 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 ……., где К — переменная

И где К? )

Определение с помощью кода VBA Excel, что диапазон ячеек пуст, то есть, ни одна из ячеек диапазона (строки, столбца) не содержит отображаемого значения.

Определение пустого диапазона

Определить в VBA Excel, что диапазон ячеек пуст, можно с помощью функции рабочего листа WorksheetFunction.CountA или свойства диапазона ячеек Range.Text.

Пример 1

Определение, что диапазон ячеек пуст, с помощью функции рабочего листа WorksheetFunction.CountA:

Sub Primer1()

    If WorksheetFunction.CountA(Range(«A1:L8»)) = 0 Then

        MsgBox «Диапазон ячеек ««A1:L8»» пуст»

    Else

        MsgBox «Диапазон ячеек ««A1:L8»» не пуст»

    End If

End Sub

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

Пример 2

Определение, что диапазон ячеек пуст, с помощью свойства Text объекта Range:

Sub Primer2()

    If Range(«A1:L8»).Text = «» Then

        MsgBox «Диапазон ячеек ««A1:L8»» пуст»

    Else

        MsgBox «Диапазон ячеек ««A1:L8»» не пуст»

    End If

End Sub

Свойство Text объекта Range возвратит пустую строку только в том случае, если все ячейки диапазона будут содержать пустые строки и (или) значение Empty. Если одна или более ячеек в диапазоне будут содержать пустую строку, возвращенную формулой, то код второго примера все-равно определит, что диапазон пуст.

Определение пустой строки

Определение пустой строки в VBA Excel с помощью свойства Range.Text:

Sub Primer3()

    If Rows(5).Text = «» Then

        MsgBox «Указанная строка пуста»

    Else

        MsgBox «Указанная строка не пуста»

    End If

End Sub

Данное определение пустой строки используется в коде для удаления пустых строк из таблицы.

Определение пустого столбца

Определение пустого столбца в VBA Excel с помощью свойства Range.Text:

Sub Primer4()

    If Columns(7).Text = «» Then

        MsgBox «Указанный столбец пуст»

    Else

        MsgBox «Указанный столбец не пуст»

    End If

End Sub

или

Sub Primer5()

    If Columns(«G»).Text = «» Then

        MsgBox «Указанный столбец пуст»

    Else

        MsgBox «Указанный столбец не пуст»

    End If

End Sub


Фразы для контекстного поиска: диапазон пустой, строка пустая, столбец пустой.


На чтение 4 мин. Просмотров 11k.

Что делает макрос: Вы часто можете столкнуться с необходимостью добавить строки или столбцы к существующему набору данных. Этот макрос позволяет автоматически найти и выбрать первую пустую строку или столбец. Он предназначен для использования в сочетании с другими макрокомандами.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как этот код работает
  4. Код макроса
  5. Как этот код работает
  6. Как использовать

Как макрос работает

Эти макросы используют элемент Cells и свойство Offset в качестве ключевых инструментов навигации.
Элемент Cells принадлежит объекту Range. Это дает нам чрезвычайно удобный способ выбора диапазонов с помощью кода. Для этого требуется только относительные строки и столбцы в качестве параметров. Cells(5,4) приводит к строке 5, столбцу 4 (или ячейке D5). Cells(16, 4) приводит к строке 16, столбцу 4 (или ячейке D16).
Помимо передачи жестких чисел в элемент Cells, вы также можете передавать выражения.
Cells(Rows.Count, 1) то же самое, что выбрать последнюю строку и первый столбец в таблице. В Excel 2010 переводит к ячейке A1048576.
Cells(1,Columns.Count) выбирает первую строку и последний столбец в таблице. В Excel 2010 приводит к ячейке XFD1.
Объединение оператора Cells со свойством End позволяет перейти к последней использованной строке или столбцу. Это утверждение эквивалентно переходит к ячейке A1048576 и нажав Ctrl + Shift + стрелка вверх на клавиатуре. Excel автоматически переходит к последней использованной строки в столбце A.

Cells(Rows.Count, 1).End(xlUp).Select

Переходит к ячейке XFD1 и нажав Ctrl + Shift + стрелка влево на клавиатуре. Это переводит вас к последней использованной колонке в строке 1.

Cells(1, Columns.Count).End(xlToLeft).Select

Когда вы дойдете до последней строки или столбца, вы сможете использовать свойство Offset для перемещения вниз или к следующей пустой строке или столбцу.
Свойство Offset использует индекс строки и столбца, чтобы указать изменяющуюся базовую точку.Например, оператор выбирает ячейку А2, так как индекс строки в Offset перемещения строки базовой точки на единицу:

Range("A1").Offset(1, 0).Select

Этот оператор выбирает ячейку С4, и перемещает базовую точку на три строки и два столбца:

Range("A1").Offset(3, 2).Select

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

Код макроса

Sub PervayaPustayaStroka()
'Шаг 1: Объявляем переменные
Dim LastRow As Long
'Шаг 2: Захват последнего использованного номера строки
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
'Шаг 3: Выбираем следующую строку вниз
Cells(LastRow, 1).Offset(1, 0).Select
End Sub

Как этот код работает

  1. Шаг 1 первый объявляет переменную Long Integer под названием LastRow — держатель номера строки последней использованной строки.
  2. На шаге 2 мы фиксируем последнюю использованную строку, начиная с самой последней строки в листе и используя свойство End, чтобы перейти к первой непустой ячейке (переход к ячейке A1048576 нажатием Ctrl + Shift + стрелка вверх на клавиатуре).
  3. На этом этапе мы используем свойство Offset для перемещения на одну строку вниз и выбираем первую пустую ячейку в столбце A.

Код макроса

Sub PerviiPustoiStolbec()
'Шаг 1: Объявляем переменные
Dim LastColumn As Long
'Шаг 2: захват последнего использованного номера столбца
LastColumn = Cells(5, Columns.Count).End(xlToLeft).Column
'шаг 3: выбираем следующий пустой столбец
Cells(5, LastColumn).Offset(0, 1).Select
End Sub

Как этот код работает

  1. Сначала мы объявляем переменную Long Integer под названием LastColumn —  держатель номера столбца последнего используемого столбца.
  2. На шаге 2 мы фиксируем последний используемый столбец, начиная с самого последнего столбца в листе и используя свойство End, чтобы перейти к первой непустой колонке
    (эквивалент перейти к ячейке XFD5, нажав Ctrl + Shift + стрелка влево на клавиатуре).
  3. На этом этапе мы используем свойство Offset для перемещения на одну колонку и выбираем первый пустой столбец в строке 5.

Как использовать

Вы можете реализовать эти макросы, вставив их в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

1 / 1 / 0

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

Сообщений: 28

1

Как найти пустую ячейку в известном диапазоне

29.03.2016, 15:58. Показов 9864. Ответов 5


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

Здравствуйте!

Имеется диапазон с данными, допустим С3-С100.

В этом диапазоне возможны пропуски(пустые ячейки). Хотелось бы, чтобы становилась активной эта самая пустая ячейка причем, если их несколько, то ближайшая к началу диапазона.

Если же пропусков нет, то активной становится ячейка С101.



0



323 / 49 / 28

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

Сообщений: 217

29.03.2016, 16:33

2

Используйте для этого функцию IsEmpty() — например IsEmpty(Cells(1,1)). Если ячейка пуста — функция вернет True. Идите перебором по всем ячейкам начиная от первой и вплоть до первой пустой, а затем выходите из цикла.



1



Sasha_Smirnov

5561 / 1367 / 150

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

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

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

29.03.2016, 16:38

3

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub FirstEmptyCell() 'активирует 1-ю пустую ячейку в выделении (Selection)
Dim cell As Variant
    
With Selection
        For Each cell In .Cells
            If IsEmpty(cell) Then cell.Activate: cell.Select: Exit For
        Next
End With
 
End Sub

Цитата
Сообщение от nadine81
Посмотреть сообщение

Если же пропусков нет, то активной становится ячейка С101.

nadine81, полчаса бился с пустой, а C101 оставлю вам.

По идее, это

[c101].Select, заменив у меня в коде Exit For на Exit Sub.



0



pashulka

4131 / 2235 / 940

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

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

29.03.2016, 19:35

4

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Альтернативный вариант :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Test()
    Dim iSource As Range, iCell As Range
    Set iSource = Range("C3:C100")
    Set iCell = iSource.Find("", iSource(iSource.Count), xlFormulas)
    
    If Not iCell Is Nothing Then
       iCell.Activate
    Else
       Range("C101").Activate
    End If
End Sub



0



Казанский

15136 / 6410 / 1730

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

Сообщений: 9,999

29.03.2016, 21:29

5

nadine81, или так

Visual Basic
1
2
3
4
5
Sub dd()
  Range("C101").Activate
  On Error Resume Next
  Range("C3:C100").SpecialCells(xlCellTypeBlanks)(1).Activate
End Sub



0



1 / 1 / 0

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

Сообщений: 28

30.03.2016, 09:49

 [ТС]

6

Спасибо большое всем.
Все варианты работают)



1



Понравилась статья? Поделить с друзьями:
  • Поиск решения двоичное ограничение excel
  • Поиск пробелов в word
  • Поиск решения в табличном процессоре excel
  • Поиск пробелов в excel формула
  • Поиск решения в microsoft office excel 2007