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

Вход

Регистрация

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

 

= Мир MS Excel/Определить диапазон по дате - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Определить диапазон по дате (Макросы/Sub)
Определить диапазон по дате
charony Дата: Вторник, 30.06.2015, 17:04 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Здравствуйте, помогите Определить диапазон по дате
т.е если дата 04.03.2015 макрос должен вернуть диапазон D10:S17 на листе дата написана как 2015-03-04
если дата 06.03.2015 макрос должен вернуть диапазон D26:S29 на листе дата написана как 2015-03-06
К сообщению приложен файл: 8869489.xlsx (15.8 Kb)


Сообщение отредактировал charony - Вторник, 30.06.2015, 17:18
 
Ответить
СообщениеЗдравствуйте, помогите Определить диапазон по дате
т.е если дата 04.03.2015 макрос должен вернуть диапазон D10:S17 на листе дата написана как 2015-03-04
если дата 06.03.2015 макрос должен вернуть диапазон D26:S29 на листе дата написана как 2015-03-06

Автор - charony
Дата добавления - 30.06.2015 в 17:04
Kuzmich Дата: Вторник, 30.06.2015, 17:50 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
т.е если дата 04.03.2015

Откуда берутся эти даты?
 
Ответить
Сообщение
Цитата
т.е если дата 04.03.2015

Откуда берутся эти даты?

Автор - Kuzmich
Дата добавления - 30.06.2015 в 17:50
charony Дата: Вторник, 30.06.2015, 17:57 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
@Kuzmich
из другого макроса
 
Ответить
Сообщение@Kuzmich
из другого макроса

Автор - charony
Дата добавления - 30.06.2015 в 17:57
Kuzmich Дата: Вторник, 30.06.2015, 18:28 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
В каком формате поступает эта дата? Формат даты, текстовый или общий?
 
Ответить
СообщениеВ каком формате поступает эта дата? Формат даты, текстовый или общий?

Автор - Kuzmich
Дата добавления - 30.06.2015 в 18:28
nilem Дата: Вторник, 30.06.2015, 18:29 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
вот например как-то вот так:
[vba]
Код
Sub ertert()
Dim dt As Date, sDt As String, r As Range
dt = #3/6/2015#
sDt = Format$(dt, "yyyy-mm-dd")
On Error Resume Next: Err.Clear
With Sheets("Tabelle1").Range("D1").CurrentRegion
     .Parent.AutoFilterMode = False
     .AutoFilter 8, sDt
     Set r = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(12)
     .AutoFilter
     If Err Then MsgBox "Oops", 64: Exit Sub
End With
MsgBox r.Address
End Sub
[/vba]
только надо строку заголовков добавить, чтобы фильтр правильно работал


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениевот например как-то вот так:
[vba]
Код
Sub ertert()
Dim dt As Date, sDt As String, r As Range
dt = #3/6/2015#
sDt = Format$(dt, "yyyy-mm-dd")
On Error Resume Next: Err.Clear
With Sheets("Tabelle1").Range("D1").CurrentRegion
     .Parent.AutoFilterMode = False
     .AutoFilter 8, sDt
     Set r = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(12)
     .AutoFilter
     If Err Then MsgBox "Oops", 64: Exit Sub
End With
MsgBox r.Address
End Sub
[/vba]
только надо строку заголовков добавить, чтобы фильтр правильно работал

Автор - nilem
Дата добавления - 30.06.2015 в 18:29
charony Дата: Вторник, 30.06.2015, 18:47 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
В каком формате поступает эта дата? Формат даты, текстовый или общий?


As Date
 
Ответить
Сообщение
В каком формате поступает эта дата? Формат даты, текстовый или общий?


As Date

Автор - charony
Дата добавления - 30.06.2015 в 18:47
Kuzmich Дата: Вторник, 30.06.2015, 18:54 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Ну Nilem уже все написал
 
Ответить
СообщениеНу Nilem уже все написал

Автор - Kuzmich
Дата добавления - 30.06.2015 в 18:54
charony Дата: Вторник, 30.06.2015, 19:08 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
только надо строку заголовков добавить, чтобы фильтр правильно работал

поменял дату на 03.03.2015 показывает $D$2:$S$9 -- это не правильно

строку добавить нет возможности

и привязка должна быть именно к ячейкам даты, потому что они могут стоять в любом столбике
т.е дата 03.03.2015 --> находим соответствующие этой дате ячейки $К$1:$К$9 --->$К$1 - 7 = $D$1, $К$9 + 8 = $S$9 только как это реализовать?

в оригинальном листе даты заполнены из программы, т.е там не даты а только линки

а так на тест файле работает, но в тест файле значения занесены для примера, к сожелению нет возможности выложить оригинал файла
К сообщению приложен файл: 3455687.jpg (50.8 Kb)


Сообщение отредактировал charony - Вторник, 30.06.2015, 19:37
 
Ответить
Сообщение
только надо строку заголовков добавить, чтобы фильтр правильно работал

поменял дату на 03.03.2015 показывает $D$2:$S$9 -- это не правильно

строку добавить нет возможности

и привязка должна быть именно к ячейкам даты, потому что они могут стоять в любом столбике
т.е дата 03.03.2015 --> находим соответствующие этой дате ячейки $К$1:$К$9 --->$К$1 - 7 = $D$1, $К$9 + 8 = $S$9 только как это реализовать?

в оригинальном листе даты заполнены из программы, т.е там не даты а только линки

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

Автор - charony
Дата добавления - 30.06.2015 в 19:08
charony Дата: Вторник, 30.06.2015, 20:06 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
@nilem
это к сожелению не работает
фаил в прицепе
К сообщению приложен файл: test.xlsm (29.4 Kb)
 
Ответить
Сообщение@nilem
это к сожелению не работает
фаил в прицепе

Автор - charony
Дата добавления - 30.06.2015 в 20:06
nilem Дата: Вторник, 30.06.2015, 20:33 | Сообщение № 10
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
ну давайте пробовать вот так, например:
[vba]
Код
Sub ertert()
Dim sDt As String, r As Range, rng As Range, adr$
sDt = Format$(#3/3/2015#, "yyyy-mm-dd")
With Sheets("Tabelle2").Range("B1").CurrentRegion
      Set r = .Find(sDt, LookIn:=xlValues, lookat:=xlWhole)
      If Not r Is Nothing Then
          adr = r.Address
          Do
              If rng Is Nothing Then Set rng = r Else Set rng = Union(rng, r)
              Set r = .FindNext(r)
          Loop While r.Address <> adr
      End If
      MsgBox Intersect(rng.EntireRow, .Cells).Address
End With
End Sub
[/vba]

[p.s.]к сожалению[/p.s.]


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Вторник, 30.06.2015, 20:34
 
Ответить
Сообщениену давайте пробовать вот так, например:
[vba]
Код
Sub ertert()
Dim sDt As String, r As Range, rng As Range, adr$
sDt = Format$(#3/3/2015#, "yyyy-mm-dd")
With Sheets("Tabelle2").Range("B1").CurrentRegion
      Set r = .Find(sDt, LookIn:=xlValues, lookat:=xlWhole)
      If Not r Is Nothing Then
          adr = r.Address
          Do
              If rng Is Nothing Then Set rng = r Else Set rng = Union(rng, r)
              Set r = .FindNext(r)
          Loop While r.Address <> adr
      End If
      MsgBox Intersect(rng.EntireRow, .Cells).Address
End With
End Sub
[/vba]

[p.s.]к сожалению[/p.s.]

Автор - nilem
Дата добавления - 30.06.2015 в 20:33
charony Дата: Вторник, 30.06.2015, 22:37 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
@ nilem

нужно чтобы работало с Tabelle1

не зависимо от того сколько колонок слева две или больше

также вверху может быть две и более строк с текстом

посмотрите мыло


Сообщение отредактировал charony - Вторник, 30.06.2015, 23:01
 
Ответить
Сообщение@ nilem

нужно чтобы работало с Tabelle1

не зависимо от того сколько колонок слева две или больше

также вверху может быть две и более строк с текстом

посмотрите мыло

Автор - charony
Дата добавления - 30.06.2015 в 22:37
Kuzmich Дата: Вторник, 30.06.2015, 22:54 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
[vba]
Код
With Sheets("Tabelle1").Range("D1").CurrentRegion
[/vba]


Сообщение отредактировал Serge_007 - Среда, 01.07.2015, 10:06
 
Ответить
Сообщение[vba]
Код
With Sheets("Tabelle1").Range("D1").CurrentRegion
[/vba]

Автор - Kuzmich
Дата добавления - 30.06.2015 в 22:54
charony Дата: Вторник, 30.06.2015, 23:04 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
@Kuzmich

на тест файле , работает но не совсем корректно

попробуйте добавить 2-3 колонки слева , или сверху добавьте две строки с текстом

я добавил одну колонку слева и вверху добавил одну строку с текстом
работает не корректно первый адрес показывает не правильно А22:Т29, должно быть Е22:Т29

фаил в прицепе
К сообщению приложен файл: 3858742.xlsm (30.4 Kb)


Сообщение отредактировал charony - Вторник, 30.06.2015, 23:21
 
Ответить
Сообщение@Kuzmich

на тест файле , работает но не совсем корректно

попробуйте добавить 2-3 колонки слева , или сверху добавьте две строки с текстом

я добавил одну колонку слева и вверху добавил одну строку с текстом
работает не корректно первый адрес показывает не правильно А22:Т29, должно быть Е22:Т29

фаил в прицепе

Автор - charony
Дата добавления - 30.06.2015 в 23:04
Kuzmich Дата: Вторник, 30.06.2015, 23:38 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Ограничьте диапазон поиска
[vba]
Код
With Sheets("Tabelle1").Columns("E:T")
[/vba]
 
Ответить
СообщениеОграничьте диапазон поиска
[vba]
Код
With Sheets("Tabelle1").Columns("E:T")
[/vba]

Автор - Kuzmich
Дата добавления - 30.06.2015 в 23:38
AndreTM Дата: Вторник, 30.06.2015, 23:50 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
А не стоило бы задуматься над тем, зачем вообще нужно данное извращение?
Почему нужен именно диапазон? Для чего и где он используется впоследствии, именно как диапазон?
И да, в исходных данных даты всегда идут подряд, вместе (то есть диапазон уже отсортирован по полю с датами), или искомая дата все же может присуствовать в нескольких подддиапазонах строк?
Только не говорите мне, что всё это делается, чтобы "передать этот диапазон в УФ и раскрасить табличку" :)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеА не стоило бы задуматься над тем, зачем вообще нужно данное извращение?
Почему нужен именно диапазон? Для чего и где он используется впоследствии, именно как диапазон?
И да, в исходных данных даты всегда идут подряд, вместе (то есть диапазон уже отсортирован по полю с датами), или искомая дата все же может присуствовать в нескольких подддиапазонах строк?
Только не говорите мне, что всё это делается, чтобы "передать этот диапазон в УФ и раскрасить табличку" :)

Автор - AndreTM
Дата добавления - 30.06.2015 в 23:50
charony Дата: Среда, 01.07.2015, 00:04 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Ограничьте диапазон поиска


ограничить можно, но попробуйте после ограничения добавить еще две-три колонки слева,

если бы даты всегда были-бы в одном диапазоне, но это не так

может быть я не правильно думаю - нужно найти диапазон в котором находятся даты
в последнем файле для даты 2015-03-05 , этот диапазон будет L22:L29

а потом через offset L22 - 7=E22 ; L29 + 8 = T29 ; Range = E22:T29
 
Ответить
Сообщение
Ограничьте диапазон поиска


ограничить можно, но попробуйте после ограничения добавить еще две-три колонки слева,

если бы даты всегда были-бы в одном диапазоне, но это не так

может быть я не правильно думаю - нужно найти диапазон в котором находятся даты
в последнем файле для даты 2015-03-05 , этот диапазон будет L22:L29

а потом через offset L22 - 7=E22 ; L29 + 8 = T29 ; Range = E22:T29

Автор - charony
Дата добавления - 01.07.2015 в 00:04
charony Дата: Среда, 01.07.2015, 00:10 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
AndreTM, даты идут всегда подряд, всегда в одной колонке, но адрес может быть другим

сейчас я это делаю руками, времени нужно меньше минуты, маркировать диапазон-копировать-занести в другой лист дальше работает макрос и VBScript, но если файлов больше 800 %)

интересует именно диапазон, потом он обрабатывается в другом макросе


Сообщение отредактировал Serge_007 - Среда, 01.07.2015, 10:04
 
Ответить
СообщениеAndreTM, даты идут всегда подряд, всегда в одной колонке, но адрес может быть другим

сейчас я это делаю руками, времени нужно меньше минуты, маркировать диапазон-копировать-занести в другой лист дальше работает макрос и VBScript, но если файлов больше 800 %)

интересует именно диапазон, потом он обрабатывается в другом макросе

Автор - charony
Дата добавления - 01.07.2015 в 00:10
Kuzmich Дата: Среда, 01.07.2015, 01:25 | Сообщение № 18
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
[vba]
Код
Sub ertert_1()
Dim sDt As String, r As Range, rng As Range, adr$, adrL$, adrR$
sDt = Format$(#3/5/2015#, "yyyy-mm-dd")
With Sheets("Tabelle1").UsedRange
     Set r = .Find(sDt, LookIn:=xlValues, lookat:=xlWhole)
     If Not r Is Nothing Then
         adr = r.Address
         adrL$ = r.End(xlToLeft).Address
         Do
             adrR$ = r.End(xlToRight).Address
             Set r = .FindNext(r)
         Loop While r.Address <> adr
     End If
     MsgBox "Диапазон с датой " & sDt & " " & adrL$ & ":" & adrR$
End With
End Sub
[/vba]
 
Ответить
Сообщение[vba]
Код
Sub ertert_1()
Dim sDt As String, r As Range, rng As Range, adr$, adrL$, adrR$
sDt = Format$(#3/5/2015#, "yyyy-mm-dd")
With Sheets("Tabelle1").UsedRange
     Set r = .Find(sDt, LookIn:=xlValues, lookat:=xlWhole)
     If Not r Is Nothing Then
         adr = r.Address
         adrL$ = r.End(xlToLeft).Address
         Do
             adrR$ = r.End(xlToRight).Address
             Set r = .FindNext(r)
         Loop While r.Address <> adr
     End If
     MsgBox "Диапазон с датой " & sDt & " " & adrL$ & ":" & adrR$
End With
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 01.07.2015 в 01:25
charony Дата: Среда, 01.07.2015, 02:18 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
@Kuzmich

много спасибо, hands работает как нужно yes

чем обязан?
 
Ответить
Сообщение@Kuzmich

много спасибо, hands работает как нужно yes

чем обязан?

Автор - charony
Дата добавления - 01.07.2015 в 02:18
AndreTM Дата: Среда, 01.07.2015, 05:51 | Сообщение № 20
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Ага, ну раз данные уже по датам отсортированы, но требуется диапазон для последующей обработки - то имеет право на жизнь и такой вариант:
В функцию передаём ссылку на любую ячейку/диапазон на листе, где ищем данные (хоть в другой книге, естественно), и нужную дату, а получаем - необходимый диапазон как ссылку. Функция, кстати, может и выигрывать у предыдущей на больших таблицах (поскольку не производит лишнего перебора "за последним найденным - в начало - до первого найденного").
К сообщению приложен файл: 3858742-1.xlsm (32.2 Kb)


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Среда, 01.07.2015, 06:09
 
Ответить
СообщениеАга, ну раз данные уже по датам отсортированы, но требуется диапазон для последующей обработки - то имеет право на жизнь и такой вариант:
В функцию передаём ссылку на любую ячейку/диапазон на листе, где ищем данные (хоть в другой книге, естественно), и нужную дату, а получаем - необходимый диапазон как ссылку. Функция, кстати, может и выигрывать у предыдущей на больших таблицах (поскольку не производит лишнего перебора "за последним найденным - в начало - до первого найденного").

Автор - AndreTM
Дата добавления - 01.07.2015 в 05:51
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Определить диапазон по дате (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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