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

My sheet look like :
enter image description here

I have a function to get index of the LAST empty cell in column A:

NextRow = Range("A" & Rows.Count).End(xlUp).Row + 1

This function works to write on second array (Type2).

But now, i would like a function to get index of the FIRST empty cell in column A. So i went to this website: Select first empty cell and i tried to adapt code but it’s doesn’t work:

If Array= "Type1" Then
    Dim ws As Worksheet
    Set ws = ActiveSheet
    For Each cell In ws.Columns(1).Cells
       If IsEmpty(cell) = True Then NextRow = cell: Exit For 'ERROR 1004
    Next cell
End If
If Array= "Type2" Then 'It s works
    NextRow = Range("A" & Rows.Count).End(xlUp).Row + 1
End If

ActiveSheet.Range("A" & NextRow) = "TEST"

Could you help me to adapt my code to have NextRow = IndexOf FIRST empty cell in A ?

Zoe stands with Ukraine's user avatar

asked Oct 28, 2016 at 9:13

Ferfa's user avatar

You could just use the same method you did to get the last one.

NextRow = Range("A1").End(xlDown).Row + 1

answered Oct 28, 2016 at 11:22

Liss's user avatar

LissLiss

4413 silver badges8 bronze badges

1

I do this and it’ works:

If Array= "Type1" Then
       Dim ws As Worksheet
            Set ws = ActiveSheet
            For Each cell In ws.Columns(1).Cells
               If IsEmpty(cell) = True Then
                    NextRow = cell.Row
                    Exit For
                    MsgBox NextRow
                End If
            Next cell
    End If
    If Array= "Type2" Then 'It s works
        NextRow = Range("A" & Rows.Count).End(xlUp).Row + 1
    End If

    ActiveSheet.Range("A" & NextRow) = "TEST"

Vasily's user avatar

Vasily

5,7073 gold badges19 silver badges34 bronze badges

answered Oct 28, 2016 at 9:58

Ferfa's user avatar

FerfaFerfa

2112 gold badges4 silver badges16 bronze badges

You should look bottom up for this.

And Find is better than xlUp.

Sub FindBlank()
    Dim ws As Worksheet
    Dim rng1 As Range
    Set ws = ActiveSheet
    Set rng1 = ws.Columns(1).Find("*", ws.[a1], xlFormulas, , xlByColumns, xlPrevious)
    If Not rng1 Is Nothing Then
        MsgBox "Last used cell is " & rng1.Address(0, 0)
    Else
        MsgBox ws.Name & " row1 is completely empty", vbCritical
    End If
End Sub

answered Oct 31, 2016 at 8:02

brettdj's user avatar

brettdjbrettdj

54.6k16 gold badges113 silver badges176 bronze badges

I took a similar approach to some of the answers, but with the goal of repeatedly looking down the column until I could guarantee that there was no more populated cells below.

I turned this into a small function that I put in a standard module:-

Public Function getFirstBlankRowNumberOnSheet(sht As Worksheet, Optional startingRef As String = "A1") As Long 'may get more than 32767 rows in a spreadsheet (but probably not!)
  Dim celTop As Range
  Dim celBottom As Range
  On Error Resume Next
  Set celTop = sht.Range(startingRef)

  Do
    Set celBottom = celTop.End(xlDown)
    Set celTop = celBottom.Offset(1) 'This will throw an error when the bottom cell is on the last available row (1048576)
  Loop Until IsEmpty(celBottom.value)

  getFirstBlankRowNumberOnSheet = celTop.Row

End Function

This will throw an error if there happens to be content in the row #1048576! The particulars of this are dependent on the Excel version I suppose in terms of maximum row cont allowed.

answered Jun 12, 2020 at 21:39

Darren Gill's user avatar

 

maverick

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

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

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

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

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

 

vlanib

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

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

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

 

Юрий М

Модератор

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

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

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

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

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

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

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

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

 

maverick

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

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

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

 

The_Prist

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

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

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

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

 

The_Prist

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

0 / 0 / 0

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

Сообщений: 53

1

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

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


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

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



0



11485 / 3773 / 677

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

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

17.02.2019, 14:57

2

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



0



0 / 0 / 0

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

Сообщений: 53

17.02.2019, 15:08

 [ТС]

3

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



0



Vlad999

3835 / 2261 / 753

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

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

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

11485 / 3773 / 677

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

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

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



Выбрать первую пустую ячейку после таблицы

mikaelw

Дата: Вторник, 16.09.2014, 16:24 |
Сообщение № 1

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

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

Сообщений: 153


Репутация:

1

±

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


Excel 2010, 2013, 2016

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

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

Прилагаю файл.

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

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

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

 

Ответить

alex1248

Дата: Вторник, 16.09.2014, 16:57 |
Сообщение № 2

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

Ранг: Обитатель

Сообщений: 384


Репутация:

71

±

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


Excel 2007, 2010

mikaelw, наверное, так.
Только выбирается не первая пустая, а вторая, поскольку в первой в столбцах правее есть значения.


skype alex12481632
Qiwi +79276708519

 

Ответить

mikaelw

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

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

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

Сообщений: 153


Репутация:

1

±

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


Excel 2010, 2013, 2016

Воп

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

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

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

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

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

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

почему?

 

Ответить

alex1248

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

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

Ранг: Обитатель

Сообщений: 384


Репутация:

71

±

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


Excel 2007, 2010

mikaelw, попробуйте lLastRow рассчитывать таким образом:
[vba]

Код

lLastRow = Cells(Rows.Count, 1).End(xlUp).Row

[/vba]


skype alex12481632
Qiwi +79276708519

Сообщение отредактировал alex1248Вторник, 16.09.2014, 17:29

 

Ответить

mikaelw

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

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

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

Сообщений: 153


Репутация:

1

±

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


Excel 2010, 2013, 2016

lLastRow = Cells(Rows.Count, 1).End(xlUp).Row

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

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

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

почему?

 

Ответить

alex1248

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

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

Ранг: Обитатель

Сообщений: 384


Репутация:

71

±

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


Excel 2007, 2010

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

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

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


skype alex12481632
Qiwi +79276708519

Сообщение отредактировал alex1248Вторник, 16.09.2014, 17:47

 

Ответить

alex1248

Дата: Вторник, 16.09.2014, 17:52 |
Сообщение № 7

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

Ранг: Обитатель

Сообщений: 384


Репутация:

71

±

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


Excel 2007, 2010

Вот файл с макросом, 1-й лист обработан. Вроде, всё верно.


skype alex12481632
Qiwi +79276708519

 

Ответить

mikaelw

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

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

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

Сообщений: 153


Репутация:

1

±

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


Excel 2010, 2013, 2016

странно!

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

 

Ответить

mikaelw

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

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

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

Сообщений: 153


Репутация:

1

±

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


Excel 2010, 2013, 2016

Вот файл с макросом, 1-й лист обработан. Вроде, всё верно.
К сообщению приложен файл: 16092011622-112.xlsm(53Kb)

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

 

Ответить

alex1248

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

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

Ранг: Обитатель

Сообщений: 384


Репутация:

71

±

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


Excel 2007, 2010

странно!

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

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

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


skype alex12481632
Qiwi +79276708519

Сообщение отредактировал alex1248Вторник, 16.09.2014, 18:11

 

Ответить

Gustav

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

Группа: Друзья

Ранг: Старожил

Сообщений: 2432


Репутация:

991

±

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


начинал с Excel 4.0, видел 2.1

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

На заметку на будущее. Вместо:
[vba]

Код

Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)

[/vba]
с тем же эффектом, но гораздо прозрачнее:
[vba]

Код

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

[/vba]
или
[vba]

Код

Cells(Rows.Count, «A»).End(xlUp).Offset(1)

[/vba]


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал GustavВторник, 16.09.2014, 18:48

 

Ответить

_Boroda_

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

Группа: Модераторы

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

Сообщений: 16620


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

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

Дело в том, что Вы поудаляли перед этим несколько строк. До удаления сочетание Контрл Енд (это Ваш xlLastCell) выделяло Вам ячейку Т46. После удаления строк все равно Контрл Енд будет выдавать Вам Т46. До того момента, пока Вы не обновите информацию файла о самом себе. Например

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

А проще в коде перед строкой
lLastRow = …
написать строку
[vba][/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

mikaelw

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

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

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

Сообщений: 153


Репутация:

1

±

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


Excel 2010, 2013, 2016

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

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

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

 

Ответить

Alex_ST

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

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3179


Репутация:

604

±

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


2003

Для себя когда-то сделал шпаргалку с разными методами:
До сих пор иногда пользуюсь :)
(Прошу прощения, что не по примеру топик-стартера. У меня с работы собаки-сисадмины скачивание файлов с макросами запретили :( killed )



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

Сообщение отредактировал Alex_STСреда, 17.09.2014, 09:00

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Запиленные точки роста как исправить
  • Как найти товар икеа по артикулу
  • Как найти добротность катушки индуктивности
  • Как найти сообщество вацап
  • Как найти черного колдуна