Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Пытаюсь написать функцию, которая принимает на вход диапазон значений, а возвращает массив, содержащий только уникальные значения исходного набора данных (убирает повторяющиеся и пустые значения). Так я представлял себе задачу в общем. Но в действительность на вход подаётся только диапазон дат (просто целые числа с форматированием "короткий формат даты"). Я думал, что функция оставит целый тип данных без изменений, вернет массив чисел, которые будут отформатированы в ячейках с формулой, однако функция упорно возвращает строковое представление дат в формате дат. Это представляет собой проблему, так как возвращенные значения должны сравниваться другой функцией с исходными датами и возвращать свой результат, но так как исходные даты представляют собой отформатированное число, а конечные - строки, то сравнение невозможно. Можно было бы преобразовать строки специальной функцией в число, но мне хочется, чтобы моя функция была универсальной и возвращала бы тот тип данных, который приняла в качестве аргумента. Вот код функции, которая работает неудовлетворительно.
Код:
'Функция принимает диапазон, содержащий какие либо данные, например, даты
'данные могут повторяться, а возвращает массив, содержащий только уникальные
'значения
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
Просмотров: 49

Размер: 6.7 Кб
Самодельная функция, обрабатывающая значения в столбце "Дата" воспринимает именно строку, а должна - число.
Название: 454545454.png
Просмотров: 43

Размер: 6.5 Кб
Посоветуйте, как решить данную проблему.
uint вне форума   Ответить с цитированием
Старый 02.09.2019, 19:23   #2
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Адрес: УКРАЇНА, Київ
Сообщений: 9,174
Репутация: 1811

icq: 7934250
skype: i2x0,5
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


02:48.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.