Создание пользовательских сортируемых типов данных в Excel

1

Я хочу определить пользовательский тип данных в Excel 2007, диапазон дат.

По сути, это массив дат или меньшие диапазоны дат, такие как:

"{ 01-26-1991 , 01-01-2004 to 12-31-2004 , 12-13-2017 }"

который определил бы произвольную коллекцию дат, в вышеупомянутом случае, 26 января 1991, полный 2004 год и 13 декабря 2017.

Я хотел бы иметь возможность поместить вышеупомянутый синтаксис в ячейку и позаботиться об управлении Excel, чтобы я мог вызвать cell.isWithin (otherDate), чтобы проверить, находится ли дата в указанном диапазоне, и разрешить обычный Excel сводная таблица для сортировки по первой дате в диапазоне.

Я могу написать код для выполнения вышеуказанного, включая преобразование данных из строки в пользовательский объект и обратно, но я не уверен в хуках, чтобы Excel мог видеть его как тип данных, который можно отсортировать (по самой ранней дате) и так что любая функция vba, которую я пишу, не должна создавать объект, анализировать строку в объекте, изменять объект и генерировать выходную строку каждый раз, когда значение должно быть изменено или опрошено.

Есть ли способ разрешить это? или другой метод, который позволил бы мне сделать это с какой-то неопределенной скоростью?

Этот тип данных будет использоваться для создания нечетной пользовательской диаграммы Ганта с использованием условного форматирования.

Jello_Raptor
источник

Ответы:

0

Я не знаком с таким типом передачи в Excel, извините.

Но если ваша коллекция произвольная, я бы подошел к ней, сохранив отдельный лист, содержащий таблицу с вашим списком диапазонов дат.

1            2
A  1991-01-26   1991-01-26
B  2004-01-01   2004-12-31
C  etc.

Затем создайте простую функцию VBA, которая принимает аргумент даты и возвращает логическое значение.

Function IsWithinDate(dCell as date) as Boolean
     // Loop to check against each date range in your table

     // Return TRUE or FALSE

         IsWithinDate = TRUE
End Function

Наконец, пусть ваше условное форматирование использует результат вашей функции:

=IsWithinDate(A1)
mtone
источник