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

Вход

Регистрация

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

 

= Мир MS Excel/попасть на строку с сегодняшней датой - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
попасть на строку с сегодняшней датой
карандаш Дата: Воскресенье, 10.02.2013, 15:55 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
не нашел в форуме (скорее всего это было), наверное не смог правильно сформулировать запрос

суть в следующем

имеем длинную, растянутую "по времени" таблицу, где столбцы (или строки) имеют дату.

открывая файл или/и нажимая волшебную кнопку попадать на строку (столбец) с сегодняшней датой.

понятно дело, лучше, если сегодняшняя дата будет посередине, но это можно доработать, поставив в качестве аргумента СЕГОДНЯ-2

на всякий пожарный прилагаю файл с двумя листами для разного расположения дат

p.s. вопрос: а задача создания блока строк наподобии предыдущего блока - это вопрос для отдельной темы форума?
просто, если "растягивать" (размножать) боки строк/стобцов для каждого дня стразу на весь год - это займет очень много места, а данные таковы, что их не надо помнить
тогда можно было бы не искать сегодняшнюю дату (блок строк/столбцов) и просто удалять те строки/столбцы, которые старше текущего числа, например, на неделю (история на неделю может быть ещ' актуальна) и создавать (копировать) строки/столбцы (если их ещ' нет) для даты, например, на 5 дней вперед

просто конкретно моя задача может быть решена любым из способов
но для форума важна не конкретная задача, а конкретные методы (или подходы) к решению.
поэтому для форума это две разные темы
К сообщению приложен файл: today.xlsx (15.1 Kb)


Сообщение отредактировал карандаш - Воскресенье, 10.02.2013, 15:58
 
Ответить
Сообщениене нашел в форуме (скорее всего это было), наверное не смог правильно сформулировать запрос

суть в следующем

имеем длинную, растянутую "по времени" таблицу, где столбцы (или строки) имеют дату.

открывая файл или/и нажимая волшебную кнопку попадать на строку (столбец) с сегодняшней датой.

понятно дело, лучше, если сегодняшняя дата будет посередине, но это можно доработать, поставив в качестве аргумента СЕГОДНЯ-2

на всякий пожарный прилагаю файл с двумя листами для разного расположения дат

p.s. вопрос: а задача создания блока строк наподобии предыдущего блока - это вопрос для отдельной темы форума?
просто, если "растягивать" (размножать) боки строк/стобцов для каждого дня стразу на весь год - это займет очень много места, а данные таковы, что их не надо помнить
тогда можно было бы не искать сегодняшнюю дату (блок строк/столбцов) и просто удалять те строки/столбцы, которые старше текущего числа, например, на неделю (история на неделю может быть ещ' актуальна) и создавать (копировать) строки/столбцы (если их ещ' нет) для даты, например, на 5 дней вперед

просто конкретно моя задача может быть решена любым из способов
но для форума важна не конкретная задача, а конкретные методы (или подходы) к решению.
поэтому для форума это две разные темы

Автор - карандаш
Дата добавления - 10.02.2013 в 15:55
nilem Дата: Воскресенье, 10.02.2013, 17:22 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
возможно, что-то вроде этого:
[vba]
Код
Sub ert()
Dim r As Range
With Sheets("Лист1")
     Set r = Intersect(.UsedRange, .Columns(2)).Find(Date)
End With
If Not r Is Nothing Then Application.Goto r, 1
'With Sheets("Лист2")
'    Set r = Intersect(.UsedRange, .Rows(4)).Find(Date)
'End With
'If Not r Is Nothing Then Application.Goto r, 1
End Sub
[/vba]
странный момент: даты на листах возвращаются формулами, типа =GO4+1. Мне казалось, что Find не работает с формулами, но в этом примере все срабатывает. Причем только в том случае, если дата в формате "10.02.2013"; если такой формат - "10.02.13", то не находит. Почему так?


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениевозможно, что-то вроде этого:
[vba]
Код
Sub ert()
Dim r As Range
With Sheets("Лист1")
     Set r = Intersect(.UsedRange, .Columns(2)).Find(Date)
End With
If Not r Is Nothing Then Application.Goto r, 1
'With Sheets("Лист2")
'    Set r = Intersect(.UsedRange, .Rows(4)).Find(Date)
'End With
'If Not r Is Nothing Then Application.Goto r, 1
End Sub
[/vba]
странный момент: даты на листах возвращаются формулами, типа =GO4+1. Мне казалось, что Find не работает с формулами, но в этом примере все срабатывает. Причем только в том случае, если дата в формате "10.02.2013"; если такой формат - "10.02.13", то не находит. Почему так?

Автор - nilem
Дата добавления - 10.02.2013 в 17:22
AlexM Дата: Воскресенье, 10.02.2013, 17:54 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Еще вариант. Решение частично позаимствовал. Уже не помню где, давно было.
См. файл.
Чтобы заметить что происходит, откройте первый раз файл с отключенными макросами. Закройте и откройте с запуском макросов.
К сообщению приложен файл: today_new.xls (49.5 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Воскресенье, 10.02.2013, 19:30
 
Ответить
СообщениеЕще вариант. Решение частично позаимствовал. Уже не помню где, давно было.
См. файл.
Чтобы заметить что происходит, откройте первый раз файл с отключенными макросами. Закройте и откройте с запуском макросов.

Автор - AlexM
Дата добавления - 10.02.2013 в 17:54
AlexM Дата: Воскресенье, 10.02.2013, 19:53 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Application.Goto упростил решение
код в модуле Эта книга
[vba]
Код
Private Sub Workbook_Open()
With ActiveSheet
Set IRange = IIf(.Name = "Лист1", .Columns(2).Cells, .Rows(4).Cells)
For Each n In IRange
   If n.Value = Date Then Application.Goto n, 1
Next
End With
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Set IRange = IIf(Sh.Name = "Лист1", Sh.Columns(2).Cells, Sh.Rows(4).Cells)
For Each n In IRange
   If n.Value = Date Then Application.Goto n, 1
Next
End Sub
[/vba]
К сообщению приложен файл: today_new1.xls (41.5 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеApplication.Goto упростил решение
код в модуле Эта книга
[vba]
Код
Private Sub Workbook_Open()
With ActiveSheet
Set IRange = IIf(.Name = "Лист1", .Columns(2).Cells, .Rows(4).Cells)
For Each n In IRange
   If n.Value = Date Then Application.Goto n, 1
Next
End With
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Set IRange = IIf(Sh.Name = "Лист1", Sh.Columns(2).Cells, Sh.Rows(4).Cells)
For Each n In IRange
   If n.Value = Date Then Application.Goto n, 1
Next
End Sub
[/vba]

Автор - AlexM
Дата добавления - 10.02.2013 в 19:53
карандаш Дата: Воскресенье, 10.02.2013, 20:42 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
AlexM,
СУПЕР!!!!
за одним небольшим исключением - у меня мой файл не работает sad

но он 590 кб и не уменьшается
может можно куда-нибудь скинуть?

у вас присутствует имя листа
может в этом дело
я переименовал имя листа в "часы" - не помогло
потом перименовал в "Лист3" - тоже не помогло.
других имен у моего листа нет sad


Сообщение отредактировал карандаш - Воскресенье, 10.02.2013, 20:42
 
Ответить
СообщениеAlexM,
СУПЕР!!!!
за одним небольшим исключением - у меня мой файл не работает sad

но он 590 кб и не уменьшается
может можно куда-нибудь скинуть?

у вас присутствует имя листа
может в этом дело
я переименовал имя листа в "часы" - не помогло
потом перименовал в "Лист3" - тоже не помогло.
других имен у моего листа нет sad

Автор - карандаш
Дата добавления - 10.02.2013 в 20:42
AlexM Дата: Воскресенье, 10.02.2013, 20:44 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Цитата (карандаш)
590 кб и не уменьшается

А если сделать архив rar или zip



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение
Цитата (карандаш)
590 кб и не уменьшается

А если сделать архив rar или zip

Автор - AlexM
Дата добавления - 10.02.2013 в 20:44
карандаш Дата: Воскресенье, 10.02.2013, 22:02 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
сделал
получилось 360 кб
жду согласия на выкладывание
 
Ответить
Сообщениесделал
получилось 360 кб
жду согласия на выкладывание

Автор - карандаш
Дата добавления - 10.02.2013 в 22:02
AlexM Дата: Воскресенье, 10.02.2013, 22:22 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Я не возражаю, но нет технической возможности.
Оставьте лист с датами или листы, если даты на нескольких. Удалите все кроме столбца или колонки с датами.
Точно как делали раньше. Макрос не работает, только потому, что не те имена листов, даты расположены иначе, чем в примере.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеЯ не возражаю, но нет технической возможности.
Оставьте лист с датами или листы, если даты на нескольких. Удалите все кроме столбца или колонки с датами.
Точно как делали раньше. Макрос не работает, только потому, что не те имена листов, даты расположены иначе, чем в примере.

Автор - AlexM
Дата добавления - 10.02.2013 в 22:22
карандаш Дата: Воскресенье, 10.02.2013, 23:50 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
прикрепил
К сообщению приложен файл: 2013_.rar (98.8 Kb)
 
Ответить
Сообщениеприкрепил

Автор - карандаш
Дата добавления - 10.02.2013 в 23:50
AlexM Дата: Понедельник, 11.02.2013, 00:04 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
См. файл
К сообщению приложен файл: 2013__new.rar (51.0 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеСм. файл

Автор - AlexM
Дата добавления - 11.02.2013 в 00:04
карандаш Дата: Понедельник, 11.02.2013, 00:33 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
AlexM,
yahoo

безумно благодарен!!! )))
сам не смог найти как поставить смещение
(до столбцов дошел, первый раз не понял что они означают)

теперь вопрос о "центрировании" СЕГОДНЯ() отпал!!!

большое спасибо!!!

 
Ответить
СообщениеAlexM,
yahoo

безумно благодарен!!! )))
сам не смог найти как поставить смещение
(до столбцов дошел, первый раз не понял что они означают)

теперь вопрос о "центрировании" СЕГОДНЯ() отпал!!!

большое спасибо!!!


Автор - карандаш
Дата добавления - 11.02.2013 в 00:33
карандаш Дата: Вторник, 12.02.2013, 10:38 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
AlexM,
сделал на странице кнопку из рисунка
назначил макрос
[vba]
Код
For Each n In Sheets("часы").Columns(3).Cells
   If n.Value = Date Then Application.Goto n.Offset(-1, -2), 1
Next
[/vba]
чтобы не только при открытии книги попадать настроку с датой СЕГОДНЯ, но и по кнопке
но при нажатии попадаю на нужную строку быстро, но макрос не заканчивается и песочные часы еще некоторое время висят
возможно ждут когда цикл закончится
можно его прервать при попадании на нужную строку
или тут дело в чем-то другом? надо, скорее всего смотреть сам файл
файл 616 кб
куда его можно выложить (если это вообще надо)
 
Ответить
СообщениеAlexM,
сделал на странице кнопку из рисунка
назначил макрос
[vba]
Код
For Each n In Sheets("часы").Columns(3).Cells
   If n.Value = Date Then Application.Goto n.Offset(-1, -2), 1
Next
[/vba]
чтобы не только при открытии книги попадать настроку с датой СЕГОДНЯ, но и по кнопке
но при нажатии попадаю на нужную строку быстро, но макрос не заканчивается и песочные часы еще некоторое время висят
возможно ждут когда цикл закончится
можно его прервать при попадании на нужную строку
или тут дело в чем-то другом? надо, скорее всего смотреть сам файл
файл 616 кб
куда его можно выложить (если это вообще надо)

Автор - карандаш
Дата добавления - 12.02.2013 в 10:38
_Boroda_ Дата: Вторник, 12.02.2013, 10:45 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Так засуньте туда еще выход после выполнения условия
[vba]
Код
If n.Value = Date Then Application.Goto n.Offset(-1, -2), 1: Exit Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак засуньте туда еще выход после выполнения условия
[vba]
Код
If n.Value = Date Then Application.Goto n.Offset(-1, -2), 1: Exit Sub
[/vba]

Автор - _Boroda_
Дата добавления - 12.02.2013 в 10:45
AlexM Дата: Вторник, 12.02.2013, 11:42 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
После того как добавите : Exit Sub в два макроса можно один из них убрать. Отставляете тот что на кнопке, допустим у него имя Chasiki В "Эта книга" код правите так
[vba]
Код
Private Sub Workbook_Open()
Chasiki
End Sub
[/vba]

PS. А почему вы не реагируете на ТЕМУ "удаление/копирование столбцов для сохранения диапазона"?



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеПосле того как добавите : Exit Sub в два макроса можно один из них убрать. Отставляете тот что на кнопке, допустим у него имя Chasiki В "Эта книга" код правите так
[vba]
Код
Private Sub Workbook_Open()
Chasiki
End Sub
[/vba]

PS. А почему вы не реагируете на ТЕМУ "удаление/копирование столбцов для сохранения диапазона"?

Автор - AlexM
Дата добавления - 12.02.2013 в 11:42
карандаш Дата: Вторник, 12.02.2013, 14:04 | Сообщение № 15
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
Цитата (AlexM)
PS. А почему вы не реагируете на ТЕМУ "удаление/копирование столбцов для сохранения диапазона"?

Alekc, прошу прощения, просто днëм сильно перегружен и могу только урывками и то, только смотреть
ночью я полностью свободен (если прошлую ночь спал)))) и могу спокойно и методично пробовать и осваивать подсказки, которые мне выдали в помощь
там, к сожалению, засада с этим графиком отгрузок - потребуется совет в верности выбранного метода.
сегодня вечером обязательно отпишусь, потому как висит эта нерешëнная задача/проблема и меня постоянно спрашивают "доколе? когда уже наконец?!!!".
 
Ответить
Сообщение
Цитата (AlexM)
PS. А почему вы не реагируете на ТЕМУ "удаление/копирование столбцов для сохранения диапазона"?

Alekc, прошу прощения, просто днëм сильно перегружен и могу только урывками и то, только смотреть
ночью я полностью свободен (если прошлую ночь спал)))) и могу спокойно и методично пробовать и осваивать подсказки, которые мне выдали в помощь
там, к сожалению, засада с этим графиком отгрузок - потребуется совет в верности выбранного метода.
сегодня вечером обязательно отпишусь, потому как висит эта нерешëнная задача/проблема и меня постоянно спрашивают "доколе? когда уже наконец?!!!".

Автор - карандаш
Дата добавления - 12.02.2013 в 14:04
карандаш Дата: Вторник, 12.02.2013, 14:06 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
AlexM,

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

большое спасибо за оптимизацию
 
Ответить
СообщениеAlexM,

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

большое спасибо за оптимизацию

Автор - карандаш
Дата добавления - 12.02.2013 в 14:06
карандаш Дата: Вторник, 12.02.2013, 15:07 | Сообщение № 17
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
Цитата (AlexM)
После того как добавите : Exit Sub в два макроса можно один из них убрать


сделал. Работает на ура.

*** прим.
интересно, что перед оптимизацией с выходом из подпрогораммы макрос исполнялся мгновенно на экселе 2007 (или 2003)

после оптимизации стал работать мгновенно и в 2010
изменил время на компе на декабрь (т.е. самый конец таблицы из 2 с половиной тысяч строк - на одну дату приходится 7 строк)
макрос все равно сработал мгновенно

интересно, чем он занимался до вставки Exit Sub? куда он ещë ходил?


Сообщение отредактировал карандаш - Вторник, 12.02.2013, 15:11
 
Ответить
Сообщение
Цитата (AlexM)
После того как добавите : Exit Sub в два макроса можно один из них убрать


сделал. Работает на ура.

*** прим.
интересно, что перед оптимизацией с выходом из подпрогораммы макрос исполнялся мгновенно на экселе 2007 (или 2003)

после оптимизации стал работать мгновенно и в 2010
изменил время на компе на декабрь (т.е. самый конец таблицы из 2 с половиной тысяч строк - на одну дату приходится 7 строк)
макрос все равно сработал мгновенно

интересно, чем он занимался до вставки Exit Sub? куда он ещë ходил?

Автор - карандаш
Дата добавления - 12.02.2013 в 15:07
AlexM Дата: Вторник, 12.02.2013, 15:12 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Колонка длинная, вот по каждой ячейке и ходил



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеКолонка длинная, вот по каждой ячейке и ходил

Автор - AlexM
Дата добавления - 12.02.2013 в 15:12
_Boroda_ Дата: Вторник, 12.02.2013, 15:47 | Сообщение № 19
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
[vba]
Код
For Each n In Sheets("часы").Columns(3).Cells
[/vba]
Эта строка примерно по-русски:
пробежаться по всем ячейкам столбца 3 в листе "часы"
Причем, независимо от того, нашел он, что искал или не нашел, бегать будет от начала до конца. А Exit Sub обрывает эту беготню после первого истинного утверждения внутри If (в нормальной форме это выглядит так:
[vba]
Код
If n.Value = Date Then
Application.Goto n.Offset(-1, -2), 1
Exit Sub
End if
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение[vba]
Код
For Each n In Sheets("часы").Columns(3).Cells
[/vba]
Эта строка примерно по-русски:
пробежаться по всем ячейкам столбца 3 в листе "часы"
Причем, независимо от того, нашел он, что искал или не нашел, бегать будет от начала до конца. А Exit Sub обрывает эту беготню после первого истинного утверждения внутри If (в нормальной форме это выглядит так:
[vba]
Код
If n.Value = Date Then
Application.Goto n.Offset(-1, -2), 1
Exit Sub
End if
[/vba]

Автор - _Boroda_
Дата добавления - 12.02.2013 в 15:47
карандаш Дата: Вторник, 12.02.2013, 20:19 | Сообщение № 20
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
понял
ключевое слово ПО ВСЕМ ячейкам
не по всем заполненным датой

а всех там не 2500

в экселе 2003 всех строк намного меньше чем в 2010, потому и выполнялся быстрее

тема


Сообщение отредактировал карандаш - Вторник, 12.02.2013, 22:23
 
Ответить
Сообщениепонял
ключевое слово ПО ВСЕМ ячейкам
не по всем заполненным датой

а всех там не 2500

в экселе 2003 всех строк намного меньше чем в 2010, потому и выполнялся быстрее

тема

Автор - карандаш
Дата добавления - 12.02.2013 в 20:19
  • Страница 1 из 1
  • 1
Поиск:

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