Страницы: 1 2 След.
RSS
Поиск последней заполненной ячейки VBA
 
Всем привет. Много тем просмотрел, но пока не могу сообразить как сделать. Необходимо определить последнюю непустую ячейку (в примере J38). Пробовал по разному, но все время упираюсь в последний столбец. Или же как определить последний заполненный столбец на строке ниже (видимо другого диапазона). Извините, не знаю, как грамотно изложить. Пример прилагаю. Заранее благодарен.
 
Пример
 
Определить последнюю строку,
определить последнюю заполненную ячейку в этой строке
Код
With worksheets("Лист1")
    LastCelAddress =.Cells(.Cells(.Rows.Count,1).End(xlUp).Row, .Columns.count).End(xltoleft).address
end if
По вопросам из тем форума, личку не читаю.
 
Спасибо. Попробую
 
Еще раз спасибо. Все отлично работает.
 
в Вашем файле напишите в В99 lex_dj
какая последняя определилась?

на самом деле все сильно зависит от задачи, которую Вы решаете
только после того, как сможете описать задачу может быть получено ее решение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Вот здесь я описывал несколько вариантов определения последней ячейки: Как определить последнюю ячейку на листе через VBA?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, давно хотел спросить, что я делаю не так со способом 4, описанным в Вашей статье? Код взят с Вашего сайта. В файле данный метод вообще непонятно что определяет
Изменено: Sanja - 07.03.2019 17:47:30
Согласие есть продукт при полном непротивлении сторон
 
Привет!
Сермяжная практика
Скрытый текст
Изменено: Inexsu - 07.03.2019 18:26:33
Сравнение прайсов, таблиц - без настроек
 
давайте рассмотрим ситуацию
если на листе заполнено две ячейки А2 и XFD1
вопрос, какая последняя заполненная ячейка?
А2?
XFD1?
может  XFD2? (фактически-то она ПУСТАЯ, т.е. НЕ ЗАПОЛНЕННАЯ и очень странно когда пустая ячейка претендует на роль последней заполненной)
так какая?

ответ простой: пока не определено понятие "последняя заполненная ячейка" на роль последней заполненой в данном листе есть 3 претендента
а стоит только определиться у задачи тут же появиться 1 конкретный адрес
одна из основ программирования: это конкретность результата! результат работы программы это итог вычислений или сообщение об ошибке в случае если результат не может быть вычислен.
и когда вопрос стоит КАКАЯ ПОСЛЕДНЯЯ ЗАОПЛНЕННАЯ ответом должен быть ЕЕ АДРЕС, а не три на выбор
Изменено: Ігор Гончаренко - 07.03.2019 19:03:21
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Игорь,  Ну реально хватит уже.  Если конкретно названия темы, то полностью согласен, так как она не на 100% отражает то что конкретно хотел ТС. Если смотреть файл, то все там понятно и никаких висящих в воздухе ячеек не будет.
По вопросам из тем форума, личку не читаю.
 
Цитата
Ігор Гончаренко написал:
на роль последней заполненой в данном листе есть 3 претендента
одна: J38. Мой код её и находит- сначала ищет строку, затем столбец.
Сравнение прайсов, таблиц - без настроек
 
Цитата
БМВ написал:
Если смотреть файл, то все там понятно и никаких висящих в воздухе ячеек не будет.
отличная мысль
если смотреть в файл на на роль последней заполненной претендуют 3 ячейки:
J38
O19
и наконец O38
а какая из них последняя заполненая?

Миша, если последня заполненная J38, то почему правее ее еще масса заполненных ячеек?
может быть те ячейки войдут в диапазон A1:J38? или они вне его, они за рамками диапазона от первой ячейки листа до последней заполенной
почему на листе оказалась куча ячеек за пределами диапазона А1:ПоследняяЗаполненная?
обьясните мне
- может они не заполнены?
- или может последняя заполненная не последняя??? а есть более другая еще последнее?

и я здесь не о конкретных решениях, я здесь о конкретности формулировок и о том, что выполнение конкретной программы (макроса) предполагает получение конкретного результата или сообщение об ошибке, если результат не может быть вычислен
Изменено: Ігор Гончаренко - 07.03.2019 19:49:56
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Inexsu написал:
одна: J38. Мой код её и находит
почему за пределами диапазона ПерваяЯчейка:ПоследняяЗаполненная еще куча заполненых ячеек?
почему они проигнорированы кодом? может K19, L19, O19 - не заполнены?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, мы часто кидаемся в крайности, то требуем пример который на 100% отражает реальность, то просим оставить только то, что необходимо для решения задачи. В данном конкретном случае прослеживалось что нужно и результат по всей видимости ТС устроил.  Если говорить об общем случае, то без дополнительных вводных все равно, что брать квадратный корень из -2 , без упоминания о  мнимой части.
По вопросам из тем форума, личку не читаю.
 
вот, и я об этом же
пока нет условий задачи - решать нечего!
пока не определено понятие "последняя заполненная ячейка" - ее не возможно отыскать!
тут кто-то еще согласен с этим утверждением? или у меня серьезные сбои в логике?  
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
пока не определено понятие "последняя заполненная ячейка"
подсказка была в
Цитата
lex_dj написал:
упираюсь в последний столбец.
Я как, просматривающий таблицы сверху-слева-направо-влево-вниз-слева-направо ... легко определяю и первую и последнюю ячейку в своей языковой традиции.
И индекс ячеек тоже так делает. И For each.
Так что Вас двое (с логикой), а нас четверо :-).
Сравнение прайсов, таблиц - без настроек
 
Я согласен на 100% !!! Прежде чем о чем-то спорить, нужно договориться о предмете спора (сказал кто-то и очень давно, но очень верно сказал!)
 
Цитата
Inexsu написал:
Я как, просматривающий таблицы
и Вас совершенно не смущает тот факт, что за пределами диапазона 1ячейка : ПоследняяЗаполненнаяОпределеннаяВамиЯчейка находится еще куча заполненых ячеек? или они не заполнены?

и по поводу For Each
пишем а А1 1, в В1 2, в С1 3, в А2 4, в В2 5..., в С3 9
выполняем:
Код
Dim c
For Each c In [a1:c3]
  Debug.Print c
Next

а потом это
Код
Dim c
For Each c In [a1:c3].Value
  Debug.Print c
Next

смотрим в окно Immediate? что видно?
Изменено: Ігор Гончаренко - 09.03.2019 11:19:24
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Соратники, я прекрасно понял о чем Игорь,

Без доп. условий, какой адрес последней заполненной ячейки и как определить её? Другое дело что это вопрос не этой темы,
По вопросам из тем форума, личку не читаю.
 
Inexsu, доброго вечера!  Проблема не в условиях задачи в примере, а в названии темы, отсюда и спор и возник :)
 
Цитата
Ігор Гончаренко написал:
Dim c
Код не оформлен, файла нет. Вы ли это Ігор Гончаренко?
Сравнение прайсов, таблиц - без настроек
 
замечание принято))
код стал немного сложнее (но, надеюсь, разберетесь и результаты теперь на листе)
Код
Sub ForEach()
  Dim c&, r&, cl
  For c = 5 To 6
    r = 2
    For Each cl In IIf(c = 5, [a1:c3], [a1:c3].Value)
      Cells(r, c) = cl: r = r + 1
    Next
  Next
End Sub
Изменено: Ігор Гончаренко - 07.03.2019 21:58:33
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
код стал немного сложнее
Спасибо. Но я не оценил. For each в массиве ходит своей дорогой. Положите Вы диапазон в массив, затем массив положите в диапазон ... и что изменилось для нахождения "последней заполненной ячейки"?
Сравнение прайсов, таблиц - без настроек
 
Цитата
БМВ написал:
какой адрес последней заполненной ячейки
$C$4
Цитата
БМВ написал:
как определить её
смотрите код сообщения 9. Пояснения в сообщении 17.
Сравнение прайсов, таблиц - без настроек
 
Inexsu,  ну это Ваше видение, а что по этому поводу скажут японцы или израильтяне, которые привыкли к другому направлению письма?
Вы отвечаете на вопрос о  максимальном индексе столбца в последней заполненной строке.  Интересовать может иное, вплоть до обратного.
По мнению Excel, For each in Range даст тоже с4, а вот тот же for each in Array скажет что это D3.
Еще раз, будут граничные условия - будет однозначный ответ, а так  - гипотез может быть сколь угодно много.
По вопросам из тем форума, личку не читаю.
 
For Each - это я просто хотел сказать что он не самый надежный союзник в этом диспуте

у меня был еще другой вопрос:
отмечаем диапазон от ПервойЯчейки до ПоследнейЗаполненой
не смущает что за пределами этого диапазона осталось еще много заполненых ячеек, может та, ПоследняяЗаполненная, не такая уже и последняя если снаружи, за ней, еще куча заполненых?
и вообще все о чем я написал в этой теме: это не попытка анализировать или критикорвать чей-то код
это замечание о том что как можно искать последюю заполненную ячейку, если не определено что такое "последняя заполненная ячейка"

как в старом анекдоте:
- дорогая, представляешь все, что мы нашу долгую супружескую жизнь называли оргазмом, оказывается называется астма!
Изменено: Ігор Гончаренко - 07.03.2019 23:10:19
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
_Igor_61 написал:
Прежде чем о чем-то спорить, нужно договориться о предмете спора (с)
И какая же из них последняя заполненная? Так и не выяснили   :)
Цитата
БМВ написал:
будут граничные условия - будет однозначный ответ, а так  - гипотез может быть сколь угодно много
О чем и речь  :) Если бы еще и условия все  воспринимали однозначно... А пока мы только предполагаем - что правильно, а что нет :)
Прошу прощения у модераторов за флуд, не удержался, захотелось высказаться  
Изменено: _Igor_61 - 07.03.2019 23:18:35
 
Всем привет. Я видимо неправильно создал тему (название). Вообщем постараюсь объяснить. Есть прайс лист с картинками(часть файла прилагал выше). По нажатии кнопки вставить, происходит поиск картинок в нужной папке, сжатие найденных до определенного размера и вставка в ячейки (A1, F1, K1, A20, F20 и т.д.) циклом. Далее картинки подписываются пользователем (A19, B19, E19 и т.д.). Через некоторое время картинки в папке меняются и мне необходимо что бы по кнопке "Вставить", вставка началась со следующей ячейки после той, где есть подписи (для примера: подпись в ячейках F38, G38, J38, а картинки начинают вставляться в K20 и т.д.). Я надеюсь понятно объяснил. Если нет постараюсь дополнить. Я в VBA практически "0"(занимался Pascal-ем), поэтому стараюсь делать все по простому, как знаю.
 
Еще раз возвращаюсь к теме. В итоговом варианте использовал строку из примера Inexsu (col_Last = Диап_Столбец_Крайний( _
               ws.Rows(row_Last).EntireRow)), то, что мне необходимо изначально. С вариантом БМВ, тоже получилось, но на пару строк побольше. Всем огромное спасибо за помощь. Тему можно закрыть.
Страницы: 1 2 След.
Наверх