Макросы в excel поиск даты

 

vendigo

Пользователь

Сообщений: 48
Регистрация: 22.05.2018

#1

14.06.2018 13:12:54

Здравствуйте! нужен макрос для поиска сегодняшней даты, в определенном листе, который срабатывал при запуске книги, и удалял содержимое ячеек, которые находятся выше ячейки с датой. Собственно загвозка в том что не знаю как написать в VBA =сегодня()

Код
Range("a1", Cells.Find("????").Offset(-1, 0)).EntireRow.Delete

Если есть другой путь решения, подскажите.  

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#2

14.06.2018 13:15:41

Цитата
не знаю как написать в VBA =сегодня()

Date

 

vendigo

Пользователь

Сообщений: 48
Регистрация: 22.05.2018

#3

14.06.2018 13:17:44

Код
Range("a1", Cells.Find("Date").Offset(-1, 0)).EntireRow.Delete

Так? Тогда вопрос в каком формате должны быть даты в листе? пробовал не ищет…

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Наверное, в формате, который в Вашем файле-примере… Или из воздуха придумывать?

«Date» — текст

 

vendigo

Пользователь

Сообщений: 48
Регистрация: 22.05.2018

Вот пример

Прикрепленные файлы

  • Книга1.xlsm (26.18 КБ)

Изменено: vendigo14.06.2018 13:38:43

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Зачем искать? Отнять от Date первую дату + 2 и получите нужную строку

 

и Delete — удалит строку, а не удалит содержимое ячеек
видимо Вам нужно: ClearContents

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

vendigo

Пользователь

Сообщений: 48
Регистрация: 22.05.2018

Напишите пример пожалуйста
этот макрос работает как нужно когда ищешь не дату, а какой то текст

Изменено: vendigo14.06.2018 13:49:07

 

StoTisteg

Пользователь

Сообщений: 441
Регистрация: 07.05.2018

#9

14.06.2018 14:55:17

vendigo,

Код
Sub tt()
Range("a1", Columns(1).Find(CDate(Date)).Offset(-1)).EntireRow.Delete
End Sub

Изменено: StoTisteg14.06.2018 14:58:27

 

vendigo

Пользователь

Сообщений: 48
Регистрация: 22.05.2018

То что нужно! Спасибо тебе добрый человек!

 

StoTisteg

Пользователь

Сообщений: 441
Регистрация: 07.05.2018

Только если текущей даты там не окажется или она окажется в первой строке, вылетит с ошибкой. Добавьте в начало On Error Resume Next.

Изменено: StoTisteg14.06.2018 16:57:49

 

vendigo

Пользователь

Сообщений: 48
Регистрация: 22.05.2018

#12

14.06.2018 17:22:18

Да да, я это учел, заменил на ClearContents
Подскажи что добавить что бы сработало на определенном листе

Код
Sub tt()
Range("a1", Columns(1).Find(CDate(Date)).Offset(-1)).EntireRow.ClearContents
End Sub

Изменено: vendigo14.06.2018 17:30:56

 

StoTisteg

Пользователь

Сообщений: 441
Регистрация: 07.05.2018

#13

14.06.2018 17:25:36

Код
Sub tt()
With Worksheets("Имя_Листа")
.Range(."a1", .Columns(1).Find(CDate(Date)).Offset(-1)).EntireRow.ClearContents
End With
End Sub

Изменено: StoTisteg14.06.2018 17:25:42

 

vendigo

Пользователь

Сообщений: 48
Регистрация: 22.05.2018

#14

14.06.2018 17:36:37

Код
Sub tt()
With Worksheets("Лист14")
    Range("a1", Columns(1).Find(CDate(Date)).Offset(-1)).EntireRow.ClearContents
End With
End Sub

чет не работает

Изменено: vendigo15.06.2018 08:23:42

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Не забывайте код оформлять тегом.
А к какому листу у Вас Range относится?

 

vendigo

Пользователь

Сообщений: 48
Регистрация: 22.05.2018

#16

14.06.2018 17:41:09

Цитата
Юрий М написал:
А к какому листу у Вас Range относится?

нужно чтоб на 14 листе все это происходило ))

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

А в Вашем коде разговор про Range, который на активном листе. Точку ставьте перед Range, тогда будет относиться к тому, что заявлен в With

 

StoTisteg

Пользователь

Сообщений: 441
Регистрация: 07.05.2018

#18

14.06.2018 18:00:17

Цитата
vendigo написал:
чет не работает

Это потому, что точки — не опечатка и не украшение, они тоже нужны.

 

StoTisteg

Пользователь

Сообщений: 441
Регистрация: 07.05.2018

#19

14.06.2018 18:01:24

Цитата
Юрий М написал:
Точку ставьте перед Range

И не только, перед ячейками внутри — тоже.

 

vendigo

Пользователь

Сообщений: 48
Регистрация: 22.05.2018

Посмотрите чего получается, должно срабатывать при открытии книги…

Прикрепленные файлы

  • Книга1.xlsm (28.73 КБ)

 

vendigo

Пользователь

Сообщений: 48
Регистрация: 22.05.2018

 

VideoAlex

Пользователь

Сообщений: 656
Регистрация: 01.01.1970

#22

15.06.2018 10:13:57

у вас вопервых нет листа 14 в книге а во вторых что-то с range не так в синтаксисе, не смотрел, возможно русская А

ПыСы эмм вроде не .»A1″ надо, а .Range(«A1»)
тогда сработает

вот  это работает

Код
Private Sub Workbook_Open()
With Worksheets("Лист2")
.Range(.Cells(1, 1), .Columns(1).Find(CDate(Date)).Offset(-1)).EntireRow.ClearContents
End With
End Sub

Изменено: VideoAlex15.06.2018 10:16:33

 

StoTisteg

Пользователь

Сообщений: 441
Регистрация: 07.05.2018

#23

15.06.2018 10:21:09

1) Зачем Вы запихнули в Range текстовое значение и поставили перед ним точку?

Код
Private Sub Workbook_Open()

   With Worksheets("Лист14")
      On Error Resume Next
      .Range(.Cells(1, 1), .Columns(1).Find(CDate(Date)).Offset(-1)).EntireRow.ClearContents
   End With
   
End Sub

2) Даже этот верный код работать не будет, потому что у Вас нет листа с именем «Лист14»

Изменено: StoTisteg15.06.2018 10:22:34

data on my Excel sheetI would like to finde a date in column A. This is the date formát: «yyyy/mm/dd hh:mm:ss». It always find nothing, but the date what I am searching for is in the column A.
This is a snippet of my code:

Dim LastDay As Date
Dim strdate As String
Dim rCell As Range

strdate = Format(LastDay, "yyyy/mm/dd hh:mm:ss")

Set rCell = Cells.Find(What:=CDate(strdate), After:=Range("A1"), LookIn:=xlValues _
        , LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

If rCell Is Nothing Then
MsgBox ("nothing")
Else

EDIT: New code per comments.

Sub Copy()
    Dim LastDayRow As Long
    Dim FirstDayRow As Long
    Dim LastDay As Date
    Dim FirstDay As Date
    Dim rcell As Range

    LastDayRow = Range("E" & Rows.Count).End(xlUp).Row
    Range("E" & LastDayRow).Copy Range("G1")
    FirstDayRow = Range("A" & Rows.Count).End(xlUp).Row
    Range("A" & FirstDayRow).Copy Range("G2")
    LastDay = Cells(LastDayRow, "E").Value
    FirstDay = Cells(FirstDayRow, "A").Value

    Set rcell = Cells.Find(What:=LastDay, After:=Range("A1"), LookIn:=xlFormulas _
                , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)

    If rcell Is Nothing Then
        MsgBox ("nothing")
    End If

End Sub

Поиск даты методом Find

китин

Дата: Четверг, 26.04.2018, 14:22 |
Сообщение № 1

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

Замечаний:
0% ±


Excel 2007;2010;2016

Всем доброго времени суток уважаемые !!! Не знаю, но скорее всего затупил не по детски :D %) :'(
Пытаюсь в рамках одного проекта найти методом Find в строке с формулами найти сегодняшнюю дату. Накропал

не хочет и всё тут. выдаёт Nothing и, соответственно далее выкидывает в дебагер. %)
и что у меня там не так?

К сообщению приложен файл:

Find_.xlsm
(21.8 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

Сообщение отредактировал китинЧетверг, 26.04.2018, 14:23

 

Ответить

Karataev

Дата: Четверг, 26.04.2018, 14:54 |
Сообщение № 2

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

При поиске даты два условия:
1) Поиск даты осуществляется по тому, как дата отображается в ячейке.
2) Find видит даты в строке 10 с учетом английского языка в региональных настройках.
В Вашем случае нужно искать не целиком дату «26.04.2018», а только день и месяц и в том формате, как их видит «Find»:
26-Apr.
Чтобы разобраться в ситуации, измените в региональных настройках язык на английский (США).
Решения пока не знаю, как работать в режиме русского языка. Надо переводить название месяца с русского на английский.

Вот так будет находиться:


Киви-кошелек: 9166309108

Сообщение отредактировал KarataevЧетверг, 26.04.2018, 14:57

 

Ответить

китин

Дата: Четверг, 26.04.2018, 15:14 |
Сообщение № 3

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

Замечаний:
0% ±


Excel 2007;2010;2016

Да в том и дело, что в качестве criteria2 мне нужна именно Date, то есть я уже и с[vba]

Код

Format(Date,»dd-mmm»)

[/vba] и с [vba][/vba] пробовал : фигуньки >(


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

Karataev

Дата: Четверг, 26.04.2018, 15:37 |
Сообщение № 4

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

Функция «Format» не изменяет русский текст на английский, поэтому он Вам не подойдет. В Вашем случае нужно именно указывать «apr».
Вот так работает:
[vba]

Код

criteria2 = WorksheetFunction.text(Date, «d-mmm»)

[/vba]


Киви-кошелек: 9166309108

Сообщение отредактировал KarataevЧетверг, 26.04.2018, 15:44

 

Ответить

_Boroda_

Дата: Четверг, 26.04.2018, 16:50 |
Сообщение № 5

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Игорь, а зачем извращаться-то? Вот так не проще
[vba]

Код

aaa = WorksheetFunction.Match(CLng(Date), Rows(10), 0)

[/vba]


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

 

Ответить

bmv98rus

Дата: Четверг, 26.04.2018, 21:21 |
Сообщение № 6

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4009


Репутация:

760

±

Замечаний:
0% ±


Excel 2013/2016


Замечательный Временно просто медведь , процентов на 20.

 

Ответить

Поиск какого-либо значения в ячейках Excel довольно часто встречающаяся задача при программировании какого-либо макроса. Решить ее можно разными способами. Однако, в разных ситуациях использование того или иного способа может быть не оправданным. В данной статье я рассмотрю 2 наиболее распространенных способа.

Поиск перебором значений

Довольно простой в реализации способ. Например, найти в колонке «A» ячейку, содержащую «123» можно примерно так:

Sheets("Данные").Select
For y = 1 To Cells.SpecialCells(xlLastCell).Row
    If Cells(y, 1) = "123" Then
        Exit For
    End If
Next y
MsgBox "Нашел в строке: " + CStr(y)

Минусами этого так сказать «классического» способа являются: медленная работа и громоздкость. А плюсом является его гибкость, т.к. таким способом можно реализовать сколь угодно сложные варианты поиска с различными вычислениями и т.п.

Поиск функцией Find

Гораздо быстрее обычного перебора и при этом довольно гибкий. В простейшем случае, чтобы найти в колонке A ячейку, содержащую «123» достаточно такого кода:

Sheets("Данные").Select
Set fcell = Columns("A:A").Find("123")
If Not fcell Is Nothing Then
    MsgBox "Нашел в строке: " + CStr(fcell.Row)
End If

Вкратце опишу что делают строчки данного кода:
1-я строка: Выбираем в книге лист «Данные»;
2-я строка: Осуществляем поиск значения «123» в колонке «A», результат поиска будет в fcell;
3-я строка: Если удалось найти значение, то fcell будет содержать Range-объект, в противном случае — будет пустой, т.е. Nothing.

Полностью синтаксис оператора поиска выглядит так:

Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

What — Строка с текстом, который ищем или любой другой тип данных Excel

After — Ячейка, после которой начать поиск. Обратите внимание, что это должна быть именно единичная ячейка, а не диапазон. Поиск начинается после этой ячейки, а не с нее. Поиск в этой ячейке произойдет только когда весь диапазон будет просмотрен и поиск начнется с начала диапазона и до этой ячейки включительно.

LookIn — Тип искомых данных. Может принимать одно из значений: xlFormulas (формулы), xlValues (значения), или xlNotes (примечания).

LookAt — Одно из значений: xlWhole (полное совпадение) или xlPart (частичное совпадение).

SearchOrder — Одно из значений: xlByRows (просматривать по строкам) или xlByColumns (просматривать по столбцам)

SearchDirection — Одно из значений: xlNext (поиск вперед) или xlPrevious (поиск назад)

MatchCase — Одно из значений: True (поиск чувствительный к регистру) или False (поиск без учета регистра)

MatchByte — Применяется при использовании мультибайтных кодировок: True (найденный мультибайтный символ должен соответствовать только мультибайтному символу) или False (найденный мультибайтный символ может соответствовать однобайтному символу)

SearchFormat — Используется вместе с FindFormat. Сначала задается значение FindFormat (например, для поиска ячеек с курсивным шрифтом так: Application.FindFormat.Font.Italic = True), а потом при использовании метода Find указываем параметр SearchFormat = True. Если при поиске не нужно учитывать формат ячеек, то нужно указать SearchFormat = False.

Чтобы продолжить поиск, можно использовать FindNext (искать «далее») или FindPrevious (искать «назад»).

Примеры поиска функцией Find

Пример 1: Найти в диапазоне «A1:A50» все ячейки с текстом «asd» и поменять их все на «qwe»

With Worksheets(1).Range("A1:A50")
  Set c = .Find("asd", LookIn:=xlValues)
  Do While Not c Is Nothing
    c.Value = "qwe"
    Set c = .FindNext(c)
  Loop
End With

Обратите внимание: Когда поиск достигнет конца диапазона, функция продолжит искать с начала диапазона. Таким образом, если значение найденной ячейки не менять, то приведенный выше пример зациклится в бесконечном цикле. Поэтому, чтобы этого избежать (зацикливания), можно сделать следующим образом:

Пример 2: Правильный поиск значения с использованием FindNext, не приводящий к зацикливанию.

With Worksheets(1).Range("A1:A50")
  Set c = .Find("asd", lookin:=xlValues)
  If Not c Is Nothing Then
    firstResult = c.Address
    Do
      c.Font.Bold = True
      Set c = .FindNext(c)
      If c Is Nothing Then Exit Do
    Loop While c.Address <> firstResult
  End If
End With

В ниже следующем примере используется другой вариант продолжения поиска — с помощью той же функции Find с параметром After. Когда найдена очередная ячейка, следующий поиск будет осуществляться уже после нее. Однако, как и с FindNext, когда будет достигнут конец диапазона, Find продолжит поиск с его начала, поэтому, чтобы не произошло зацикливания, необходимо проверять совпадение с первым результатом поиска.

Пример 3: Продолжение поиска с использованием Find с параметром After.

With Worksheets(1).Range("A1:A50")
  Set c = .Find("asd", lookin:=xlValues)
  If Not c Is Nothing Then
    firstResult = c.Address
    Do
      c.Font.Bold = True
      Set c = .Find("asd", After:=c, lookin:=xlValues)
      If c Is Nothing Then Exit Do
    Loop While c.Address <> firstResult
  End If
End With

Следующий пример демонстрирует применение SearchFormat для поиска по формату ячейки. Для указания формата необходимо задать свойство FindFormat.

Пример 4: Найти все ячейки с шрифтом «курсив» и поменять их формат на обычный (не «курсив»)

lLastRow = Cells.SpecialCells(xlLastCell).Row
lLastCol = Cells.SpecialCells(xlLastCell).Column
Application.FindFormat.Font.Italic = True
With Worksheets(1).Range(Cells(1, 1), Cells(lLastRow, lLastCol))
  Set c = .Find("", SearchFormat:=True)
  Do While Not c Is Nothing
    c.Font.Italic = False
    Set c = .Find("", After:=c, SearchFormat:=True)
  Loop
End With

Примечание: В данном примере намеренно не используется FindNext для поиска следующей ячейки, т.к. он не учитывает формат (статья об этом: https://support.microsoft.com/ru-ru/kb/282151)

Коротко опишу алгоритм поиска Примера 4. Первые две строки определяют последнюю строку (lLastRow) на листе и последний столбец (lLastCol). 3-я строка задает формат поиска, в данном случае, будем искать ячейки с шрифтом Italic. 4-я строка определяет область ячеек с которой будет работать программа (с ячейки A1 и до последней строки и последнего столбца). 5-я строка осуществляет поиск с использованием SearchFormat. 6-я строка — цикл пока результат поиска не будет пустым. 7-я строка — меняем шрифт на обычный (не курсив), 8-я строка продолжаем поиск после найденной ячейки.

Хочу обратить внимание на то, что в этом примере я не стал использовать «защиту от зацикливания», как в Примерах 2 и 3, т.к. шрифт меняется и после «прохождения» по всем ячейкам, больше не останется ни одной ячейки с курсивом.

Свойство FindFormat можно задавать разными способами, например, так:

With Application.FindFormat.Font 
  .Name = "Arial" 
  .FontStyle = "Regular" 
  .Size = 10 
End With

Поиск последней заполненной ячейки с помощью Find

Следующий пример — применение функции Find для поиска последней ячейки с заполненными данными. Использованные в Примере 4 SpecialCells находит последнюю ячейку даже если она не содержит ничего, но отформатирована или в ней раньше были данные, но были удалены.

Пример 5: Найти последнюю колонку и столбец, заполненные данными

Set c = Worksheets(1).UsedRange.Find("*", SearchDirection:=xlPrevious)
If Not c Is Nothing Then
  lLastRow = c.Row: lLastCol = c.Column 
Else
  lLastRow = 1: lLastCol = 1
End If
MsgBox "lLastRow=" & lLastRow & " lLastCol=" & lLastCol

В этом примере используется UsedRange, который так же как и SpecialCells возвращает все используемые ячейки, в т.ч. и те, что были использованы ранее, а сейчас пустые. Функция Find ищет ячейку с любым значением с конца диапазона.

Поиск по шаблону (маске)

При поиске можно так же использовать шаблоны, чтобы найти текст по маске, следующий пример это демонстрирует.

Пример 6: Выделить красным шрифтом ячейки, в которых текст начинается со слова из 4-х букв, первая и последняя буквы «т», при этом после этого слова может следовать любой текст.

With Worksheets(1).Cells
  Set c = .Find("т??т*", LookIn:=xlValues, LookAt:=xlWhole)
  If Not c Is Nothing Then
    firstResult = c.Address
    Do
      c.Font.Color = RGB(255, 0, 0)
      Set c = .FindNext(c)
      If c Is Nothing Then Exit Do
    Loop While c.Address <> firstResult
  End If
End With

Для поиска функцией Find по маске (шаблону) можно применять символы:
* — для обозначения любого количества любых символов;
? — для обозначения одного любого символа;
~ — для обозначения символов *, ? и ~. (т.е. чтобы искать в тексте вопросительный знак, нужно написать ~?, чтобы искать именно звездочку (*), нужно написать ~* и наконец, чтобы найти в тексте тильду, необходимо написать ~~)

Поиск в скрытых строках и столбцах

Для поиска в скрытых ячейках нужно учитывать лишь один нюанс: поиск нужно осуществлять в формулах, а не в значениях, т.е. нужно использовать LookIn:=xlFormulas

Поиск даты с помощью Find

Если необходимо найти текущую дату или какую-то другую дату на листе Excel или в диапазоне с помощью Find, необходимо учитывать несколько нюансов:

  • Тип данных Date в VBA представляется в виде #[месяц]/[день]/[год]#, соответственно, если необходимо найти фиксированную дату, например, 01 марта 2018 года, необходимо искать #3/1/2018#, а не «01.03.2018»
  • В зависимости от формата ячеек, дата может выглядеть по-разному, поэтому, чтобы искать дату независимо от формата, поиск нужно делать не в значениях, а в формулах, т.е. использовать LookIn:=xlFormulas

Приведу несколько примеров поиска даты.

Пример 7: Найти текущую дату на листе независимо от формата отображения даты.

d = Date
Set c = Cells.Find(d, LookIn:=xlFormulas, LookAt:=xlWhole)
If Not c Is Nothing Then
  MsgBox "Нашел"
Else
  MsgBox "Не нашел"
End If

Пример 8: Найти 1 марта 2018 г.

d = #3/1/2018#
Set c = Cells.Find(d, LookIn:=xlFormulas, LookAt:=xlWhole)
If Not c Is Nothing Then
  MsgBox "Нашел"
Else
  MsgBox "Не нашел"
End If

Искать часть даты — сложнее. Например, чтобы найти все ячейки, где месяц «март», недостаточно искать «03» или «3». Не работает с датами так же и поиск по шаблону. Единственный вариант, который я нашел — это выбрать формат в котором месяц прописью для ячеек с датами и искать слово «март» в xlValues.

Тем не менее, можно найти, например, 1 марта независимо от года.

Пример 9: Найти 1 марта любого года.

d = #3/1/1900#
Set c = Cells.Find(Format(d, "m/d/"), LookIn:=xlFormulas, LookAt:=xlPart)
If Not c Is Nothing Then
  MsgBox "Нашел"
Else
  MsgBox "Не нашел"
End If

JulyMar

3 / 3 / 0

Регистрация: 01.08.2013

Сообщений: 37

1

03.12.2013, 10:45. Показов 6471. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день, уважаемые форумчане!
Подкиньте пожалуйста идею как реализовать поиск по текущему месяцу среди значений в столбце с датами. Т.е. имеем столбец с различными датами истечения срока годности реактивов, необходим макрос, который будет анализировать в каких строчках находятся реактивы, срок годности которых истекает в этом месяце.
Мысль по поводу автофильтра не подходит, т.к. необходимо видеть всю таблицу, а не только строки удовлетворяющие запросу.
Заранее благодарна!
Пытаюсь оперировать с Datepart, возможно делаю, что-то не то, пока ничего не выходит!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub Анализ_истечения_СроковГодности ()
Dim i As String, mon As String
Dim mydate As Long, D As Date
mydate = Date
mydate = DatePart("m", Now) ' Текущая дата
MsgBox mydate
 
D = Sheets("ЖУ_СО").Range("F5") 'Дата окончания срока годности реактива
mon = Sheets("ЖУ_СО").Range("G5") 'Срок хранения в месяцах, формат ячейки числовой.
i = DateAdd("m", m, D) 'функция добавления к текущей дате срока хранения
Range("T5") = i
 
Dim X As Range: Set X = Лист11.Range("t4:t10000").Find(mydate)
 If X Is Nothing Then    'В этом месяце списывать реактивы не нужно!
        msg = "Нет реактивов, у которых выходит срок годности в этом месяце!"
        MsgBox msg
    Else
           r = X.Row
           n = Sheets("ЖУ_СО").Cells(r, 2)
        MsgBox "Вышел срок годности у " & n & " строка № " & r
        'Сделать подсветку строк
        
    End If
End Sub



0



Kubuntovod

Эксперт NIX

2670 / 786 / 176

Регистрация: 14.01.2013

Сообщений: 3,676

03.12.2013, 14:16

2

Лучший ответ Сообщение было отмечено как решение

Решение

Если в ячейке только дата, то всё просто:

Visual Basic
1
If Month(Cells(i, j)) = Month(Date) Then ...



1



3 / 3 / 0

Регистрация: 01.08.2013

Сообщений: 37

03.12.2013, 14:28

 [ТС]

3

Спасибо огромное за быстрый ответ! Очень выручили!



0



Kubuntovod

Эксперт NIX

2670 / 786 / 176

Регистрация: 14.01.2013

Сообщений: 3,676

03.12.2013, 15:05

4

Внимательнее перечитал задание и понял, что надо смотреть на дату окончания срока годности и сравнивать её с последним днём текущего месяца.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
DateDelimiter = Mid(Format(Date, "General Date"), 3, 1)
ed = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)  'Последнее число месяца
m = Month(Date)  'Текущий месяц числом
y = Year(Date)  'Текущий год
If m = 2 And (y Mod 4) <> 0 Then
 td = CStr(ed(m - 1))
Else
 td = "29"  'Високосный год
End If
If m < 10 Then tm = "0" & CStr(m) Else tm = CStr(m)  'Месяц прописью (01, 02 ... 12)
tdt = td & DateDelimiter & tm & DateDelimiter & CStr(y)  'Дата последнего дня текущего месяца прописью
If D < CDate(tdt) Then Call MsgBox("Срок годности вышел", vbOKOnly, "Упс ...")



0



Понравилась статья? Поделить с друзьями:
  • Макросы в excel число с нулями
  • Макросы в excel поиск данных
  • Макросы в excel через vba
  • Макросы в excel подстановка значений
  • Макросы в excel функция в макросе