Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/170: Рейтинг темы: голосов - 170, средняя оценка - 4.52
 Аватар для Rikozenit
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156

Изменение формата даты

10.11.2016, 09:33. Показов 31843. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем хорошего дня!
У меня такая проблема:
Написал функцию расчёта срока изготовления изделия для этапов производства, в зависимости от общей даты Старта (А1) и Финиша (А2) Заказа, (К - коэффициент, зависящий от очерёдности этапа):

Visual Basic
1
2
3
4
5
Public Function FSrok(ByVal A1 As Variant, ByVal A2 As Variant, ByVal K As Variant) As Date
    Dim A As Variant
        A = A1 - (A1 - A2) * K
        FSrok = A
End Function
Эта функция возвращает мне дату в формате: 25.12.2015 23:02:24, а мне нужно просто: 25.12.2015.
Как изменить формат даты? Пытаюсь с помощью доп переменной:
Visual Basic
1
B=Format (A, "Short Date")
но это вообще не работает(
Подскажите, что не так? Спасибо)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.11.2016, 09:33
Ответы с готовыми решениями:

Изменение формата даты
Здравствуйте! Подскажите, пожалуйста, как изменить формат дат в Excell (например с 2017-10-25 на 25.10.2017) После того как меняю...

Преобразование формата даты
Есть следующая проблема: На листе Excel расположен элемент ComboBox, забирающий дату из таблицы базы данных. В таблице БД формат выглядит...

Из одного формата даты в другую
Всем привет, подскажите как мне из даты формата 29.04.1999 преобразовать в дату 19990429 ?

50
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
10.11.2016, 17:25
Студворк — интернет-сервис помощи студентам
anton-sf, слишком много конвертаций для одной формулы. можно и так конечно
0
 Аватар для anton-sf
128 / 64 / 14
Регистрация: 29.03.2015
Сообщений: 265
10.11.2016, 17:31
unick12345, есть такое

Добавлено через 1 минуту
Rikozenit, я запутался, что нужно на выходе - количество дней на производство или конечная дата готовности ?
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
10.11.2016, 17:34
да тут как бы не выходит конечная дата. я так понял что нужна сортировка что первое запустить по коефициенту и когда
0
 Аватар для anton-sf
128 / 64 / 14
Регистрация: 29.03.2015
Сообщений: 265
10.11.2016, 17:39
ТС'у не мешало бы разжевать входящие параметры и конечный результат
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
10.11.2016, 17:40
уже как есть. ему на выходе нужна дата, пусть будет дата
0
 Аватар для anton-sf
128 / 64 / 14
Регистрация: 29.03.2015
Сообщений: 265
10.11.2016, 17:47
unick12345, теоретически из этой цитаты выходит что нужна конечная дата
Цитата Сообщение от Rikozenit Посмотреть сообщение
Написал функцию расчёта срока изготовления
Добавлено через 27 секунд
А я почему-то подумал что количество дней на само производство

Добавлено через 28 секунд
Ага, ну эта цитата и так и так понимается ))

Добавлено через 2 минуты
Всё, я понял, нужна именно конечная дата,
А1 это стартовая дата
А2 это теоретическая конечная дата
А сама функция и нужна из-за коэффициента увеличения срока
То есть подправить конечную дату с учетом коэффициента

Добавлено через 1 минуту
Я одного понять не могу, почему ТС от стартовой даты отнимает разницу между стартом и финишем
Цитата Сообщение от Rikozenit Посмотреть сообщение
A = A1 - (A1 - A2) * K
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
10.11.2016, 17:48
это уже как даты проставишь A1>A2 или наоборот
0
 Аватар для anton-sf
128 / 64 / 14
Регистрация: 29.03.2015
Сообщений: 265
10.11.2016, 17:53
Вот вариант с использованием типа Variant
Visual Basic
1
2
3
4
5
6
7
8
9
Public Function FSrok(ByVal A1 As Variant, ByVal A2 As Variant, ByVal K As Variant) As Variant
    Dim A As Variant
        If IsDate(A1) And IsDate(A2) Then
            If DateValue(A1) > 0 And DateValue(A2) > 0 Then
                ' высчитывание даты
            End If
        End If
    FSrok = A
End Function
Добавлено через 41 секунду
unick12345, ТС указал что
Цитата Сообщение от Rikozenit Посмотреть сообщение
Старта (А1) и Финиша (А2)
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
10.11.2016, 17:53
anton-sf, с этим ты перемудрил
Visual Basic
1
If IsDate(A1) And IsDate(A2) Then
0
 Аватар для anton-sf
128 / 64 / 14
Регистрация: 29.03.2015
Сообщений: 265
10.11.2016, 18:03
unick12345, с чего бы ?

Добавлено через 8 минут
Проверил ещё раз - код работает как надо )
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
11.11.2016, 07:12
Цитата Сообщение от anton-sf Посмотреть сообщение
Rube, данный код всегда будет возвращать True, независимо от содержимого, так как выясняется тип переменной
Ну так ТС пишет
Цитата Сообщение от Rikozenit Посмотреть сообщение
Даты А1 или А2 может не быть
, значит не надо объявлять в параметрах as Date. Можно до вызова функции проверять обе переменные дабы время не терять.
0
 Аватар для Rikozenit
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156
11.11.2016, 10:26  [ТС]
anton-sf, unick12345, Rube,
Функция FSrok должна возвращать ДАТЫ Финишей для производственных участков, в зависимости от Даты запуска и Срока сдачи, а также от коэффициента К (дробного, например, 0,72), который зависит от очерёдности участка в производственной цепочке.
Но, если в поле Дата запуска или в поле Срок Сдачи нет даты, функция не должна возвращать ничего(оставлять поля пустыми), а она возвращает #Ошибка.
Миниатюры
Изменение формата даты  
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
11.11.2016, 10:28
Rikozenit, какой из кодов использовал?
0
 Аватар для Rikozenit
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156
11.11.2016, 10:33  [ТС]
unick12345, все поочерёдно попробовал(( Каждый раз одно и тоже: #Ошибка...
Как он проскакивает проверки на отсутствие данных в полях Запуска и Срока, я не понимаю... Уже даже два If делал, для поочерёдной проверки (мало ли AND коряво работает), всё равно без толку..
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
11.11.2016, 10:36
этот код сколько у себя мучаю
Visual Basic
1
2
3
4
5
Public Function FSrok(ByVal A1 As Date, ByVal A2 As Date, ByVal K As Variant) As Variant
    If DateValue(A1) <> 0 And DateValue(A2) <> 0 Then
        FSrok = Format(A1 - (A1 - A2) * K, "dd.mm.yyyy")
    End If
End Function
ни одной ошибки. только если у тебя там еще какая-нибудь формула в ячейках
0
 Аватар для Rikozenit
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156
11.11.2016, 10:46  [ТС]
unick12345,
Цитата Сообщение от unick12345 Посмотреть сообщение
этот код сколько у себя мучаю
Вот прямо сейчас его вставил. Всё по-прежнему....
В ячейках вот такие формулы:
Финиш_компл_пл1: IIf([Автосроки]=Истина;IIf([автосрок_к]=Истина;Fsrok([Срок_сдачи];[Дата_запуска];0,82);[Финиш_компл_пл]);[Финиш_компл_пл])
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
11.11.2016, 10:50
формат данных правильный указал? для даты и коеф?
0
 Аватар для Rikozenit
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156
11.11.2016, 11:50  [ТС]
unick12345,
Так я же скопировал это целиком без изменений:
Visual Basic
1
2
3
4
5
Public Function FSrok(ByVal A1 As Date, ByVal A2 As Date, ByVal K As Variant) As Variant
    If DateValue(A1) <> 0 And DateValue(A2) <> 0 Then
        FSrok = Format(A1 - (A1 - A2) * K, "dd.mm.yyyy")
    End If
End Function
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
11.11.2016, 12:08
я о другом. проверь через отладчик какие данные поступают в данную функцию. если все норма, тогда проверяй остальную формулу
0
 Аватар для Rikozenit
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156
11.11.2016, 12:08  [ТС]
unick12345,
Походу решил проблему....) Добавил проверку наличия дат прямиком в Построитель выражения для ячеек с Финишными датами:
Финиш_компл_пл1: IIf([Автосроки]=Истина;IIf([автосрок_к]=Истина;IIf(IsNull([Срок_сдачи]);Null;IIf(IsNull([Дата_запуска]);Null;Fsrok([Срок_сдачи];[Дата_запуска];0,82)));[Финиш_компл_пл]);[Финиш_компл_пл])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.11.2016, 12:08

Макрос для изменения формата даты
Уважаемые форумчане, может кто-то предложить макрос для перевода даты в формате 12/01/2016 в 12.01.2016? Просто горим

Макрос для смены формата даты
Добрый день ! Как с помощью макроса поменять формат даты в столбце данных на dd/mm/yyyy для дальнейшего импорта xls-файла в базу данных ?

Изменение формата столбца
Всем добрый день! Столкнулся с такой проблемой.. Есть колонка куда вставляется дата строкой в формате ДД.ММ.ГГГГ. Есть код,...

Изменение формата столбца
Доброго времени суток! У меня такая проблема: Я перевожу из файла .txt вида, например, такого: 18.12.2010 17:44:33 ; 55.6 ; 33.1 ...

Изменение формата ячейки
Всем привет ))) 1. Как в Excel-e в ячейке с формулой, сделать некоторые числа подстрочными (числа рядом с О2, БПК5, NH4), файл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru