Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 03.12.2014
Сообщений: 329
1

Формула с датой

13.03.2017, 15:27. Показов 4217. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дорогие форумяне! помогите с формулой

нужно высчитывать разницу между текущим днем и прошлым

если в ячейку А1 загнать формулу TODAY(), а в А2 - Date, то нет проблем.... ActiveCell=А1-А2... все работает

но если формулу TODAY() внести в ActiveCell сразу, то уже не выходит

Код
ActiveCell.FormulaR1C1 = "=TODAY()-" & Cells(2, 1)
если считать так
Код
ActiveCell.FormulaR1C1 = "=TODAY()-" & 3
, то тоже считает, но саму ячейку с формулой не хочет
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2017, 15:27
Ответы с готовыми решениями:

Если пусто - одна формула, если есть значение - другая формула
Добрый вечер Прошу помощи с формулой - например если в ячейке А1 есть число, то в формуле В3...

Операции с датой
программа спрашевает имя и дату раждения. после того как мы это вывели программа показывает сколько...

Счетчик с датой
Добрый день! Веду таблицу в Excel и решил автоматизировать процесс внесения данных в таблицу. Но...

Работа с датой
Привет:) Эт снова я.. по сути программа написанна, но в ней один косяк. Надо написать...

12
224 / 135 / 45
Регистрация: 08.09.2012
Сообщений: 283
Записей в блоге: 1
13.03.2017, 17:30 2
Лучший ответ Сообщение было отмечено Оксана33 как решение

Решение

Visual Basic
1
2
3
Public Function RaznitcaDat(a, b)
    RaznitcaDat = DateDiff("d", a, b)
End Function
1
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
13.03.2017, 18:37 3
Лучший ответ Сообщение было отмечено Оксана33 как решение

Решение

Цитата Сообщение от Оксана33 Посмотреть сообщение
нужно высчитывать разницу между текущим днем и прошлым
Разница между текущим днем и прошлым, всегда = 1 день (без учёта часов, минут и секунд)

Если же в указанной ячейке введён не прошлый день, то ввести формулу, возвращающую их разницу, можно, например, так :

Visual Basic
1
ActiveCell = "=TODAY()-" & CDbl(Cells(2, 1))
или

Visual Basic
1
ActiveCell = "=TODAY()-" & Cells(2, 1).Value2
1
1 / 1 / 0
Регистрация: 03.12.2014
Сообщений: 329
17.03.2017, 20:37  [ТС] 4
pashulka, объясни пожалуйста почему CDbl - он конвертирует его в число, которое Эксель интерпретирует как дату?
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
17.03.2017, 20:42 5
Потому, что дата это всего лишь количество(читайте число) дней, прошедших с 1 января 1900 года (или 2 января 1904 года, если в Excel установлена соответствующая опция)
1
1 / 1 / 0
Регистрация: 03.12.2014
Сообщений: 329
17.03.2017, 21:27  [ТС] 6
но я не поняла при чем тут Double

Добавлено через 1 минуту
aequit, можно ли "d" заменить DateInterval.Day?
0
224 / 135 / 45
Регистрация: 08.09.2012
Сообщений: 283
Записей в блоге: 1
17.03.2017, 21:39 7
Цитата Сообщение от Оксана33 Посмотреть сообщение
можно ли "d" заменить DateInterval.Day?
"d" это и есть строковое значение DateInterval.Day
https://msdn.microsoft.com/ru-... s.90).aspx
1
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
17.03.2017, 21:50 8
Visual Basic
1
2
3
[A1].Value = Now
[A1].NumberFormat = "General"
MsgBox TypeName([A1].Value)
1
1 / 1 / 0
Регистрация: 03.12.2014
Сообщений: 329
17.03.2017, 22:04  [ТС] 9
я там уже была) но если в формуле меняешь на DateInterval.Day то не выходит

Добавлено через 7 минут
я просто не пойму как Double это делает с датой, я думала что он предназначен для чисел с запятыми
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
17.03.2017, 22:18 10
Ещё раз повторю, дата это и есть число, например, 17.03.2017 12:00 это 42811,5

Visual Basic
1
2
MsgBox CDate(42811.5)
MsgBox CDbl(#3/17/2017 12:00:00 PM#)
1
1 / 1 / 0
Регистрация: 03.12.2014
Сообщений: 329
18.03.2017, 12:07  [ТС] 11
я не пойму... cdbl для того, чтобы преобразовать в число? я думала, что он для другого служит

тогда почему не CLng или CSng, что для меня более логично бы звучало или даже CInt, но только с ним какая то засада - в экселе преобразовует, а вот в vba - нет
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
18.03.2017, 16:15 12
Лучший ответ Сообщение было отмечено Оксана33 как решение

Решение

В Excel нет стандартной функции рабочего листа CInt, а есть Int(Целое)
А что касается VB(A), то функция CInt, при конвертации даты в число, во-первых отбросит время(дробную часть), а во-вторых, будет работать только с датами до 16.09.1989 (включительно)
1
1 / 1 / 0
Регистрация: 03.12.2014
Сообщений: 329
21.03.2017, 18:42  [ТС] 13
ясно, спасибо за подробный ответ)
0
21.03.2017, 18:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2017, 18:42
Помогаю со студенческими работами здесь

Работа с датой на VBA
Здравствуйте! Есть книга, состоящая из 12 листов (названия месяцев). Содержание каждого листа...

Колонтитул с динамической датой
Задача: колонтитул в правом верхнем углу рабочего листа имеет заголовок "Неделя от: ". после...

VBA в Excel: работа с датой
Вот несколько вопросов начинающего: - есть ли в VBA (используется в Excel от MSOffice 2000)...

Добавление столбца с датой в цикле
Всем доброго времени суток! Я, как обычно, нуждаюсь в вашей помощи..потому что спустя сутки я не...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru