Страницы: 1 2 След.
RSS
Поиск первой свободной ячейки в стообце
 
Прошу помощи знающих.  
Задача: имеем таблицу данных, которая постоянно пополняется (добавляются строки)  
В таблице важным вяляется второй столбец; ячейки в нем заполнены в каждой строке.  
Необходим макрос, который будет устанавливать табличный курсор в первую свободную (пустую) ячейку внизу этого столбца (т.е. фактически в следующую заполняему строку таблицы).  
 
К сожалению, я пока "не очень" дружен с VBA =)  
Пробовал воспользоваться простой записью макроса и примитивной последовательностью: поиск крайней заполненной ячейки с помощью Ctrl+PageDown и шаг вниз с помощью стрелки. Но попытка провалились, т.к. выбор крайней заполненной ячейки он понимает и записывает, как надо, а вот действия клавиатурных стрелок запоминаются не как "перемещение вниз (вверх, влево, вправо)", а как выбор какой-то конкретной ячейки с конкретным адресом.  
 
Помогите, плз.
1.
 
[В1].End(xlDown).Offset(1, 0).Value = "Последняя свободная ячейка столбца В"
ICQ 414884755
 
В общем случае макрос может выглядеть так:  
Sub Макрос1()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count,2).End(xlUp).Row  
cells(iLastRow+1,2).Select  
End Sub
 
{quote}{login=vlanib}{date=13.05.2010 10:37}{thema=}{post}[В1].End(xlDown).Offset(1, 0).Value = "Последняя свободная ячейка столбца В"{/post}{/quote}
 
уточнение: мне необходима первая, а не крайняя свободная ячейка. Можно как-то переделать?
1.
 
{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}  
 
Спасибо огромное!  
Я совершенно не понял как это работает, но это РАБОТАЕТ! =)))
1.
 
А как переделать код:  
 
Sub Макрос1()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count,2).End(xlUp).Row  
cells(iLastRow+1,2).Select  
End Sub  
 
, что бы искалась первая пустая ячейка в том столбце, в котором находится активная ячейка?
 
Sub Макрос1()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count,activeCell.Column).End(xlUp).Row  
cells(iLastRow+1,activeCell.Column).Select  
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо!  
Один вопрос. Если в столбце нет заполненых ячеек, то находится ячейка во второй строке...  
Почему и как сделать правильно (в первой)?
 
тут же возник попутный вопрос:  
в указаном столбце постоянно добавляются значения; это числа (что-то типа порядкового номера строки).  
Как в тоу самую первую пустую ячейку подставить максимальное число этого столбца? А если быть точнее - "максимальное плюс один"
1.
 
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
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо.
 
{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  
 
Все применено к первому столбцу
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо! =)  
кой-чего подправил и всё работает =)))
 
А как можно такое провернуть:  
Номера строк у меня добавляются автоматом. При этом так же автоматически создаётся копия листа-шаблона.  
Надо теперь присвоить имя новому (только что созданому) листу, равное новому номеру строки.  
Возможно ли такое?
 
Какое отношение вопрос имеет к данной теме? Создавайте тему по правилам и получите ответ.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
А как прописать, что бы просматривался только диапазон P4:P16 , т.к. после этого идут дальше заполненные ячейки.  
   Dim iLastRow As Long  
   iLastRow = Cells(Rows.Count, 16).End(xlUp).Row  
   Cells(iLastRow + 1, 16).Select
 
Range("P16").End(xlUp).Select
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
{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 и ниже содержит данные.  
Спасибо.
 
Вот это  
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
 
Вернее так, с обработкой ошибки, когда всё будет заполнено:  
 
 
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
 
On Error Resume Next всёж оставьте :)
 
{quote}{login=Hugo}{date=25.12.2011 02:29}{thema=}{post}On Error Resume Next всёж оставьте :){/post}{/quote}  
 
Спасибо.
 
А не подскажите ли вы, мне нужно нечто похожее, как выбирать каждую ячейку первого столбца, пока не наткнешься на пустую, естественно после выбора будет какое-либо действие, и это вроде как должно выполняться через цикл, если я правильно понимаю... помогите пожалуйста
 
floove, Вы демонстрируете недюжинную сообразительность. Тема называется "Поиск первой свободной ячейки в стообце". Все ответы посвящены этому. И тут появляетесь Вы и задаете вопрос: "А как найти первую свободную ячейку в столбце?". Браво!
Я сам - дурнее всякого примера! ...
 
Сергей, мне кажется, что ты ошибаешься - тут нужен цикл по занятым до первой свободной.
Страницы: 1 2 След.
Наверх