Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Выбор последней заполненной ячейки в диапазоне.
 
Здравствуй, Форум.

Код
        Range("A1:A3").Select
        Selection.End(xlToRight).Select

отлично справляется с поиском последней заполненной в диапазоне...если к этому диапазону не примыкают заполненные ячейки. Иначе, он бесцеремонно нарушает границы указанного диапазона. По сути, он ищет заполненную ячейку перед пустой в строке.
Есть ли способ призвать данный код к уважению границ диапазона или нужно выбрать другой метод поиска?
В идеале же хотелось бы иметь код, который ищет последнюю заполненную ячейку в диапазоне A1:B3, начиная поиск со строки B.
 
End признает только границы листа
вы взяли не тот инструмент
это все равно если вы будучи стоматологом попытались бы отбойным молотком снять зубной камень у пациента
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, отбойный молоток я получил из рук товарища Макрокодера. Да и не стоматолог я, а камни снимать приходится. Подскажите, какая Фортуна иль Перфоратор тут необходимы?
 
Цитата
Scyth написал:
начиная поиск со строки B
это как?
По вопросам из тем форума, личку не читаю.
 
А так попробуйте
Код
Dim iLastRow As Long
  iLastRow = Range("A1:B3").Find("*", [A1], SearchDirection:=xlPrevious).Offset(1, 0).Row
 
или попробуйте описать условия задачи, которую решаете
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, макросом выставляется оценка, а вот отменить ее не хватает знаний.
Изменено: Scyth - 15 дек 2019 17:16:41
 
Спасибо, Kuzmich, но у меня с вашим кодом ни чего не происходит.  
 
Цитата
а вот отменить ее не хватает знаний.
По какому событию предполагается отмена?
 
Событие? Ошибка, человеческий фактор – не на ту кнопку макроса нажали при вводе оценки. Нужна кнопка отмены последней оценки.
 
Цитата
не на ту кнопку макроса нажали при вводе оценки
По-моему у вас только одна кнопка для ввода оценки
Если закомментировать строку в макросе
Код
ActiveCell.FormulaR1C1 = "1"
    'Range("C10").Select

то активной будет та ячейка, в которую была введена оценка
и если она неправильная, то нажать  кнопку Delete
Изменено: Kuzmich - 15 дек 2019 18:06:12
 
 Не хотел перегружать лист. Вообще, оценок 4, плюс "предупреждение" и это в двух экземплярах (для двоих конкурентов), а еще набор оценок качества...
Изменено: Scyth - 15 дек 2019 21:12:44
 
Похоже, что нашел подходящее, но не знаю, как указать нужный мне диапазон C9:J10

Поиск последней непустой ячейки диапазона

Код
Function dhLastUsedCell(rgRange As Range) As **** 
   Dim lngCell As ****
     ' Пойдем по диапазону с конца (тогда первая попавшаяся _     заполненная ячейка и будет искомой)
    For lngCell = rgRange.Count To 1 Step -1
       If Not IsEmpty(rgRange(lngCell)) Then
          ' Нашли непустую ячейку
          dhLastUsedCell = lngCell
          Exit Function
       End If
    Next lngCell
    ' Непустую ячейку не нашли
    dhLastUsedCell = 0 
End Function 

 

Изменено: Scyth - 16 дек 2019 00:02:46
 
Scyth, код следует оформлять соответствующим тегом. Ищите такую кнопку (см. скрин) и исправьте своё сообщение.
Тег VBA.jpg (19.2 КБ)
 
Юрий М, исправил.
Не думал, что выбор заполненной столь сложное задание. С пустыми ячейками попроще...
 
сложное задание - понять что вам нужно, понять правила, по которым находится последняя заполненная ячейка
а если понятно как искать, то найти это как два байта отослать
Изменено: Ігор Гончаренко - 16 дек 2019 00:23:23
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
А вариант Кузьмича из #5?
 
Никак не заработало то, что в #5/
Я нашел код. который ищет последнюю окрашенную ячейку.
Если бы его дописать и поиск при отсутствии закрашенной в строке 2 переходил к поиску в строке 1, то задача была бы решена.
Код
Sub bb()

Dim n&, i&, r As Range

 n = 2 'номер строки

 Set r = Intersect(Rows(n), ActiveSheet.UsedRange)

 If Not r Is Nothing Then

 For i = r.Count To 1 Step -1

   If r.Cells(i).Interior.ColorIndex <> xlColorIndexNone Then Exit For

  Next

  If i > 0 Then

   r.Cells(i).Select

   MsgBox "выделена последняя окрашенная ячейка"
   Exit Sub

  End If

 End If

 MsgBox "окрашенных ячеек нет"

End Sub
Изменено: Scyth - 16 дек 2019 00:29:03
 
понимаете, задача "найти последнюю заполненную в диапазоне*"
Код
Function LastInRange(rg As Range) As Range
  Dim c&
  For c = rg.Count To 1 Step -1
    If Not IsEmpty(rg.Cells(c)) Then Set LastInRange = rg.Cells(c): Exit Function
  Next
End Function
существенно отличается от "отметить последнюю заполненную в строке"
Код
Sub bb()
  Dim n&, r As Range
  n = 2 'номер строки
  Set r = Intersect(Rows(n), ActiveSheet.UsedRange)
  If Not r Is Nothing Then
    For n = r.Count To 1 Step -1
      If Not IsEmpty(r.Cells(n)) Then r.Cells(n).Select: MsgBox "отмечена": exit sub
    Next
  End If
End Sub
Изменено: Ігор Гончаренко - 16 дек 2019 00:41:40
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Понимаю. Но если выполнять построчный поиск снизу вверх, то это будет похоже на работу с диапазоном, когда поиск осуществляется "с конца", как указано в комментарии к коду..

"Отменить" в моем случае – найти и удалить.
 
Цитата
Scyth написал:
как указать нужный мне диапазон C9:J10
Диапазон указать не проблема. Проблема в другом: какую ячейку считать последней заполненной в этом диапазоне - по строке или по столбцу?
Например, заполнены ячейки E10 и F9. - какая из них последняя и почему?
 
и даже "почему" не вопрос. в диапазоне А1:С1 заполнено:
1.
а а а
а а а
а а

2.
а а а
а а а
а

3.
а а а
а а
а а

4.
а а а
а а
а
Какая последняя заполненная ячейка в показанных случаях 1,2,3,4?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Блин, я не понимал в чем неточность моего вопроса.
По строкам. Сначала по нижней, а если она пуста то по верхней.
Screenshot_3.jpg (23.79 КБ)
 
удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Тоже ушл - нет ответа на вопросы.
 
Ну, вот же вам пример. Поставьте кнопкой оценку. Вот ее и нужно удалить другой кнопкой. Если во второй строке оценок нет. то будет удалятся последняя оценка в строке выше.
 
Цитата
Scyth написал:
Выбор последней заполненной ячейки в диапазоне

Цитата
Scyth написал:
код, который ищет последнюю заполненную ячейку в диапазоне

Цитата
Scyth написал:
По строкам. Сначала по нижней, а если она пуста то по верхней

Цитата
Scyth написал:
удалить другой кнопкой. Если во второй строке оценок нет. то будет удалятся последняя оценка в строке выше
??? :sceptic: ???

Что-то в этом роде ?
Код
Sub Plus_1()
    If Application.CountA(Range("C9:J10")) < Range("C9:J10").Cells.Count Then
        Range("C9:J10").Cells(Application.CountA(Range("C9:J10")) + 1).Value = "1"
    End If
End Sub

Sub Minus_1()
    If Application.CountA(Range("C9:J10")) = 0 Then Exit Sub
    Range("C9:J10").Cells(Application.CountA(Range("C9:J10"))).Value = ""
End Sub
 
Kuzmich, прошу прощения. Я не внимательно отнесся к вашему решению. Позже я его подрезал, дописал и все сработало.
Код
Dim iLastRow As Long
  iLastRow = Range("C9:J10").Find("*", [C9], SearchDirection:=xlPrevious).Activate
  Selection.ClearContents
Большое спасибо.
Так же спасибо всем, кто хотел мне помочь.
Страницы: 1
Читают тему (гостей: 1)
Наверх