Date to string in excel vba

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 badges109 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

BAlGaInTl

Well-known Member

Joined
May 7, 2003
Messages
1,082


  • #1

Hey all…

I want to prefix a filename in my macro with the date in the format.

yyyymmdd

To do this, I want to create a string (sDate) that will go on to be used with the GetSaveAsFilename function.

I’ve tried setting a string equal to the date function, but of course I get forward slashes in the string and that won’t do. I also tried using the Year, Month, and Day functions applied to Date as well, but for example in January, I get 1 as the month and not 01.

What am I missing?

Excel Facts

Fastest way to copy a worksheet?

Hold down the Ctrl key while dragging tab for Sheet1 to the right. Excel will make a copy of the worksheet.

daniels012

daniels012

Well-known Member

Joined
Jan 13, 2005
Messages
5,219


  • #2

If you want a formula to do it:
=TEXT(D5,»yyyymmdd»)
will work.

If you want VBA , write back.

MIchael

BAlGaInTl

Well-known Member

Joined
May 7, 2003
Messages
1,082


  • #3

Yes, I’m looking for VBA…

parmel

Active Member

Joined
Aug 24, 2005
Messages
324


  • #4

You can use daniels012’s construction in a macro as follows:

Sub mydate()
Dim sDate As String
sDate = Application.WorksheetFunction.Text(Cells(1, 1), «yyyymmdd»)
MsgBox sDate
End Sub

This assumes the date is in A1

parmel

Active Member

Joined
Aug 24, 2005
Messages
324


  • #5

Oops, sorry daniels012. It was your solution — I shouldn’t have jumped in.

Scott Huish

Scott Huish

MrExcel MVP

Joined
Mar 17, 2004
Messages
19,961
Office Version
  1. 365
Platform
  1. Windows


  • #6

No need to call a worksheet function, assuming date in A1:

Code:

Sub mydate()
Dim sDate As String
sDate = Format(Range("A1"), "yyyymmdd")
MsgBox sDate
End Sub

BAlGaInTl

Well-known Member

Joined
May 7, 2003
Messages
1,082


  • #7

No need to call a worksheet function, assuming date in A1:

Code:

Sub mydate()
Dim sDate As String
sDate = Format(Range("A1"), "yyyymmdd")
MsgBox sDate
End Sub

Thanks…

I modified it slightly to this:

Code:

Sub mydate()
Dim sDate As String
sDate = Format(Date, "yyyymmdd")
MsgBox sDate
End Sub

It seems to be working.

Similar threads

Joe4

Преобразование чисел, дат и строк в настраиваемый текстовый формат из кода 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

In this Article

  • Format Dates in VBA
  • NumberFormat – Dates
  • Short Date
  • Long Date
  • Custom dates
  • VBA Format Function
  • VBA Custom Format Builder
  • VBA Format Date in Access

This tutorial will demonstrate how to format dates using VBA.

Format Dates in VBA

There are two methods to format dates using VBA.

  1. The NumberFormat property of Cells / Ranges – To format dates stored in cells
  2. The VBA Format function – To format dates in VBA (ex. variables)

NumberFormat – Dates

The default number format of a cell in Excel is General. You can display values as numbers, text, dates, percentages or currencies by changing the number format. The NumberFormat property can be used in VBA to set the number format of dates in a cell or range.

Note: In order to see the different standard date formats available in Excel go to Home>Number and you’ll see options such as Short Date, Long Date and Time.

vba number format
Number Format Options

Short Date

The Short date number formatting option displays the date in a short, numerical format.

The following code will set the .NumberFormat property of cell A1 to Short date:

Range("A1").NumberFormat = "mm/dd/yyyy"

Long Date

Long date number formatting displays the date in a longer, written format. The following code will set the .NumberFormat property of cell A1 to Long date:

Range("A1").NumberFormat = "dddd, mmmm dd, yyyy"

Custom dates

In order to see the custom number format codes that you can use in VBA to format dates, go to Home>Number and click the Dialog Box Launcher.  Select the Number tab and choose Custom.

vba number format date

You can either select the custom built-in formats for your date or create your own user-defined date formats. The following code will set the .NumberFormat property of cell A1 to a built-in custom date format:

Range("A1").NumberFormat = "mmm-yy"

The result is:

Custom Date Format in VBA

The following code will set the .NumberFormat property of cell A1, to a user-defined custom date format:

Range("A1").NumberFormat = "dddd-dd-mmm-yy"

The result is:

User Defined Custom Date Formatting

By reviewing Excel’s pre-built examples you can learn how NumberFormats should be entered. For more information, read Microsoft’s documentation on number formats for dates.

VBA Format Function

As mentioned above, the NumberFormat method is appropriate for setting the Numberformat of dates stored in Excel cells.  In VBA, you can use the Format Function to convert dates to strings with certain date formatting.

You would use the following syntax to format dates:

Format(String_Representation, NumberFormatCode) where:

String_Representation – the text string representing the date.

NumberFormatCode – the number format code specifying the way the date should be displayed.

The following code shows how to format a text string representation of a date as long date format:

Formatting Dates as Long Dates

MsgBox Format("1/1/2010", "dddd, mmmm dd, yyyy")

The result is:

Format Function in VBA

Notice that the Format Function uses the same date formatting syntax as the NumberFormat above.

The following code shows how to format a text string representation of a date as medium date format:

MsgBox Format("09 October 2012", "Medium Date")

The result is:

Medium Date Formatting in VBA

The following code shows how to format a text string representation of a date as a user-defined format:

MsgBox Format("09 October 2012", "dddd: dd/mm/yy")

Custom Formatting

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

VBA Custom Format Builder

Our VBA Add-in: AutoMacro contains a Custom Format Builder for the VBA Editor. This allows you to set custom formats and immediately preview the output for your desired value:

vba custom number format

The VBA Add-in contains numerous other “Code Generators”, an extensive code library, and an assortment of other coding tools.  It’s the ultimate add-in for anyone serious about VBA programming!

VBA Format Date in Access

The VBA Format Date function work exactly the same in Access VBA as in Excel VBA.

Function GetDateFilter() As String
'create a string to get information from 2 date fields on a form in Access
   Dim strDateField As String
   If IsNull(Me.txtSDate) = False Then
      If IsNull(Me.txtEDate) = True Then Me.txtEDate = Me.txtSDate
      If strDateField2 = "" Then
        GetDateFilter = strDateField & " Between #" & Format(Me.txtSDate, "mm/dd/yyyy") & "# And # " & Format(Me.txtEDate, "mm/dd/yyyy") & "#"
      End If
   End If
End Function

totn Excel Functions


This Excel tutorial explains how to use the Excel FORMAT function (as it applies to date values) with syntax and examples.

Description

The Microsoft Excel FORMAT function takes a date expression and returns it as a formatted string.

The FORMAT function is a built-in function in Excel that is categorized as a Date/Time Function. It can be used as a VBA function (VBA) in Excel. As a VBA function, you can use this function in macro code that is entered through the Microsoft Visual Basic Editor.

Syntax

The syntax for the FORMAT function in Microsoft Excel is:

Format ( expression, [ format, [ firstdayofweek, [firstweekofyear] ] ] )

Parameters or Arguments

expression
The date value to format.
format

Optional. It is the format to apply to the expression. You can either define your own format or use one of the named formats that Excel has predefined such as:

Format Explanation
General Date Displays date based on your system settings
Long Date Displays date based on your system’s long date setting
Medium Date Displays date based on your system’s medium date setting
Short Date Displays date based on your system’s short date setting
Long Time Displays time based on your system’s long time setting
Medium Time Displays time based on your system’s medium time setting
Short Time Displays time based on your system’s short time setting
firstdayofweek

Optional. It is a value that specifies the first day of the week. If this parameter is omitted, it assumes that Sunday is the first day of the week. This parameter can be one of the following values:

Constant Value Explanation
vbUseSystem 0 Uses the NLS API setting
VbSunday 1 Sunday (default, if parameter is omitted)
vbMonday 2 Monday
vbTuesday 3 Tuesday
vbWednesday 4 Wednesday
vbThursday 5 Thursday
vbFriday 6 Friday
vbSaturday 7 Saturday
firstweekofyear

Optional. It is a value that specifies the first week of the year. If this parameter is omitted, it assumes that the week that contains January 1 is the first week of the year. This parameter can be one of the following values:

Constant Value Explanation
vbUseSystem 0 Uses the NLS API setting
vbFirstJan1 1 The week that contains January 1
vbFirstFourDays 2 The first week that has at least 4 days in the year
vbFirstFullWeek 3 The first full week of the year

Returns

The FORMAT function returns a string value.

Applies To

  • Excel for Office 365, Excel 2019, Excel 2016, Excel 2013, Excel 2011 for Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000

Type of Function

  • VBA function (VBA)

Example (as VBA Function)

The FORMAT function can only be used in VBA code in Microsoft Excel.

Let’s look at some Excel FORMAT function examples and explore how to use the FORMAT function in Excel VBA code:

Format(#17/04/2004#, "Short Date")
Result: '17/04/2004'

Format(#17/04/2004#, "Long Date")
Result: 'April 17, 2004'

Format(#17/04/2004#, "yyyy/mm/dd")
Result: '2004/04/17'

For example:

Dim LValue As String

LValue = Format(Date, "yyyy/mm/dd")

In this example, the variable called LValue would now contain the date formatted as yyyy/mm/dd.

Hi,
I have attached the macro (Marco-060211) that I have written to format an excel spreadsheet.  I can’t figure out the formatting for the date/time conversion to a string.  

In the attached spreadsheet (TestSheet.xlsx) please check Column AB. It is currently a serial number but needs to be a date displayed as string.  Example: date 2011/05/11  to be 20110511 string.  This date cannot display as date in formular bar.  

Column AC displays as 0621 in cell and 4/5/2011 6:21:00 AM in the formular bar. This column needs to display 0621 as string.

Thanks.

TestSheet-060211.xlsx Marco-060211.txt

Microsoft ApplicationsMicrosoft ExcelVisual Basic Classic

Like this post? Please share to your friends:
  • Date to milliseconds excel
  • Date to date calculation in excel
  • Date setting in excel
  • Date picker for excel скачать
  • Date picker excel 2016