Страницы: 1
RSS
проверка ячейки на правильное отражение даты
 
Товарищи, не могу нечего придумать как проверить дата ли в ячейке. Дело в том, что после работы макроса (если нажать разбор в приложенном файле) в трех столбцах:Q, AI, AK формируется дата, однако формат ячейки остается "Общий". Только после вставки в ячейку курсора она автоматически переводится в формат "Дата". В связи с этим не как не могу подобрать способ как проверить дата ли в ячейке. Мне в принципе без разницы в каком формате останется ячейка, главное, чтоб в указанных столбцах действительно стояла дата в формате дд.мм.гггг
 
Сергей020487,
а для чего Вам именно формат даты, ведь отображается все верно?

как вариант, можно сразу сделать формат данных столбцов изначально или в макросе.
 
на вновь созданном листе все работает правильно
как вариант перенести данные на новый лист
на этом, возможно, изменено какое-то свойство. не нашел какое
 
evgeniygeo, по хрен на формат в итоге, главное чтоб вместо даты не затисалось чтото инное. Я сразу подумал о том, чтоб в макросе изменить в отношении этих столбцов формат на дату по умолчанию. Но подумал, что может быть у вас будут какие то другие идеи.  
 
Александр Моторин, нет. хотелось бы чтоб все работало именно на этом листе. и с минимальными обращениями к ячейкам и другими манипуляциями. Цель этой работы именно в этом.
 
Цитата
Сергей020487 написал:
будут какие то другие идеи
только после того как сможете сформулировать задачу, пока вам нечем помочь
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Задача: нужна формула проверки ячейки на содержание даты в формате дд.мм.гггг, после выполнения макроса (левая кнопка). Макрос по умолчанию в столбцах Q, AI, AK оставляет формат "Общий". Мне не важен формат данных ячеек после выполнения указанного макроса, главное чтобы формула сказала мне что в ячеке не дата или что в ячейке дата. Тоесть мне ненужно автозамена на дату, нужно просто мне сообщить что в ячейке ошибка.
Сейчас проблема в том, что формат после макроса остается общий, и не одна формула меня не спасает (например найти ??.??.???? или ячейка). Поэтому я думаю что единственный вариант это в макросе изменить формат этих ячеек на дату.  
 
Цитата
Сергей020487 написал:
нужна формула проверки ячейки
а потом все время рассказ о макросе и в итоге:
Цитата
Сергей020487 написал:
Поэтому я думаю что единственный вариант это в макросе изменить формат этих ячеек на дату.
так вам нужна формула или макрос?
и формула и макрос должны куда-то вывалить результат проверки КУДА??? что должно быть результатом проверки?
понимаете, пока обьяснения, как бы это мягче, хреновые - результаты проверки будут точно такими же, а нужны они вам такие?
Изменено: Ігор Гончаренко - 23.09.2022 09:07:11
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Что мне нужно: мне нужна формула, но я подозреваю, что формулы будут безполезны изза работы макроса в том сценарии в котором он работает сейчас. Именно подозреваю, а не уверен.
Куда мне нужна формула: да в целом мне нужна формула, но если необходимо прям конкретный адрес, то эта формула должна стоять в ячейках:AY4, BQ4, BS4 и возвращать она должна 1 и 0, где 1 это истина, 0 лож.
 
В макросе проверяйте сразу IsDate(...)
Скажи мне, кудесник, любимец ба’гов...

 
Выуж определитесь, что вам нужно
Цитата
Сергей020487 написал:
Тоесть мне ненужно автозамена на дату, нужно просто мне сообщить что в ячейке ошибка.
Цитата

Сергей020487 написал:
В связи с этим не как не могу подобрать способ как проверить дата ли в ячейке.

Цитата
Сергей020487 написал:
Поэтому я думаю что единственный вариант это в макросе изменить формат этих ячеек на дату.
Не единственный, но самый простой.
Добавьте в макрос 1 строчку
Код
                    .Cells(i, iFirstCol + 1 + b) = arr(b)
                    .Cells(i, iFirstCol + 1 + b).FormulaLocal = .Cells(i, iFirstCol + 1 + b).FormulaLocal
 
согласен с _Boroda_:
Код
Sub Разбить_комментарий_по_ячейкам()
Dim HeaderRow As Long, iFirstRow As Long, iLastRow As Long, iFirstCol As Long, iLastCol As Long
Dim Rng As Range

    With ActiveSheet
        Set Rng = .Columns(1).Find("Дата", , xlFormulas, xlWhole)
        If Rng Is Nothing Then
            MsgBox "Не найден столбец 'Дата'!", vbInformation, "Внимание"
            Exit Sub
        End If
        
        HeaderRow = Rng.Row
        iFirstRow = HeaderRow + 1
        
        iLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
    
        Set Rng = .Rows(HeaderRow).Find("Текст комментария", , xlFormulas, xlWhole)
        If Rng Is Nothing Then
            MsgBox "Не найден столбец 'Текст комментария'!", vbInformation, "Внимание"
            Exit Sub
        End If
        iFirstCol = Rng.Column
        
        If iLastRow = HeaderRow Then
            MsgBox "В таблице нет данных!", vbInformation, "Внимание"
            Exit Sub
        End If
        
        Application.ScreenUpdating = False
        
        For i = iFirstRow To iLastRow
            Dim arr
            If .Cells(i, iFirstCol) <> "" Then
                arr = Split(.Cells(i, iFirstCol), "_")
                For b = 0 To UBound(arr)
                    If i <> iFirstRow Then
                        .Cells(i, iFirstCol + 1 + b).NumberFormat = .Cells(i - 1, iFirstCol + 1 + b).NumberFormat
                    End If
                    .Cells(i, iFirstCol + 1 + b) = arr(b)
                Next
            End If
        If IsDate(Cells(i, 17)) = False Then
        MsgBox "строка: " & i
        End If
        Next
    End With

    Application.ScreenUpdating = True
    MsgBox "Комментарий разбит!", vbInformation, "Конец"
End Sub
 
evgeniygeo, Я правильно понял, что Ваше дополнение предупреждает меня о ошибке в строке такойто, а затем разбивает коментарий вместе с этой ошибкой? Это дополнение хавает любой формат даты, тоесть д.мм.гггг или мм.дд.гггг он тоже пропускает?
Изменено: Сергей020487 - 23.09.2022 11:08:07
 
RAN, В ВБА я совершенно ноль, сам не знаю куда вставлять это дополнение. Это замена формата ячеек с Общего на Дату?
 
Сергей020487,
кто у Вас отобрал энтузиазм самостоятельного тестирования?)))
 
Вы в состоянии в своем файле найти первую из приведенных мной строк и добавить вторую?
Специально 2 строки привел.
Цитата
Сергей020487 написал:
Это замена формата ячеек с Общего на Дату?
Нет. Это преобразование текста, похожего на дату, в дату.
Изменено: RAN - 23.09.2022 12:56:00
 
RAN,
я боюсь, что тут вопрос в другом: нужно как-то показать во время выполнения кода, что вместо необходимый даты вставилась какая-либо крокозябра.
Изменено: evgeniygeo - 23.09.2022 14:23:46
 
evgeniygeo, Да именно так. В целом конечно Ваш вариант работет, при разбивке коментария сообщает в какой строке ошибка в полях дата. Не очень удобно когда большой массив и много ошибок. Можно ли вместо сообщения о наличии ошибки в данных полях,закрашивать ячейки. НО, есть одно но, у меня работает условное форматирование, боюсь что будет конфликт...
 
Сергей020487,
можно выделить границами ячейки, конечно если они не заданы в УФ
например, вместо
Код
            MsgBox "строка: " & i

вот это
Код
            Cells(i, 17).Borders.Weight = xlThick
            Cells(i, 17).Borders.Color = vbRed
Изменено: evgeniygeo - 27.09.2022 07:11:26
 
evgeniygeo, В уф задан только цвет заливки - красный. Любое другое выделения меня бы устроило.
 
Сергей020487,
другие варианты границ можете посмотреть тут
 
evgeniygeo, Спасибо большое, очень полезная ссылочка.
 
evgeniygeo, Евгений, прошу прощения, а вот к данном случае можно ли навиязать формат даты которая будет считаться верной, а все остальные не верны?
Cells(i, 17).Borders.Weight = xlThick    
Cells(i, 17).Borders.Color = vbRed
 
конечно, по примеру:
Код
If IsDate(Cells(i, 17)) = False Then
Cells(i, 17).Borders.Weight = xlThick    
Cells(i, 17).Borders.Color = vbRed
Else:
Cells(i, 17).Borders.Color = vbBlue
End If
Изменено: evgeniygeo - 27.09.2022 10:48:03
 
Я вот только не пойму никак, зачем проверять правильность даты, если макрос никогда не вставляет дату, а всегда текст? Т.е. если видим в ячейке дату, значит там ошибка.
 
evgeniygeo, Вы меня извините я не верно выразился.  Я имел в виду прикрутить к этой проверке
Cells(i, 17).Borders.Weight = xlThick    
Cells(i, 17).Borders.Color = vbRed
не формат ячейки, а формат содержимого ячейки дд.мм.гггг - верно; а д.мм.гггг не верно, или дд.мм.гг - неверно и тд
Изменено: Сергей020487 - 27.09.2022 11:24:33
 
Сергей020487,
так стоп, мы же уже сделали проверку на дату?
Код
If IsDate(Cells(i, 17)) = False Then

если я правильно понял, то тогда лучше вот так проверять:
Код
Sub aa()
If Cells(i, 17).Text = Format(Cells(i, 17), "DD.MM.YYYY") Then
MsgBox "дата"
End If
End Sub
Изменено: evgeniygeo - 27.09.2022 11:35:11
Страницы: 1
Читают тему (гостей: 1)
Наверх