Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2019, 11:39   #1
uint
Новичок
Джуниор
 
Регистрация: 23.04.2012
Сообщений: 1
По умолчанию Функция сохраняет даты как строки

Пытаюсь написать функцию, которая принимает на вход диапазон значений, а возвращает массив, содержащий только уникальные значения исходного набора данных (убирает повторяющиеся и пустые значения). Так я представлял себе задачу в общем. Но в действительность на вход подаётся только диапазон дат (просто целые числа с форматированием "короткий формат даты"). Я думал, что функция оставит целый тип данных без изменений, вернет массив чисел, которые будут отформатированы в ячейках с формулой, однако функция упорно возвращает строковое представление дат в формате дат. Это представляет собой проблему, так как возвращенные значения должны сравниваться другой функцией с исходными датами и возвращать свой результат, но так как исходные даты представляют собой отформатированное число, а конечные - строки, то сравнение невозможно. Можно было бы преобразовать строки специальной функцией в число, но мне хочется, чтобы моя функция была универсальной и возвращала бы тот тип данных, который приняла в качестве аргумента. Вот код функции, которая работает неудовлетворительно.
Код:
'Функция принимает диапазон, содержащий какие либо данные, например, даты
'данные могут повторяться, а возвращает массив, содержащий только уникальные
'значения
Function СЛЕДМИНИМ(Массив As Range) As Variant
  Dim nRow As Integer
  Dim k As Integer
  Dim Items() As Variant
  '
  k = 0
  ReDim Items(k)
  nRow = Массив.Rows.Count 'строк
  'помещаем в массив только уникальные элемениы
  For r = 1 To nRow
    Dim flag As Boolean
    Dim val As Variant
    If TypeName(Массив.Cells(r, 1).Value) = "Date" Then
      val = Массив.Cells(r, 1).Value
    'MsgBox val
    flag = True
    '
    For i = LBound(Items) To UBound(Items)
      If Items(i) = val Then
        flag = False
      End If
    Next
    
    If flag = True Then
      ReDim Preserve Items(k)
      Items(k) = val
      k = k + 1
    End If
    End If
  Next r
  СЛЕДМИНИМ = Application.Transpose(Items)
  'Erase Items
  Exit Function
End Function
На картинке видны даты в строковом представлении. В клетках таблицы, 1:1 и т.д. находятся функции, обрабатывающие значения столбца "Дата". Если результат в столбце "Дата" сохранить как значения, то они все равно останутся текстом, но если в строке формул нажать backspace перед первым символом, то результат преобразуется в число.
787878788.png
Самодельная функция, обрабатывающая значения в столбце "Дата" воспринимает именно строку, а должна - число.
454545454.png
Посоветуйте, как решить данную проблему.
uint вне форума Ответить с цитированием
Старый 02.09.2019, 18:23   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

преобразуйте текст в дату
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка строки на правильность даты. YARK0S C++ Builder 3 05.04.2018 23:33
Функция даты resembe Microsoft Office Excel 1 17.03.2015 00:29
Текст и функция даты в одной ячейке SiberianGun Microsoft Office Excel 3 02.12.2014 16:16
функция даты hunter08923 Общие вопросы Delphi 6 12.11.2012 18:58
функция для даты Iskin Microsoft Office Excel 6 08.10.2010 17:08