Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Первая свободная ячейка в столбце снизу (VBA) - Страница 3 - Мир MS Excel

Старая форма входа
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Модератор форума: китин  
Мир MS Excel » Работа и общение » Мозговой штурм » Первая свободная ячейка в столбце снизу (VBA) (макросом в окне Immediate)
Первая свободная ячейка в столбце снизу (VBA)
Gustav Дата: Понедельник, 22.09.2014, 11:12 | Сообщение № 41
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2757
Репутация: 1139 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
давайте уже...

Даю свои самые короткие достижения:
[vba]
Код
Set c=[A65536].End(3):?"A"&c.Row+1+IsEmpty(c)  '45 символов
     
?"A"&[A65536].End(3).Row+1 '26 символов - без проверки на пустой столбец
[/vba]

Чуть позже покажу еще промежуточные результаты. На мой взгляд, там тоже кое-что есть любопытное. Пока же вот вам 3 вместо xlUp - улучшайте свои версии! :)

P.S. Вдогонку еще одна коротенькая конструкция на 26 для непустого столбца (в пустом будет ошибка) и при условии отсутствия ячеек, содержащих буквальную "звездочку":
[vba]
Код
?"A"&[A:A].Find("*").Row+1
[/vba]


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

Сообщение отредактировал Gustav - Понедельник, 22.09.2014, 11:18
 
Ответить
Сообщение
давайте уже...

Даю свои самые короткие достижения:
[vba]
Код
Set c=[A65536].End(3):?"A"&c.Row+1+IsEmpty(c)  '45 символов
     
?"A"&[A65536].End(3).Row+1 '26 символов - без проверки на пустой столбец
[/vba]

Чуть позже покажу еще промежуточные результаты. На мой взгляд, там тоже кое-что есть любопытное. Пока же вот вам 3 вместо xlUp - улучшайте свои версии! :)

P.S. Вдогонку еще одна коротенькая конструкция на 26 для непустого столбца (в пустом будет ошибка) и при условии отсутствия ячеек, содержащих буквальную "звездочку":
[vba]
Код
?"A"&[A:A].Find("*").Row+1
[/vba]

Автор - Gustav
Дата добавления - 22.09.2014 в 11:12
Rioran Дата: Понедельник, 22.09.2014, 11:24 | Сообщение № 42
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Саня, возвести число в степень для сжатия символов - классная идея =)

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

[vba]
Код
?"A"&[A65001].end(xlup).row+1
[/vba]


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеСаня, возвести число в степень для сжатия символов - классная идея =)

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

[vba]
Код
?"A"&[A65001].end(xlup).row+1
[/vba]

Автор - Rioran
Дата добавления - 22.09.2014 в 11:24
SM Дата: Понедельник, 22.09.2014, 11:24 | Сообщение № 43
Группа: Друзья
Ранг: Участник
Сообщений: 64
Репутация: 59 ±
Замечаний: 0% ±

2003
46: [vba]
Код
"A" & [A65536].End(xlUp).Row - [COUNTA(A:A)>0]
[/vba]
47 (с долларами): [vba]
Код
[A65536].End(xlUp)(1 - [COUNTA(A:A)>0]).Address
[/vba]


Excel изощрён, но не злонамерен
 
Ответить
Сообщение46: [vba]
Код
"A" & [A65536].End(xlUp).Row - [COUNTA(A:A)>0]
[/vba]
47 (с долларами): [vba]
Код
[A65536].End(xlUp)(1 - [COUNTA(A:A)>0]).Address
[/vba]

Автор - SM
Дата добавления - 22.09.2014 в 11:24
Rioran Дата: Понедельник, 22.09.2014, 11:31 | Сообщение № 44
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
[A65536].End(xlUp)(1 - [COUNTA(A:A)>0]).Address

SM, подскажи, что это за конструкция? Почему скобка прижавшись к скобке работает? Я привык к конструкции свойство(...).метод(...) и ты только что надломил мой шаблон =)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщение
[A65536].End(xlUp)(1 - [COUNTA(A:A)>0]).Address

SM, подскажи, что это за конструкция? Почему скобка прижавшись к скобке работает? Я привык к конструкции свойство(...).метод(...) и ты только что надломил мой шаблон =)

Автор - Rioran
Дата добавления - 22.09.2014 в 11:31
AndreTM Дата: Понедельник, 22.09.2014, 11:34 | Сообщение № 45
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Получается, минимальным будет вариант Сани:
[vba]
Код
?"A"&[A65002].End(3).Row-[COUNTA(A:A)>0] ' 40 знаков
[/vba]
Правда, недокументированность этой самой тройки... :)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеПолучается, минимальным будет вариант Сани:
[vba]
Код
?"A"&[A65002].End(3).Row-[COUNTA(A:A)>0] ' 40 знаков
[/vba]
Правда, недокументированность этой самой тройки... :)

Автор - AndreTM
Дата добавления - 22.09.2014 в 11:34
_Boroda_ Дата: Понедельник, 22.09.2014, 11:35 | Сообщение № 46
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Set c=[A65536].End(3):?"A"&c.Row+1+IsEmpty©

вот это порадовало.
можно немного еще откусить
[vba]
Код
Set c=[A:A].End(3):?"A"&c.Row+1+IsEmpty(c)
[/vba]
тогда прекрасную строку Сани
?"A"&[A65002].End(xlUp).Row-[COUNTA(A:A)>0]

можно переписать так
[vba]
Код
?"A"&[A:A].End(3).Row-[COUNTA(A:A)>0]
[/vba] - 37


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Set c=[A65536].End(3):?"A"&c.Row+1+IsEmpty©

вот это порадовало.
можно немного еще откусить
[vba]
Код
Set c=[A:A].End(3):?"A"&c.Row+1+IsEmpty(c)
[/vba]
тогда прекрасную строку Сани
?"A"&[A65002].End(xlUp).Row-[COUNTA(A:A)>0]

можно переписать так
[vba]
Код
?"A"&[A:A].End(3).Row-[COUNTA(A:A)>0]
[/vba] - 37

Автор - _Boroda_
Дата добавления - 22.09.2014 в 11:35
MCH Дата: Понедельник, 22.09.2014, 11:40 | Сообщение № 47
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

у меня так, но уже такие решения были:
[vba]
Код
set a=[a65536]:?"A"&a.end(3).row+1+isempty(a)
[/vba]
 
Ответить
Сообщениеу меня так, но уже такие решения были:
[vba]
Код
set a=[a65536]:?"A"&a.end(3).row+1+isempty(a)
[/vba]

Автор - MCH
Дата добавления - 22.09.2014 в 11:40
AndreTM Дата: Понедельник, 22.09.2014, 11:41 | Сообщение № 48
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
_Boroda_, [A:A].End не отрабатывает в 2003 :(


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение_Boroda_, [A:A].End не отрабатывает в 2003 :(

Автор - AndreTM
Дата добавления - 22.09.2014 в 11:41
SM Дата: Понедельник, 22.09.2014, 11:54 | Сообщение № 49
Группа: Друзья
Ранг: Участник
Сообщений: 64
Репутация: 59 ±
Замечаний: 0% ±

2003
SM, что это за конструкция? Почему скобка прижавшись к скобке работает?

Роман, это тоже, что и
[vba]
Код
[A65536].End(xlUp).Cells(1-[COUNTA(A:A)>0]).Address
[/vba]
или
[vba]
Код
[A65536].End(xlUp).Item(1-[COUNTA(A:A)>0]).Address
[/vba]
В ВБА - Item можно "умалчивать".


Excel изощрён, но не злонамерен
 
Ответить
Сообщение
SM, что это за конструкция? Почему скобка прижавшись к скобке работает?

Роман, это тоже, что и
[vba]
Код
[A65536].End(xlUp).Cells(1-[COUNTA(A:A)>0]).Address
[/vba]
или
[vba]
Код
[A65536].End(xlUp).Item(1-[COUNTA(A:A)>0]).Address
[/vba]
В ВБА - Item можно "умалчивать".

Автор - SM
Дата добавления - 22.09.2014 в 11:54
_Boroda_ Дата: Понедельник, 22.09.2014, 12:05 | Сообщение № 50
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
[A:A].End не отрабатывает в 2003

Оть ты ж, безобразие какое! Проверить-то я не мог - 2003-й только дома.


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

Оть ты ж, безобразие какое! Проверить-то я не мог - 2003-й только дома.

Автор - _Boroda_
Дата добавления - 22.09.2014 в 12:05
Gustav Дата: Понедельник, 22.09.2014, 12:26 | Сообщение № 51
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2757
Репутация: 1139 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Мой полный "путь самурая":
[vba]
Код
?Cells(2^16,1).End(3).Offset(Sgn(Application.CountA([A:A]))).Address  ' 68 символов
   
?Cells(2^16,1).End(3).Offset(Sgn(Parent.CountA([A:A]))).Address ' 63 символа
   
?IIf(Parent.CountA([A:A]),Cells(2^16,1).End(3)(2).Address,"A1") 'тоже 63
   
?"A"&Sgn(Parent.CountA([A:A]))*Cells(2^16,1).End(3).Row+1 '57 символов
   
r=Rows(4^8).End(3).Row:?"A"&r+1-(r=1)*IsEmpty([A1]) '51 символ
   
Set c=Rows(4^8).End(3):?c(2+IsEmpty(c)).Address '47 символов
   
Set c=[A65536].End(3):?c(2+IsEmpty(c)).Address '46 - наконец сообразил, что [A65536] короче Rows(4^8)
   
Set c=[A65536].End(3):?"A"&c.Row+1+IsEmpty(c) '45
[/vba]


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

Сообщение отредактировал Gustav - Понедельник, 22.09.2014, 12:27
 
Ответить
СообщениеМой полный "путь самурая":
[vba]
Код
?Cells(2^16,1).End(3).Offset(Sgn(Application.CountA([A:A]))).Address  ' 68 символов
   
?Cells(2^16,1).End(3).Offset(Sgn(Parent.CountA([A:A]))).Address ' 63 символа
   
?IIf(Parent.CountA([A:A]),Cells(2^16,1).End(3)(2).Address,"A1") 'тоже 63
   
?"A"&Sgn(Parent.CountA([A:A]))*Cells(2^16,1).End(3).Row+1 '57 символов
   
r=Rows(4^8).End(3).Row:?"A"&r+1-(r=1)*IsEmpty([A1]) '51 символ
   
Set c=Rows(4^8).End(3):?c(2+IsEmpty(c)).Address '47 символов
   
Set c=[A65536].End(3):?c(2+IsEmpty(c)).Address '46 - наконец сообразил, что [A65536] короче Rows(4^8)
   
Set c=[A65536].End(3):?"A"&c.Row+1+IsEmpty(c) '45
[/vba]

Автор - Gustav
Дата добавления - 22.09.2014 в 12:26
Gustav Дата: Понедельник, 22.09.2014, 12:32 | Сообщение № 52
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2757
Репутация: 1139 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Оть ты ж, безобразие какое! Проверить-то я не мог - 2003-й только дома.

Саша, вынужден тебя расстроить - нигде не отрабатывает так, как нам надо: End "двигает" только первую ячейку диапазона, поэтому [A:A].End(xlUp) всегда будет давать A1, а не последнюю заполненную.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Оть ты ж, безобразие какое! Проверить-то я не мог - 2003-й только дома.

Саша, вынужден тебя расстроить - нигде не отрабатывает так, как нам надо: End "двигает" только первую ячейку диапазона, поэтому [A:A].End(xlUp) всегда будет давать A1, а не последнюю заполненную.

Автор - Gustav
Дата добавления - 22.09.2014 в 12:32
Саня Дата: Понедельник, 22.09.2014, 12:36 | Сообщение № 53
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
_Boroda_, [A:A].End не отрабатывает в 2003

Оть ты ж, безобразие какое! Проверить-то я не мог - 2003-й только дома.


такая идея была, но у меня она не работает (XL 2010) - выдает A1, если столб пуст и A2 - в любом другом случае.
 
Ответить
Сообщение
_Boroda_, [A:A].End не отрабатывает в 2003

Оть ты ж, безобразие какое! Проверить-то я не мог - 2003-й только дома.


такая идея была, но у меня она не работает (XL 2010) - выдает A1, если столб пуст и A2 - в любом другом случае.

Автор - Саня
Дата добавления - 22.09.2014 в 12:36
Gustav Дата: Понедельник, 22.09.2014, 12:52 | Сообщение № 54
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2757
Репутация: 1139 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Правда, недокументированность этой самой тройки...

Исторический экскурс по поводу End(3). Аналогом Range.End во времена макроязыка Excel 4.0 была команда SELECT.END. Вот на нее хелп из "загашника":
Цитата

SELECT.END
Macro Sheets Only

Selects the cell at the edge of the range or the first cell of the next range in the direction specified. Equivalent to pressing CTRL+ARROW in Microsoft Excel for Windows or COMMAND+ARROW in Microsoft Excel for the Macintosh.

Syntax

SELECT.END(direction_num)

Direction_num is a number from 1 to 4 indicating the direction in which to move.

Direction_num Direction
1 Left (equivalent to CTRL+LEFT ARROW or COMMAND+LEFT ARROW)
2 Right (equivalent to CTRL+RIGHT ARROW or COMMAND+RIGHT ARROW)
3 Up (equivalent to CTRL+UP ARROW or COMMAND+UP ARROW)
4 Down (equivalent to CTRL+DOWN ARROW or COMMAND+DOWN ARROW)

Ныне эти константы не афишируются, но в недрах VBA незримо присутствуют для обратной совместимости.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Правда, недокументированность этой самой тройки...

Исторический экскурс по поводу End(3). Аналогом Range.End во времена макроязыка Excel 4.0 была команда SELECT.END. Вот на нее хелп из "загашника":
Цитата

SELECT.END
Macro Sheets Only

Selects the cell at the edge of the range or the first cell of the next range in the direction specified. Equivalent to pressing CTRL+ARROW in Microsoft Excel for Windows or COMMAND+ARROW in Microsoft Excel for the Macintosh.

Syntax

SELECT.END(direction_num)

Direction_num is a number from 1 to 4 indicating the direction in which to move.

Direction_num Direction
1 Left (equivalent to CTRL+LEFT ARROW or COMMAND+LEFT ARROW)
2 Right (equivalent to CTRL+RIGHT ARROW or COMMAND+RIGHT ARROW)
3 Up (equivalent to CTRL+UP ARROW or COMMAND+UP ARROW)
4 Down (equivalent to CTRL+DOWN ARROW or COMMAND+DOWN ARROW)

Ныне эти константы не афишируются, но в недрах VBA незримо присутствуют для обратной совместимости.

Автор - Gustav
Дата добавления - 22.09.2014 в 12:52
ikki Дата: Понедельник, 22.09.2014, 23:19 | Сообщение № 55
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
мой недобитый вариант после всех дополнений и уточнений был 58 символов
[vba]
Код
i=[a65001].end(xlup).row:?"a"&i+iif(i=1,1+isempty([a1]),1)
[/vba]

но закружился и забросил.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениемой недобитый вариант после всех дополнений и уточнений был 58 символов
[vba]
Код
i=[a65001].end(xlup).row:?"a"&i+iif(i=1,1+isempty([a1]),1)
[/vba]

но закружился и забросил.

Автор - ikki
Дата добавления - 22.09.2014 в 23:19
RAN Дата: Вторник, 23.09.2014, 15:00 | Сообщение № 56
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
И мой на 46
[vba]
Код
?"a"&[a65001].End(xlUp).Row-IsNull([a:a].Text)
[/vba]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Вторник, 23.09.2014, 15:01
 
Ответить
СообщениеИ мой на 46
[vba]
Код
?"a"&[a65001].End(xlUp).Row-IsNull([a:a].Text)
[/vba]

Автор - RAN
Дата добавления - 23.09.2014 в 15:00
SkyPro Дата: Суббота, 11.10.2014, 02:09 | Сообщение № 57
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Мой 36:
[vba]
Код
i=[A65002].End(3).Row:?"A"&i+1 mod i
[/vba]

Вроде как отрабатывает и при ошибках и при пустом столбце.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Суббота, 11.10.2014, 02:20
 
Ответить
СообщениеМой 36:
[vba]
Код
i=[A65002].End(3).Row:?"A"&i+1 mod i
[/vba]

Вроде как отрабатывает и при ошибках и при пустом столбце.

Автор - SkyPro
Дата добавления - 11.10.2014 в 02:09
AndreTM Дата: Суббота, 11.10.2014, 02:34 | Сообщение № 58
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
К сожалению, не работает в столбце с одной первой заполненной ячейкой :)

Но сила воли просто поражает - три недели думать над задачей hands
Хотя, наверное, ты просто не видел эту тему, когда её решали?..


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеК сожалению, не работает в столбце с одной первой заполненной ячейкой :)

Но сила воли просто поражает - три недели думать над задачей hands
Хотя, наверное, ты просто не видел эту тему, когда её решали?..

Автор - AndreTM
Дата добавления - 11.10.2014 в 02:34
SkyPro Дата: Суббота, 11.10.2014, 02:37 | Сообщение № 59
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Действительно =\

В тему зашел и прочитал час назад, но слив засчитан. <_<


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Суббота, 11.10.2014, 02:38
 
Ответить
СообщениеДействительно =\

В тему зашел и прочитал час назад, но слив засчитан. <_<

Автор - SkyPro
Дата добавления - 11.10.2014 в 02:37
Мир MS Excel » Работа и общение » Мозговой штурм » Первая свободная ячейка в столбце снизу (VBA) (макросом в окне Immediate)
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!