evgeniygeo, это ворожение If Cells(i, 17).Text = Format(Cells(i, 17), "DD.MM.YYYY" ) работает очень, мягко говоря, как и поиск (??.??.????). Пустые, 3 цифры вместо года, 51 число, все считает датой. Пустые тоже считает датой. Буквы тоже считает датой.
Ігор Гончаренко, Мне нужно сообщить в какой ячейке (из указанных выше трех столбцов) содержимое отличается от формата дд.мм.гггг. Ячейка не пустая, не содержит и не может состоять из букв, чисел не может быть больше 31, месяцев больше 12, годы должны быть в деапозоне 2015-2023. Формат ячейки в данном случае мне не вашен, будет ли он общим или краткой датой.
Сергей020487, так в чем проблема добавить дополнительные условия
Код
Sub aa()
For i = 1 To 10
If Cells(i, 1) <> "" And Cells(i, 1).Text = Format(Cells(i, 1), "DD.MM.YYYY") And IsDate(Cells(i, 1)) Then
MsgBox "A" & i & " - дата"
Else: MsgBox "A" & i & " - НЕ дата"
End If
Next i
End Sub
или даже лучше так:
Код
Sub aa()
For i = 1 To 10
If Cells(i, 1) <> "" And Cells(i, 1) Like "##.##.####" = True And IsDate(Cells(i, 1)) Then
MsgBox "A" & i & " - дата"
Else: MsgBox "A" & i & " - НЕ дата"
End If
Next i
End Sub
Сергей020487, знаете чем постановка задачи отличается от словесной пурги? после постановки задачи человек понимает может он решить эту задачу или нет человек попавший в словесную пургу совершенно дезориентирован он не то, что не понимает как решать, он не понимает что решать! он задачу не видит из-за пурги
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Сергей020487 написал: Ячейка не пустая, не содержит и не может состоять из букв, чисел не может быть больше 31, месяцев больше 12, годы должны быть в деапозоне 2015-2023.
и все мы понимаем что если в ячейке стоит просто 1 в общем формате, то это 01.01.1900 в формате даты. Считать ли это корректным для проверки???
Сергей020487 написал: Ячейка не пустая, не содержит и не может состоять из букв, чисел не может быть больше 31, месяцев больше 12, годы должны быть в деапозоне 2015-2023
Может все проще? Создаете в модуле доп.функцию:
Код
Function IsRightDate(val) as boolean
Dim dt As Date
On Error Resume Next
dt = CDate(val)
If dt >= #1/1/2015# and dt <=#1/1/2024# then
IsRightDate = True
end if
End Function
а в коде ей проверяете:
Код
If IsRightDate(Cells(i, 1).value) Then
MsgBox "A" & i & " - дата"
Else: MsgBox "A" & i & " - НЕ дата"
End If
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Типы значений ячеек: пустая, текст, число, логическое значение, ошибочное значение. Сформулируйте, что Вы считаете "правильной" датой: 1. Если ячейка содержит текст, то ... 2. Если ячейка содержит число, то ...
Господа, вам не кажется, что вы пытаетесь решить проблему, которая существует исключительно в воображении ТС? И, с учетом, что ему наплевать на форматы, а 10.30.2022 вполне корректная дата, все изыски ведут в тупик.
evgeniygeo, Да второй код отлично отрабатывает. Пока косяка не нашел. Вот этот: Sub aa()For i = 1 To 10 If Cells(i, 1) <> "" And Cells(i, 1) Like "##.##.####" = True And IsDate(Cells(i, 1)) Then MsgBox "A" & i & " - дата" Else: MsgBox "A" & i & " - НЕ дата" End If Next i End Sub А можем еще влепить условие по году, от 2016 до 2023, чтоб исключить человеческий фактор и как следствие неправильный ввод года. А потом совместить с кодом из моего файла (Разбить_комментарий_по_ячейкам()), и в отношении трех столбцов Q, AI, AK.
БМВ, Это будет ошибкой. Мне тут важно не то значение фактическое которое стоит в ячейке, а именно визуальный его вид. Второй макрос в данном файле собирает все ячейки в один текстовый коментарий, и как выглядела дата в ячейках Q, AI, AK так она и отразится в Коментарии. Поэтому мне похрен какой формат у ячейки.
sokol92, Ігор Гончаренко, RAN, посмотрите пожалуйста файл в моем 43 сообщении. Как видно из него первый макрос раскладывает коментарий на ячейки. В этот момент вся таблица в Общем значении. После разложения комментария, я исправляю ошибки. В том числе и даты в столбцах Q, AI, AK. Макрос формат ячейки не меняет. для меня важно, чтоб в этой ячейке отображалось только дд.мм.гггг. Я искренне извиняюсь, что не могу дать четкое ТЗ.
Сергей020487 написал: А можем еще влепить условие по году, от 2016 до 2023, чтоб исключить человеческий фактор и как следствие неправильный ввод года.
вообще Дмитрий(The_Prist) Щербаков в сообщении #38 уже предложил вариант с проверкой периода, но в данном коде, например 01.02.20 также будет считаться датой, но можно добавить дополнительное условие.
Цитата
Сергей020487 написал: А потом совместить с кодом из моего файла (Разбить_комментарий_по_ячейкам()), и в отношении трех столбцов Q, AI, AK.
в Q6 1.13.2019 это чуть лучше, но это за гранью (моего понимания) то, что вы делаете с датами похоже на одну грустную историю: отрежу ребенку ножки, чтобы он находился дома и не ходил на улицу - там его могут обидеть плохие мальчики
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
в Q6 1.13.2019 это чуть лучше, но это за гранью (моего понимания) то, что вы делаете с датами похоже на одну грустную историю: отрежу ребенку ножки, чтобы он находился дома и не ходил на улицу - там его могут обидеть плохие мальчики
Да это я специально вставил битые даты, чтоб проверить как работает условие....
Сергей020487 написал: Я не могу добавить еще два диапазона, мозга не хватает.
понимаю, но данная ветка форума не предполагает, что все сделают за Вас: ПРАВИЛА ФОРУМА
Цитата
2.7. Если вам нужен не совет по самостоятельному решению задачи, а чтобы все сделали за вас - добро пожаловать в ветку Работа. Там, скорее всего, найдутся специалисты, которые разберутся с вашей проблемой быстро, качественно и за разумную плату.