У меня есть следующие данные, которые хранятся в виде текста, с форматом ячейки по умолчанию.
=ISTEXT(G4)
=TRUE
'in both spreadsheets.
Пример данных
Обе рабочие книги похожи. Другая дата в A1 и разные записи строк здесь и там.
+---+-----------+-------------+-----+-----+------+-------------+--------------+----------+
| | A | B | C | D | E | F | G | H |
+---+-----------+-------------+-----+-----+------+-------------+--------------+----------+
| 1 | MTOD List Exported as at Monday, 07 October 2019 | | |
| 2 | | | | | | | | |
| 3 | MTOD | Title | Dwg | Man | CDED | Issue Date | Impl. Date | Status |
| 4 | 0101.0700 | Legend | | | | Apr 1, 1994 | Apr 1, 1994 | Active |
| 5 | 0202.0310 | Roadway - A | 0 | | | Dec 1, 2005 | Dec 21, 2005 | History |
| 6 | 0202.0310 | Roadway - A | 1 | | | Jan 1, 2007 | Mar 15, 2007 | History |
| 7 | 0202.0310 | Roadway - A | 2 | | | May 1, 2009 | Jun 11, 2009 | Obsolete |
| 8 | 0202.0320 | Roadway - D | 0 | | | Jan 1, 2007 | Mar 15, 2007 | History |
+---+-----------+-------------+-----+-----+------+-------------+--------------+----------+
Когда я выполняю проверку уникальных записей из обновленной рабочей книги, я ввожу в Excel следующую формулу:
=COUNTIFS('[MTOD 115450 List.xml]Sheet1'!$A:$A,A4,'[MTOD 115450 List.xml]Sheet1'!$G:$G,"<>"&G4,'[MTOD 115450 List.xml]Sheet1'!$H:$H,H4)
Строка 4 в обновленной книге в точности совпадает с образцом данных. Это означает, что запись не изменилась. То, что я ищу, это тот же номер MTOD (Col A), другой Imp. Дата (Колонка G), Тот же статус (Колонка H)
Поскольку строка 4 является точным соответствием, я ожидаю, что показатели возвращают 0, но вместо этого она возвращает 1. Оставил меня в замешательстве. Я разбил счетчики на каждое из его ifs, чтобы посмотреть, смогу ли я что-нибудь поймать. и я получил следующие результаты:
- Значение MTOD 1 такое же, как и ожидалось, поскольку это единственный листинг во всем столбце.
- Значение состояния 339 соответствует ожидаемому, поскольку в списке много активных документов
- Значение IMP для 1048576 окончено.
Значение для IMP количество строк в электронной таблице когда я применяю фильтр к этому столбцу, строка 4 фактически является единственной строкой с этой датой. Я мог бы понять счет 1048576 -1. Когда я изменяю <> на =, тогда я получаю ожидаемый ответ 1.
На листе, где я делаю подсчет, я использовал COUNTA (G: G) и получил ответ 1015.
Почему COUNTIFS задает значение для ДАТЫ IMP?
Что мне нужно, чтобы полная формула COUNTIFS
оценивалась в 0?
Я подозреваю, что это преобразование строки даты в дату Excel как часть процесса, и в итоге она пытается сравнить строку с целым числом. Я купил бы это, если бы это не возвращало правильное значение 1, когда я переключаю дату с <> на =.
Это все было доведено до моего внимания при попытке отладки моего excelformula, который возвращал то же самое приводит к 1 вместо нуля:
SearchCount = Application.WorksheetFunction.CountIfs(Existing.Worksheets("Sheet1").Range("A:A"), varElement.Value, _
Existing.Worksheets("Sheet1").Columns(ImpCol.Column), "<>" & Source.Worksheets("Sheet1").Cells(varElement.Row, ImpCol.Column).Value, _
Existing.Worksheets("Sheet1").Columns(StatusCol.Column), "Active")
Мой лог c имеет недостатки?
Обновление
Ссылка на файлы
Обновление 20/02/12
Я обновил свою программу, и теперь она конвертирует даты из строк в серийные даты при открытии рабочих книг. Теперь, когда я делаю показания в формуле Excel, я получаю правильный результат 0. Когда я запускаю его через VBA, я получаю неправильный результат 1. Есть идеи, что происходит с формулой VBA против Excel?
Одна вещь, которую я заметил при проверке значений критериев показателей в окне просмотра, это то, что дата в окне просмотра - 94/04/01, а дата в строке формул, когда я нажимаю на ячейку, отображает 1994 /04/01.
Часы VBA
Дата Excel
0 в I5 результат приведенной выше формулы теста COUNTIFS дает ожидаемый результат.
UPDATE II 20/02/12
, поэтому я провел небольшое тестирование только для компонента date. Я вижу проблему, но я не знаю обходной путь в настоящее время. Появляется, когда вы объединяете оператор сравнения с датой, он преобразует его в строку вместо того, чтобы оставлять ее как дату.
SearchCount = Application.WorksheetFunction.CountIfs(Existing.Worksheets("Sheet1").Columns(ImpCol.Column), Source.Worksheets("Sheet1").Cells(varElement.Row, ImpCol.Column).Value)
SearchCount приведет к 1, что является правильным, поскольку это уникальная дата в этот столбец.
SearchCount = Application.WorksheetFunction.CountIfs(Existing.Worksheets("Sheet1").Columns(ImpCol.Column), "=" & Source.Worksheets("Sheet1").Cells(varElement.Row, ImpCol.Column).Value)
SearchCount = 0
SearchCount = Application.WorksheetFunction.CountIfs(Existing.Worksheets("Sheet1").Columns(ImpCol.Column), "<>" & Source.Worksheets("Sheet1").Cells(varElement.Row, ImpCol.Column).Value)
SearchCount = 1048576
Итак, как мне выполнить COUNTIFS с <> DATE? Могу ли я изменить ДАТУ в VBA на ее серийную дату и использовать вместо нее?