Как преобразовать дату в текст в excel vba

I have a date column in EXCEL with the date in the format — 1/27/2019. I want to write a script in VBA to extract just the year portion (2019) and put it in another column.

Do I convert the Date into String first? And then split the String using

`Split(date_as_string, "/")

to get the year portion??

How can I convert the Date into String to achieve this? Any other approach to solve this problem is also appreciated.

Pᴇʜ's user avatar

Pᴇʜ

56k9 gold badges49 silver badges73 bronze badges

asked Jan 27, 2019 at 15:47

Krithika Raghavendran's user avatar

If your date column is in true date format then Excel YEAR Function can be used to return value of the year in another column. Date reflected in column in this case is in my system local date format. It may be different in your system but YEAR will work as per your date system.

year_snapshot

EDIT:
If you want to go for VBA then example of macro is:

Sub Year_Only()
    Dim yr As String
    yr = Year(Range("A1"))
    Range("B1").Value = yr
End Sub

year_vba

answered Jan 27, 2019 at 16:13

skkakkar's user avatar

Something like

Sub JustYear()
    Dim yr As Long
    yr = Split(Range("A1").Text, "/")(2)
    Range("B1").Value = yr
End Sub

enter image description here

answered Jan 27, 2019 at 15:51

Gary's Student's user avatar

Gary’s StudentGary’s Student

95.3k9 gold badges58 silver badges98 bronze badges

For text representing the year,

range("A1") = format(cdate(date_as_string), "yyyy")

To get a true number representing the year,

range("A1") = val(format(cdate(date_as_string), "yyyy"))

answered Jan 27, 2019 at 15:53

Just use the Year() function:

Option Explicit

Sub test()
    Dim yea As Integer
    Dim r As Range

    Set r = Range("a1")
    yea = year(r.Value)
    Debug.Print yea
End Sub

answered Jan 27, 2019 at 16:27

I am trying to get the Date as a string formatted yyyy-mm-dd.

I have tried various things with strange results:

Dim mydate As String
mydate = Date
mydate = Year(Date)
mydate = Month(Date)
mydate = Day(Date)
  1. The first one gives 11/02/ without the year.

I can try to concatenate the data but:

  1. The second gives the year OK
  2. However the third gives month as 2 instead of 02
  3. Similar for fourth.

Any clarification or an example would be very welcome.

feetwet's user avatar

feetwet

3,1967 gold badges45 silver badges83 bronze badges

asked Feb 11, 2016 at 16:53

Studix's user avatar

1

Use the Format function from the VBA.Strings built-in module:

Debug.Print Format(Now, "YYYY-MM-DD")

answered Feb 11, 2016 at 17:05

Mathieu Guindon's user avatar

Mathieu GuindonMathieu Guindon

69.4k8 gold badges110 silver badges232 bronze badges

3

Dim sToday As String
sToday = CStr(Date)

That gives sToday value, e.g. «2020-12-31», in the format of my system’s date.

answered Dec 31, 2020 at 19:46

Marek M's user avatar

In some VBA, the Format() function is not available. In this case, you can do it the old fashion:

y = cstr(year(now))
m = right("0" + cstr(month(now)),2)
d = right("0" + cstr(day(now)),2)   
mydate = y + "-"+ m + "-" + d

answered Jul 29, 2020 at 13:01

Philippe's user avatar

PhilippePhilippe

5488 silver badges24 bronze badges

  • Remove From My Forums
  • Question

  • I would like to convert todays date into text or a whole number representing the date.  Example: 10/11/0 into 10-11-10 or 101110.  The purpose of this is to save a workbook as todays date with one click («name101110.xlsm»).  I have
    code that works to save but needs the user to provide the date.  Is there a way to convert the date to a usable format for file saving?

    thanks in advance

Answers

  • In VBA you can create a string variable in this format using:

    Dim sDate As String

    sDate = Format(Now(), «ddmmyy»)

    Hope that helps.

    • Marked as answer by

      Monday, October 18, 2010 9:33 AM

Преобразование чисел, дат и строк в настраиваемый текстовый формат из кода VBA Excel с помощью функции Format. Синтаксис, параметры, символы, примеры.

Format – это функция, которая преобразует число, дату или строку в текст, отформатированный в соответствии с именованным выражением формата или инструкциями, составленными из специальных символов.

Синтаксис и параметры

Format(Expression, [FormatExpression], [FirstDayOfWeek], [FirstWeekOfYear])

  • Expression – любое допустимое выражение (переменная), возвращающее числовое значение или строку (обязательный параметр).
  • FormatExpression – выражение формата, именованное или содержащее инструкции из специальных символов (необязательный параметр).
  • FirstDayOfWeek – константа, задающая первый день недели (необязательный параметр).
  • FirstWeekOfYear – константа, задающая первую неделю года (необязательный параметр).

Именованные выражения форматов

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

Имя формата Описание
General Date Стандартное отображение даты и времени в соответствии с параметрами системы.
Long Date Длинный формат даты.
Medium Date Средний формат даты.
Short Date Краткий формат даты.
Long Time Длинный формат времени.
Medium Time Средний формат времени.
Short Time Краткий формат времени.

Проверьте отображение даты и времени с использованием именованных форматов на вашем компьютере при помощи следующего кода VBA Excel:

Sub FormatDateTime()

MsgBox «General Date:  « & Format(Now, «General Date») & vbNewLine _

& vbNewLine & «Long Date:  « & Format(Now, «Long Date») & vbNewLine _

& vbNewLine & «Medium Date:  « & Format(Now, «Medium Date») & vbNewLine _

& vbNewLine & «Short Date:  « & Format(Now, «Short Date») & vbNewLine _

& vbNewLine & «Long Time:  « & Format(Now, «Long Time») & vbNewLine _

& vbNewLine & «Medium Time:  « & Format(Now, «Medium Time») & vbNewLine _

& vbNewLine & «Short Time:  « & Format(Now, «Short Time»)

End Sub

Скорее всего, результат будет таким:

Отображение даты и времени в соответствии с именованными форматами

Именованные форматы чисел

Имя формата Описание
General Number Стандартное отображение числа без знака разделителя групп разрядов.
Currency Денежный формат.
Fixed Отображение числа без знака разделителя групп разрядов с двумя цифрами после разделителя целой и дробной части.
Standard Отображение числа со знаком разделителя групп разрядов и с двумя цифрами после разделителя целой и дробной части.
Percent Процентный формат: отображение числа, умноженного на 100, со знаком процента (%), добавленного справа.
Scientific Отображение числа в экспоненциальном виде.
Yes/No Возвращается «Нет», если число равно 0, иначе отображается «Да».
True/False Возвращается «Ложь», если число равно 0, иначе отображается «Истина».
On/Off Возвращается «Выкл», если число равно 0, иначе отображается «Вкл».

Проверяем работу именованных форматов на числах 2641387.7381962 и 0 с помощью кода VBA Excel:

Sub FormatNumber()

Dim n As Double

n = 2641387.7381962

‘n = 0

MsgBox «Форматируемое число = « & n & vbNewLine _

& vbNewLine & «General Number:  « & Format(n, «General Number») & vbNewLine _

& vbNewLine & «Currency:  « & Format(n, «Currency») & vbNewLine _

& vbNewLine & «Fixed:  « & Format(n, «Fixed») & vbNewLine _

& vbNewLine & «Standard:  « & Format(n, «Standard») & vbNewLine _

& vbNewLine & «Percent:  « & Format(n, «Percent») & vbNewLine _

& vbNewLine & «Scientific:  « & Format(n, «Scientific») & vbNewLine _

& vbNewLine & «Yes/No:  « & Format(n, «Yes/No») & vbNewLine _

& vbNewLine & «True/False:  « & Format(n, «True/False») & vbNewLine _

& vbNewLine & «On/Off:  « & Format(n, «On/Off»)

End Sub

Получаем следующий результат:

Отображение числа в соответствии с именованными форматамиОтображение нуля в соответствии с именованными форматами числа

Вместо вопросительного знака в отображении числа в формате Currency, по идее, должен быть знак валюты (₽ или руб.).

Специальные символы для выражений форматов

Символы для форматов даты и времени

Символ Описание
Точка (.) Разделитель компонентов даты (день, месяц, год). Используется при отображении месяца в виде числа.
Пробел Разделитель компонентов даты (день, месяц, год). Используется при отображении месяца прописью.
Двоеточие (:) Разделитель компонентов времени (часы, минуты, секунды).
d День в виде числа без нуля в начале (1–31).
dd День в виде числа с нулем в начале (01–31).
m Месяц в виде числа без нуля в начале (1–12). Если (m) следует после (h) или (hh), отображаются минуты (0–59).
mm Месяц в виде числа с нулем в начале (01–12). Если (mm) следует после (h) или (hh), отображаются минуты (00–59).
mmm Месяц прописью в сокращенном виде (янв–дек).
mmmm Полное название месяца (январь–декабрь).
y День года в виде числа (1–366).
yy Год в виде 2-значного числа (00–99).
yyyy Год в виде 4-значного числа (1900–9999).
h Часы в виде числа без нуля в начале (0–23).
hh Часы в виде числа с нулем в начале (00–23).
n (m) Минуты в виде числа без нуля в начале (0–59).
nn (mm) Минуты в виде числа с нулем в начале (00–59).
s Секунды в виде числа без нуля в начале (0–59).
ss Секунды в виде числа с нулем в начале (00–59).

В этой таблице перечислены далеко не все символы для выражений форматов даты и времени. Вы можете ознакомиться со всеми символами, в том числе и для форматирования чисел, на сайте разработчика.

Примеры отображения даты с помощью разных по количеству наборов символа d:

Sub DataIsD()

MsgBox «d:  « & Format(Now, «d») & vbNewLine _

& vbNewLine & «dd:  « & Format(Now, «dd») & vbNewLine _

& vbNewLine & «ddd:  « & Format(Now, «ddd») & vbNewLine _

& vbNewLine & «dddd:  « & Format(Now, «dddd») & vbNewLine _

& vbNewLine & «ddddd:  « & Format(Now, «ddddd») & vbNewLine _

& vbNewLine & «dddddd:  « & Format(Now, «dddddd»)

End Sub

Форматы даты, полученные с помощью разных по количеству наборов символа d

Символы для числовых форматов

Символ Описание
Точка (.) Десятичный разделитель.
Запятая (,) Разделитель групп разрядов. В отображаемых числах заполняется пробелом.
(0) Заполнитель, который отображает цифру или ноль. Используется, когда нужны ведущие нули или нули в конце числа.
(#) Заполнитель, который отображает цифру или ничего не отображает. Используется, когда не нужны ведущие нули или нули в конце числа.
(%) Заполнитель процента. Выражение умножается на 100, а знак процента (%) вставляется на той позиции, где он указан в строке формата.
(E- E+ e- e+) Экспоненциальный формат.

Примеры использования символов в выражениях числовых форматов VBA Excel:

Sub FormatNumber2()

Dim n As Double

n = 2641387.7381962

‘n = 0.2397842

MsgBox «Форматируемое число = « & n & vbNewLine _

& vbNewLine & «0.##:  « & Format(n, «0.##») & vbNewLine _

& vbNewLine & «000.###:  « & Format(n, «000.###») & vbNewLine _

& vbNewLine & «#,###.###:  « & Format(n, «#,###.###») & vbNewLine _

& vbNewLine & «0 %:  « & Format(n, «0 %») & vbNewLine _

& vbNewLine & «0.### E-:  « & Format(n, «0.### E-«) & vbNewLine _

& vbNewLine & «0.### E+:  « & Format(n, «0.### E+»)

End Sub

Символы для текстовых форматов

Символ Описание
At-символ (@) Заполнитель для символов, отображающий знак или пробел.
Амперсанд (&) Заполнитель для символов, отображающий знак или ничего (пустая строка).
Меньше (<) Принудительный перевод всех буквенных символов в нижний регистр.
Больше (>) Принудительный перевод всех буквенных символов в верхний регистр.

Примеры использования символов в выражениях строковых форматов VBA Excel:

Sub FormatString()

MsgBox «Номер телефона:  « & Format(«1234567890», «+7 (@@@) @@@-@@-@@») & vbNewLine _

& vbNewLine & «Серия и номер паспорта:  « & Format(«1234567890», «&& && &&&&») & vbNewLine _

& vbNewLine & «Нижний регистр:  « & Format(«Нижний регистр», «<«) & vbNewLine _

& vbNewLine & «Верхний регистр: « & Format(«Верхний регистр», «>»)

End Sub

Результаты форматирования строк с помощью специальных символов для функции Format

Форматы для различных значений одного выражения

Различные форматы для разных числовых значений

В выражении формата для чисел предусмотрено от одного до четырех разделов, отделяемых друг от друга точкой с запятой. Отображаемая строка зависит от значения, возвращенного параметром Expression функции Format.

Количество разделов Результат форматирования
Один раздел Выражение формата применяется ко всем значениям.
Два раздела Первый раздел применяется к положительным значениям и нулям, второй – к отрицательным значениям.
Три раздела Первый раздел применяется к положительным значениям, второй – к отрицательным значениям, третий – к нулям.
Четыре раздела Первый раздел применяется к положительным значениям, второй – к отрицательным значениям, третий – к нулям, четвертый – к значениям Null.

Пример использования четырех разделов в выражении формата числовых значений:

Sub FormatDifferentValues()

MsgBox «Число 1234,5678:  « & _

Format(1234.5678, «#,##0.00 руб.;Отрицательное число;Ноль рублей;Значение Null») _

& vbNewLine & vbNewLine & «Число -25:  « & _

Format(25, «#,##0.00 руб.;Отрицательное число;Ноль рублей;Значение Null») _

& vbNewLine & vbNewLine & «Число 0:  « & _

Format(0, «#,##0.00 руб.;Отрицательное число;Ноль рублей;Значение Null») _

& vbNewLine & vbNewLine & «Null:  « & _

Format(Null, «#,##0.00 руб.;Отрицательное число;Ноль рублей;Значение Null»)

End Sub

Различные форматы для разных строковых значений

В выражении формата для строк предусмотрено до двух разделов, отделяемых друг от друга точкой с запятой. Отображаемая строка зависит от текста, возвращенного параметром Expression функции Format.

Количество разделов Результат форматирования
Один раздел Выражение формата применяется ко всем строковым данным.
Два раздела Первый раздел применяется к строковым данным, второй – к значениям Null и пустым строкам («»).

Пример использования двух разделов в выражении формата строк:

Sub FormatString2()

MsgBox «Строка «Белка»:  « & _

Format(«Белка», «@;Пустая строка или Null») _

& vbNewLine & vbNewLine & «Пустая строка:  « & _

Format(«», «@;Пустая строка или Null») _

& vbNewLine & vbNewLine & «Строка «Null»:  « & _

Format(«Null», «@;Пустая строка или Null») _

& vbNewLine & vbNewLine & «Значение Null:  « & _

Format(Null, «@;Пустая строка или Null»)

End Sub

Как-то пришлось создать базу в Excel по дням на весь год. Для дальнейшего управления мне надо было перевести дату в текст. 

Дата в текст

Можно было просто выставить начальную дату и потом протянуть ее, но дело в том, что когда ячейка обладала типом «Дата», появлялись кое-какие глюки. Пришлось перевести ее в текстовый тип. И тут снова проблема – если формат ячейки типа «Дата» переводить в тип «Текст», выходит вот такая штука:

Даты в Эксель

Не знаю, как всем, а мне легче было накидать маленький макрос.

Visual Basic в Excel

Двойным щелчком по вкладке модулей в открывшемся окне накидал следующее:

Макросы в Экселе

Разбор макроса. В нем я использую три переменные:

  • newdate – тип «Дата» для перебора даты,
  • dateWrite – тип «Текст» для перевода даты в текст,
  • а – число для смены ячеек.

а = 2 – первоначальный номер ячейки. Затем переменной newdate присваиваем первоначальную дату «1 января 2021 года» – #1/1/2021#, запускаем цикл, пока год даты не изменится на 2022. 
В цикле переменной dateWrite присваивается дата, записываем в ячейку значение dateWrite, затем номер ячейки мы увеличиваем на один, а дату – на один день. И цикл запускается заново.

Текс полного макроса:

Sub Newyear()
    Dim newdate As Date
    Dim dateWrite As String
    a = 2
    Date = #1/1/2021#
    newdate = Date
    dateWrite = year(newdate)
    Sheets(dateWrite).Select
    Do
        dateWrite = newdate
        Range(«A« & a).Value = dateWrite
        a = a + 1
        newdate = newdate + 1
    Loop Until year(newdate) = 2022
    
End Sub

Прочел статью про функцию сегодня(), вспомнил про этот метод и решил поделиться им. Это моя первая статья, так что строго не судите. Может, кому и пригодится.

Понравилась статья? Поделить с друзьями:
  • Как преобразовать дату в номер недели excel
  • Как преобразовать дату в неделю excel
  • Как преобразовать дату в день недели в excel по дате
  • Как преобразовать данные в число excel
  • Как преобразовать данные csv в excel