Первая пустая ячейка в столбце excel vba

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

 

maverick

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

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

Прошу помощи знающих.  
Задача: имеем таблицу данных, которая постоянно пополняется (добавляются строки)  
В таблице важным вяляется второй столбец; ячейки в нем заполнены в каждой строке.  
Необходим макрос, который будет устанавливать табличный курсор в первую свободную (пустую) ячейку внизу этого столбца (т.е. фактически в следующую заполняему строку таблицы).  

  К сожалению, я пока «не очень» дружен с VBA =)  
Пробовал воспользоваться простой записью макроса и примитивной последовательностью: поиск крайней заполненной ячейки с помощью Ctrl+PageDown и шаг вниз с помощью стрелки. Но попытка провалились, т.к. выбор крайней заполненной ячейки он понимает и записывает, как надо, а вот действия клавиатурных стрелок запоминаются не как «перемещение вниз (вверх, влево, вправо)», а как выбор какой-то конкретной ячейки с конкретным адресом.  

  Помогите, плз.

 

vlanib

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

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

[В1].End(xlDown).Offset(1, 0).Value = «Последняя свободная ячейка столбца В»

 

Юрий М

Модератор

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

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

В общем случае макрос может выглядеть так:  
Sub Макрос1()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count,2).End(xlUp).Row  
cells(iLastRow+1,2).Select  
End Sub

 

maverick

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

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

{quote}{login=vlanib}{date=13.05.2010 10:37}{thema=}{post}[В1].End(xlDown).Offset(1, 0).Value = «Последняя свободная ячейка столбца В»{/post}{/quote}

  уточнение: мне необходима первая, а не крайняя свободная ячейка. Можно как-то переделать?

 

maverick

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

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

{quote}{login=Юрий М}{date=13.05.2010 10:41}{thema=}{post}В общем случае макрос может выглядеть так:  
Sub Макрос1()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count,2).End(xlUp).Row  
cells(iLastRow+1,2).Select  
End Sub{/post}{/quote}  

  Спасибо огромное!  
Я совершенно не понял как это работает, но это РАБОТАЕТ! =)))

 

Serge

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

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

А как переделать код:  

  Sub Макрос1()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count,2).End(xlUp).Row  
cells(iLastRow+1,2).Select  
End Sub  

  , что бы искалась первая пустая ячейка в том столбце, в котором находится активная ячейка?

 

The_Prist

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

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

Профессиональная разработка приложений для MS Office

Sub Макрос1()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count,activeCell.Column).End(xlUp).Row  
cells(iLastRow+1,activeCell.Column).Select  
End Sub

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Serge

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

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

Спасибо!  
Один вопрос. Если в столбце нет заполненых ячеек, то находится ячейка во второй строке…  
Почему и как сделать правильно (в первой)?

 

maverick

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

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

тут же возник попутный вопрос:  
в указаном столбце постоянно добавляются значения; это числа (что-то типа порядкового номера строки).  
Как в тоу самую первую пустую ячейку подставить максимальное число этого столбца? А если быть точнее — «максимальное плюс один»

 

The_Prist

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

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

Профессиональная разработка приложений для MS Office

Sub Макрос1()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count,activeCell.Column).End(xlUp).Row  
if iLastRow > 1 then iLastRow = iLastRow + 1  
cells(iLastRow,activeCell.Column).Select  
End Sub

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Serge

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

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

 

The_Prist

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

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

Профессиональная разработка приложений для MS Office

{quote}{login=maverick}{date=13.05.2010 11:16}{thema=}{post}тут же возник попутный вопрос:  
в указаном столбце постоянно добавляются значения; это числа (что-то типа порядкового номера строки).  
Как в тоу самую первую пустую ячейку подставить максимальное число этого столбца? А если быть точнее — «максимальное плюс один»{/post}{/quote}Максимальное и порядковый номер это разные вещи. Если нужно просто следующий порядковый номер в первую пустую ячейку внести:  

  Sub Макрос1()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count,1).End(xlUp).Row  
cells(iLastRow+1,1).Value =cells(iLastRow,1)+1  
End Sub  

  Если максимальное+1  
Sub Макрос1()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count,1).End(xlUp).Row  
cells(iLastRow+1,1).Value =application.Max(Range(«A1:A» & iLastRow))+1  
End Sub  

  Все применено к первому столбцу

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Спасибо! =)  
кой-чего подправил и всё работает =)))

 

А как можно такое провернуть:  
Номера строк у меня добавляются автоматом. При этом так же автоматически создаётся копия листа-шаблона.  
Надо теперь присвоить имя новому (только что созданому) листу, равное новому номеру строки.  
Возможно ли такое?

 

The_Prist

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

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

Профессиональная разработка приложений для MS Office

Какое отношение вопрос имеет к данной теме? Создавайте тему по правилам и получите ответ.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

А как прописать, что бы просматривался только диапазон P4:P16 , т.к. после этого идут дальше заполненные ячейки.  
   Dim iLastRow As Long  
   iLastRow = Cells(Rows.Count, 16).End(xlUp).Row  
   Cells(iLastRow + 1, 16).Select

 

The_Prist

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

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

Профессиональная разработка приложений для MS Office

Range(«P16»).End(xlUp).Select

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

KuklP

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

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

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

{quote}{login=The_Prist}{date=13.05.2010 11:16}{thema=}{post}Sub Макрос1()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count,activeCell.Column).End(xlUp).Row  
if iLastRow > 1 then iLastRow = iLastRow + 1  
cells(iLastRow,activeCell.Column).Select  
End Sub{/post}{/quote}А так:  
Sub www()  
   Columns(ActiveCell.Column).SpecialCells(4)(1).Select  
End Sub  
?

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

 

{quote}{login=The_Prist}{date=24.12.2011 01:20}{thema=}{post}Range(«P16»).End(xlUp).Select{/post}{/quote}  

     Dim iLastRow As Long  
   iLastRow = Range(«P16»).End(xlUp).Select  
   Cells(iLastRow + 1, 16).Select  

  Переносит на ячейку Р2, а необходимо с верху вниз с Р4 до Р16 в зависимости от заполнения ячеек. Т.к. ячейка Р19 и ниже содержит данные.  
Спасибо.

 

Hugo

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

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

Вот это  
iLastRow = Range(«P16»).End(xlUp).Select  
откуда взяли? :)  

  Можно так:  
Sub tt()  
Dim iLastRow As Long  
iLastRow = Range(«P16»).End(xlUp).Row  
Cells(iLastRow + 1, 16).Select  
End Sub  

  Это от P16 идём вверх.  
Можно наоборот, от P3 идём вниз по пустым:  

  Sub tt()  
Range(«P3:P16»).SpecialCells(xlCellTypeBlanks).Cells(1) = «Пишем_сюда»  
End Sub

 

Hugo

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

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

Вернее так, с обработкой ошибки, когда всё будет заполнено:  

    Sub tt()  
On Error Resume Next  
Err.Clear  
Range(«P4:P15»).SpecialCells(xlCellTypeBlanks).Cells(1) = «Пишем_сюда»  
If Err <> 0 Then MsgBox «Всё заполнено!!!»  
Err.Clear  
End Sub

 

{quote}{login=Hugo}{date=25.12.2011 01:58}{thema=}{post}Вернее так, с обработкой ошибки, когда всё будет заполнено:  

    Sub tt()  
On Error Resume Next  
Err.Clear  
Range(«P4:P15»).SpecialCells(xlCellTypeBlanks).Cells(1) = «Пишем_сюда»  
If Err <> 0 Then MsgBox «Всё заполнено!!!»  
Err.Clear  
End Sub{/post}{/quote}  

  Спасибо. Но нужно чтобы он выделял ячейки с Р4 до Р16, а в этом макросе он вставляет в свободную ячейку надпись Всё заполнено!!!. Т.к. данные в эти ячейка вставляются тоже через макрос а не в ручную.  
Спасибо.

 

{quote}{login=}{date=25.12.2011 02:06}{thema=Re: }{post}{quote}{login=Hugo}{date=25.12.2011 01:58}{thema=}{post}Вернее так, с обработкой ошибки, когда всё будет заполнено:  

    Sub tt()  
On Error Resume Next  
Err.Clear  
Range(«P4:P15»).SpecialCells(xlCellTypeBlanks).Cells(1) = «Пишем_сюда»  
If Err <> 0 Then MsgBox «Всё заполнено!!!»  
Err.Clear  
End Sub{/post}{/quote}  

  Спасибо. Но нужно чтобы он выделял ячейки с Р4 до Р16, а в этом макросе он вставляет в свободную ячейку надпись Всё заполнено!!!. Т.к. данные в эти ячейка вставляются тоже через макрос а не в ручную.  
Спасибо.{/post}{/quote}  

  Попробую так:  

  Sub tt()  
On Error Resume Next  
Err.Clear  
Range(«P4:P15»).SpecialCells(xlCellTypeBlanks).Cells(1).Select  
If Err <> 0 Then MsgBox «Всё заполнено!!!»  
Err.Clear  
End Sub

 

{quote}{login=}{date=25.12.2011 02:12}{thema=Re: Re: }{post}{quote}{login=}{date=25.12.2011 02:06}{thema=Re: }{post}{quote}{login=Hugo}{date=25.12.2011 01:58}{thema=}{post}Вернее так, с обработкой ошибки, когда всё будет заполнено:  

    Sub tt()  
On Error Resume Next  
Err.Clear  
Range(«P4:P15»).SpecialCells(xlCellTypeBlanks).Cells(1) = «Пишем_сюда»  
If Err <> 0 Then MsgBox «Всё заполнено!!!»  
Err.Clear  
End Sub{/post}{/quote}  

  Спасибо. Но нужно чтобы он выделял ячейки с Р4 до Р16, а в этом макросе он вставляет в свободную ячейку надпись Всё заполнено!!!. Т.к. данные в эти ячейка вставляются тоже через макрос а не в ручную.  
Спасибо.{/post}{/quote}  

  Попробую так:  

  Sub tt()  
On Error Resume Next  
Err.Clear  
Range(«P4:P15»).SpecialCells(xlCellTypeBlanks).Cells(1).Select  
If Err <> 0 Then MsgBox «Всё заполнено!!!»  
Err.Clear  
End Sub{/post}{/quote}  

    Опа. Заработало. Спасибо всем!!!

 

Убрал лишнее и оставил только это:  
 Range(«P4:P16»).SpecialCells(xlCellTypeBlanks).Cells(1).Select

 

Hugo

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

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

On Error Resume Next всёж оставьте :)

 

Станислав

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

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

{quote}{login=Hugo}{date=25.12.2011 02:29}{thema=}{post}On Error Resume Next всёж оставьте :){/post}{/quote}  

  Спасибо.

 

А не подскажите ли вы, мне нужно нечто похожее, как выбирать каждую ячейку первого столбца, пока не наткнешься на пустую, естественно после выбора будет какое-либо действие, и это вроде как должно выполняться через цикл, если я правильно понимаю… помогите пожалуйста

 

KuklP

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

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

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

floove, Вы демонстрируете недюжинную сообразительность. Тема называется «Поиск первой свободной ячейки в стообце». Все ответы посвящены этому. И тут появляетесь Вы и задаете вопрос: «А как найти первую свободную ячейку в столбце?». Браво!

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

 

Hugo

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

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

#30

28.12.2011 01:39:16

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

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

Найдите первую пустую ячейку в столбце с формулой
Найдите первую пустую ячейку в столбце с кодом 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)


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

Re:Я Дата: Понедельник, 27.06.2016, 10:43 | Сообщение № 7

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Макрос7()
Dim a, b, c, d, e, iLastrow As Long, i As Long, ii As Long

‘1. данные в два массива
With Лист2 ‘используется кодовое имя
iLastrow = .Cells(Rows.Count, 3).End(xlUp).Row
a = Range(.[c3], .Range(«C» & iLastrow)).Value
End With

With Лист3 ‘используется кодовое имя
iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
b = Range(.[k19], .Range(«C» & iLastrow)).Value
End With

‘2.пустой массив для результата
ReDim c(1 To UBound(a), 1 To 9)

‘3.в словарь уникальные и номер строки из массива
For i = 1 To UBound(b)
.Item(b(i, 1)) = i
Next

‘4.по словарю из массива b в массив c
For i = 1 To UBound(a)
If .exists(a(i, 1)) Then
c(i, 1) = b(.Item(a(i, 1)), 9)
End If
Next
End With

‘5. выгрузка всего массива
With Лист2 ‘используется кодовое имя
.[K3].Resize(UBound(c), 1) = c
.Activate
End With
End Sub

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Макрос7()
Dim a, b, c, d, e, iLastrow As Long, i As Long, ii As Long

‘1. данные в два массива
With Лист2 ‘используется кодовое имя
iLastrow = .Cells(Rows.Count, 3).End(xlUp).Row
a = Range(.[c3], .Range(«C» & iLastrow)).Value
End With

With Лист3 ‘используется кодовое имя
iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
b = Range(.[k19], .Range(«C» & iLastrow)).Value
End With

‘2.пустой массив для результата
ReDim c(1 To UBound(a), 1 To 9)

‘3.в словарь уникальные и номер строки из массива
For i = 1 To UBound(b)
.Item(b(i, 1)) = i
Next

‘4.по словарю из массива b в массив c
For i = 1 To UBound(a)
If .exists(a(i, 1)) Then
c(i, 1) = b(.Item(a(i, 1)), 9)
End If
Next
End With

‘5. выгрузка всего массива
With Лист2 ‘используется кодовое имя
.[K3].Resize(UBound(c), 1) = c
.Activate
End With
End Sub

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Макрос7()
Dim a, b, c, d, e, iLastrow As Long, i As Long, ii As Long

‘1. данные в два массива
With Лист2 ‘используется кодовое имя
iLastrow = .Cells(Rows.Count, 3).End(xlUp).Row
a = Range(.[c3], .Range(«C» & iLastrow)).Value
End With

With Лист3 ‘используется кодовое имя
iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
b = Range(.[k19], .Range(«C» & iLastrow)).Value
End With

‘2.пустой массив для результата
ReDim c(1 To UBound(a), 1 To 9)

‘3.в словарь уникальные и номер строки из массива
For i = 1 To UBound(b)
.Item(b(i, 1)) = i
Next

‘4.по словарю из массива b в массив c
For i = 1 To UBound(a)
If .exists(a(i, 1)) Then
c(i, 1) = b(.Item(a(i, 1)), 9)
End If
Next
End With

‘5. выгрузка всего массива
With Лист2 ‘используется кодовое имя
.[K3].Resize(UBound(c), 1) = c
.Activate
End With
End Sub

Источник

Vba excel найти первую пустую ячейку

Всем доброго времени суток!

Я пытаюсь изучить Ексель и VBA(надеюсь я пишу в правильный раздел).
«Удивительно, но подсел немного»

Задача:
После выполнения макроса нужно чтобы выбиралась ячейка в столбце А первая пустая(после таблицы).
Для определения ее использую переменную.
Думаю что проблема в этом.

З.Ы. посмотрите код может кто увидит еще косяки.

PPS. В файле таблицы исходники до выполнения макроса.

Всем доброго времени суток!

Я пытаюсь изучить Ексель и VBA(надеюсь я пишу в правильный раздел).
«Удивительно, но подсел немного»

Задача:
После выполнения макроса нужно чтобы выбиралась ячейка в столбце А первая пустая(после таблицы).
Для определения ее использую переменную.
Думаю что проблема в этом.

З.Ы. посмотрите код может кто увидит еще косяки.

PPS. В файле таблицы исходники до выполнения макроса. mikaelw

Сообщение Всем доброго времени суток!

Я пытаюсь изучить Ексель и VBA(надеюсь я пишу в правильный раздел).
«Удивительно, но подсел немного»

Задача:
После выполнения макроса нужно чтобы выбиралась ячейка в столбце А первая пустая(после таблицы).
Для определения ее использую переменную.
Думаю что проблема в этом.

З.Ы. посмотрите код может кто увидит еще косяки.

PPS. В файле таблицы исходники до выполнения макроса. Автор — mikaelw
Дата добавления — 16.09.2014 в 16:24

alex1248 Дата: Вторник, 16.09.2014, 16:57 | Сообщение № 2
skype alex12481632
Qiwi +79276708519

Ответить

mikaelw Дата: Вторник, 16.09.2014, 17:13 | Сообщение № 3

Спасибо, но нужно выбирать именно 1-ую, тк итоги подведенные не нужно
следовательно: Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select

И вопрос все-таки в начало

В модуле пишу отформатировать ячейки диапазона от B2 до конца таблицы(в данном случае B41)

ActiveSheet.Range(«B2:B» & lLastRow).WrapText = True

а по факту форматирует на диапазоне B2:B46..

Спасибо, но нужно выбирать именно 1-ую, тк итоги подведенные не нужно
следовательно: Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select

И вопрос все-таки в начало

В модуле пишу отформатировать ячейки диапазона от B2 до конца таблицы(в данном случае B41)

ActiveSheet.Range(«B2:B» & lLastRow).WrapText = True

а по факту форматирует на диапазоне B2:B46..

Спасибо, но нужно выбирать именно 1-ую, тк итоги подведенные не нужно
следовательно: Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select

И вопрос все-таки в начало

В модуле пишу отформатировать ячейки диапазона от B2 до конца таблицы(в данном случае B41)

ActiveSheet.Range(«B2:B» & lLastRow).WrapText = True

а по факту форматирует на диапазоне B2:B46..

почему? Автор — mikaelw
Дата добавления — 16.09.2014 в 17:13

alex1248 Дата: Вторник, 16.09.2014, 17:28 | Сообщение № 4

skype alex12481632
Qiwi +79276708519

mikaelw Дата: Вторник, 16.09.2014, 17:39 | Сообщение № 5

Теперь он концом таблицы считает конец листа.

На команду
MsgBox (lLastRow)

выдает значение 65536(обрабатываю другой файл xls)

Теперь он концом таблицы считает конец листа.

На команду
MsgBox (lLastRow)

выдает значение 65536(обрабатываю другой файл xls)

Теперь он концом таблицы считает конец листа.

На команду
MsgBox (lLastRow)

выдает значение 65536(обрабатываю другой файл xls)

почему? Автор — mikaelw
Дата добавления — 16.09.2014 в 17:39

alex1248 Дата: Вторник, 16.09.2014, 17:46 | Сообщение № 6

Странно, у меня в окне Immediate при активном Sheet1 (2) выдает
? Cells(Rows.Count, 1).End(xlUp).Row
41

Посмотрю еще не спеша.

P.S. И MsgBox lLastRow только что попробовал, тоже 41 выдало, правда, на следующем листе.

Странно, у меня в окне Immediate при активном Sheet1 (2) выдает
? Cells(Rows.Count, 1).End(xlUp).Row
41

Посмотрю еще не спеша.

P.S. И MsgBox lLastRow только что попробовал, тоже 41 выдало, правда, на следующем листе. alex1248

skype alex12481632
Qiwi +79276708519

Сообщение Странно, у меня в окне Immediate при активном Sheet1 (2) выдает
? Cells(Rows.Count, 1).End(xlUp).Row
41

Посмотрю еще не спеша.

P.S. И MsgBox lLastRow только что попробовал, тоже 41 выдало, правда, на следующем листе. Автор — alex1248
Дата добавления — 16.09.2014 в 17:46

alex1248 Дата: Вторник, 16.09.2014, 17:52 | Сообщение № 7
skype alex12481632
Qiwi +79276708519

Ответить

mikaelw Дата: Вторник, 16.09.2014, 18:03 | Сообщение № 8

Я MsgBox прямо в модуль после получения переменных добавил.
Новый файл

Я MsgBox прямо в модуль после получения переменных добавил.
Новый файл mikaelw

Я MsgBox прямо в модуль после получения переменных добавил.
Новый файл Автор — mikaelw
Дата добавления — 16.09.2014 в 18:03

mikaelw Дата: Вторник, 16.09.2014, 18:08 | Сообщение № 9

Перезапуск Екселя решил проблему!

Перезапуск Екселя решил проблему! mikaelw

Перезапуск Екселя решил проблему! Автор — mikaelw
Дата добавления — 16.09.2014 в 18:08

alex1248 Дата: Вторник, 16.09.2014, 18:10 | Сообщение № 10

Я MsgBox прямо в модуль после получения переменных добавил.

И что у вас получилось?
У меня вышли сообщения 41 и 1.

Ну всё, разобрались?

Я MsgBox прямо в модуль после получения переменных добавил.

И что у вас получилось?
У меня вышли сообщения 41 и 1.

Ну всё, разобрались? alex1248

skype alex12481632
Qiwi +79276708519

Я MsgBox прямо в модуль после получения переменных добавил.

И что у вас получилось?
У меня вышли сообщения 41 и 1.

Ну всё, разобрались? Автор — alex1248
Дата добавления — 16.09.2014 в 18:10

Gustav Дата: Вторник, 16.09.2014, 18:44 | Сообщение № 11
_Boroda_ Дата: Вторник, 16.09.2014, 18:53 | Сообщение № 12

Ответить

mikaelw Дата: Вторник, 16.09.2014, 21:19 | Сообщение № 13

alex1248, за решение проблемы.
Gustav, за совет, что удивительно сегодня Walkenbach а именно про это читал.

_Boroda_ за ответ на вопрос почему?

alex1248, за решение проблемы.
Gustav, за совет, что удивительно сегодня Walkenbach а именно про это читал.

_Boroda_ за ответ на вопрос почему? mikaelw

Сообщение Спасибо всем!

alex1248, за решение проблемы.
Gustav, за совет, что удивительно сегодня Walkenbach а именно про это читал.

_Boroda_ за ответ на вопрос почему? Автор — mikaelw
Дата добавления — 16.09.2014 в 21:19

Alex_ST Дата: Среда, 17.09.2014, 08:55 | Сообщение № 14

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
‘ http://msoffice.nm.ru/article/lastcell.htm — «Поиск последней заполненной ячейки»
Private Sub LAST_CELL() ‘ последняя ячейка используемого диапазона на листе
Dim sLastAddr$, lLastRow&, iLastCol%
‘With Sheets(«Лист1»)
With ActiveSheet
‘МЕТОД 1: правильно работает в большинстве случаев
‘игнорируются скрытые строки/столбцы (шириной/высотой, группировкой, фильтром …)
lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
‘lLastRow = .Cells(.Rows.Count, «A»).End(xlUp).Row
‘lLastRow = .Range(«A» & Rows.Count).End(xlUp).Row
iLastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
sLastAddr = .Cells(.Rows.Count, 1).End(xlUp).Address
‘sLastAddr = .Cells(.Rows.Count, «A»).End(xlUp).Address
‘Arr = Range(«A1:A» & Cells(Rows.Count, «C»).End(xlUp).Row).Value

lLastRow = .Cells(5, 2).End(xlDown).Row ‘ последняя заполненная ячейка в столбце В, начиная с 5-й строки

‘МЕТОД 2: МОЖЕТ СЧИТАТЬ НЕ ВЕРНО после удаления последней ячейки, _
а также может учесть пустую, но форматированную ячейку (заливка, границы, УФ, …)
‘правильно работает в только что созданном документе, _
в котором только добавляются данные в строки/столбцы
lLastRow = .Cells.SpecialCells(xlLastCell).Row
iLastCol = .Cells.SpecialCells(xlLastCell).Column
sLastAddr = .Cells.SpecialCells(xlLastCell).Address

‘МЕТОД 3: те же недостатки, что и у метода 2… Но т.к. есть обращение к UsedRange, то считает верно!
lLastRow = .UsedRange.Row + .UsedRange.Rows.Count — 1
iLastCol = .UsedRange.Column + .UsedRange.Columns.Count — 1

‘.
‘ Восстановить правильное положение последней ячейки можно, просто обратившись к UsedRange:
With .UsedRange: End With
‘или так:
lLastRow = .UsedRange.Cells.SpecialCells(xlLastCell).Row
iLastCol = .UsedRange.Cells.SpecialCells(xlLastCell).Column
sLastAddr = .UsedRange.Cells.SpecialCells(xlLastCell).Address

End With
End Sub

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
‘ http://msoffice.nm.ru/article/lastcell.htm — «Поиск последней заполненной ячейки»
Private Sub LAST_CELL() ‘ последняя ячейка используемого диапазона на листе
Dim sLastAddr$, lLastRow&, iLastCol%
‘With Sheets(«Лист1»)
With ActiveSheet
‘МЕТОД 1: правильно работает в большинстве случаев
‘игнорируются скрытые строки/столбцы (шириной/высотой, группировкой, фильтром …)
lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
‘lLastRow = .Cells(.Rows.Count, «A»).End(xlUp).Row
‘lLastRow = .Range(«A» & Rows.Count).End(xlUp).Row
iLastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
sLastAddr = .Cells(.Rows.Count, 1).End(xlUp).Address
‘sLastAddr = .Cells(.Rows.Count, «A»).End(xlUp).Address
‘Arr = Range(«A1:A» & Cells(Rows.Count, «C»).End(xlUp).Row).Value

lLastRow = .Cells(5, 2).End(xlDown).Row ‘ последняя заполненная ячейка в столбце В, начиная с 5-й строки

‘МЕТОД 2: МОЖЕТ СЧИТАТЬ НЕ ВЕРНО после удаления последней ячейки, _
а также может учесть пустую, но форматированную ячейку (заливка, границы, УФ, …)
‘правильно работает в только что созданном документе, _
в котором только добавляются данные в строки/столбцы
lLastRow = .Cells.SpecialCells(xlLastCell).Row
iLastCol = .Cells.SpecialCells(xlLastCell).Column
sLastAddr = .Cells.SpecialCells(xlLastCell).Address

‘МЕТОД 3: те же недостатки, что и у метода 2… Но т.к. есть обращение к UsedRange, то считает верно!
lLastRow = .UsedRange.Row + .UsedRange.Rows.Count — 1
iLastCol = .UsedRange.Column + .UsedRange.Columns.Count — 1

‘.
‘ Восстановить правильное положение последней ячейки можно, просто обратившись к UsedRange:
With .UsedRange: End With
‘или так:
lLastRow = .UsedRange.Cells.SpecialCells(xlLastCell).Row
iLastCol = .UsedRange.Cells.SpecialCells(xlLastCell).Column
sLastAddr = .UsedRange.Cells.SpecialCells(xlLastCell).Address

End With
End Sub


С уважением,
Алексей
MS Excel 2003 — the best.

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
‘ http://msoffice.nm.ru/article/lastcell.htm — «Поиск последней заполненной ячейки»
Private Sub LAST_CELL() ‘ последняя ячейка используемого диапазона на листе
Dim sLastAddr$, lLastRow&, iLastCol%
‘With Sheets(«Лист1»)
With ActiveSheet
‘МЕТОД 1: правильно работает в большинстве случаев
‘игнорируются скрытые строки/столбцы (шириной/высотой, группировкой, фильтром …)
lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
‘lLastRow = .Cells(.Rows.Count, «A»).End(xlUp).Row
‘lLastRow = .Range(«A» & Rows.Count).End(xlUp).Row
iLastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
sLastAddr = .Cells(.Rows.Count, 1).End(xlUp).Address
‘sLastAddr = .Cells(.Rows.Count, «A»).End(xlUp).Address
‘Arr = Range(«A1:A» & Cells(Rows.Count, «C»).End(xlUp).Row).Value

lLastRow = .Cells(5, 2).End(xlDown).Row ‘ последняя заполненная ячейка в столбце В, начиная с 5-й строки

Источник

Adblock
detector

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

Автор SEA72, 13.01.2015, 09:26

« назад — далее »

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

использую следующую команду

Sheets("Лист1").Select
    [C1:C65536].SpecialCells(xlCellTypeBlanks).Cells(1, 1).Select

но данная команда работает только до колонки «С»
при замене на колонку «D» выходит ошибка run-time error ‘1004’

подскажите что не правильно
За ранее


Dim lRws As Long
lRws = .Cells(.Rows.Count, 4).End(xlUp).Row + 1

Последняя заполненная ячейка  в столбце 4. Следующая (+1) — пустая.


Добрый день
подставил ваш код, выдаёт ошибку
invalid or unqualified reference


Может, точки убрать

Dim lRws As Long
lRws = Cells(Rows.Count, 4).End(xlUp).Row + 1

Если не то, в файле покажите.


Ошибка ушла , а как сделать чтобы пустая ячейка становилась активной?

не нужно цитировать ВСЕ! Да и вообще в данном случае не нужно [МОДЕРАТОР]



или так

Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Select
что будет дальше с активированной ячейкой? может вам активировать ячейку и не нужно вовсе.



Есть ещё один вариант (взято из книги и чуть переделано под ваши нужды)

Sub выд_пуст_яч()
LastRow = Cells(Rows.Count, 1).Row
For i = 1 To LastRow
    If IsEmpty(Cells(i, 1)) Then
        Cells(i, 1).Select
        Exit For
    End If
Next i
End Sub

Оформляйте код (кнопка «#» на панели) [МОДЕРАТОР]


  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

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

Like this post? Please share to your friends:
  • Пвр иу скачать word
  • Первая прописная остальные строчные excel
  • Пвр в excel что это
  • Первая прописная буква текста excel
  • Пбнгп последняя редакция скачать word бесплатно