Текст на visual basic в excel

Работа с текстом в коде VBA Excel. Функции, оператор & и другие ключевые слова для работы с текстом. Примеры использования некоторых функций и ключевых слов.

Функции для работы с текстом

Основные функции для работы с текстом в VBA Excel:

Функция Описание
Asc(строка) Возвращает числовой код символа, соответствующий первому символу строки. Например: MsgBox Asc(«/Stop»). Ответ: 47, что соответствует символу «/».
Chr(код символа) Возвращает строковый символ по указанному коду. Например: MsgBox Chr(47). Ответ: «/».
Format(Expression, [FormatExpression], [FirstDayOfWeek], [FirstWeekOfYear]) Преобразует число, дату, время в строку (тип данных Variant (String)), отформатированную в соответствии с инструкциями, включенными в выражение формата. Подробнее…
InStr([начало], строка1, строка2, [сравнение]) Возвращает порядковый номер символа, соответствующий первому вхождению одной строки (строка2) в другую (строка1) с начала строки. Подробнее…
InstrRev(строка1, строка2, [начало, [сравнение]]) Возвращает порядковый номер символа, соответствующий первому вхождению одной строки (строка2) в другую (строка1) с конца строки. Подробнее…
Join(SourceArray,[Delimiter]) Возвращает строку, созданную путем объединения нескольких подстрок из массива. Подробнее…
LCase(строка) Преобразует буквенные символы строки в нижний регистр.
Left(строка, длина) Возвращает левую часть строки с заданным количеством символов. Подробнее…
Len(строка) Возвращает число символов, содержащихся в строке.
LTrim(строка) Возвращает строку без начальных пробелов (слева). Подробнее…
Mid(строка, начало, [длина]) Возвращает часть строки с заданным количеством символов, начиная с указанного символа (по номеру). Подробнее…
Replace(expression, find, replace, [start], [count], [compare]) Возвращает строку, полученную в результате замены одной подстроки в исходном строковом выражении другой подстрокой указанное количество раз. Подробнее…
Right(строка, длина) Возвращает правую часть строки с заданным количеством символов. Подробнее…
RTrim(строка) Возвращает строку без конечных пробелов (справа). Подробнее…
Space(число) Возвращает строку, состоящую из указанного числа пробелов. Подробнее…
Split(Expression,[Delimiter],[Limit],[Compare]) Возвращает одномерный массив подстрок, извлеченных из указанной строки с разделителями. Подробнее…
StrComp(строка1, строка2, [сравнение]) Возвращает числовое значение Variant (Integer), показывающее результат сравнения двух строк. Подробнее…
StrConv(string, conversion) Изменяет регистр символов исходной строки в соответствии с заданным параметром «conversion». Подробнее…
String(число, символ) Возвращает строку, состоящую из указанного числа символов. В выражении «символ» может быть указан кодом символа или строкой, первый символ которой будет использован в качестве параметра «символ». Подробнее…
StrReverse(строка) Возвращает строку с обратным порядком следования знаков по сравнению с исходной строкой. Подробнее…
Trim(строка) Возвращает строку без начальных (слева) и конечных (справа) пробелов. Подробнее…
UCase(строка) Преобразует буквенные символы строки в верхний регистр.
Val(строка) Возвращает символы, распознанные как цифры с начала строки и до первого нецифрового символа, в виде числового значения соответствующего типа. Подробнее…
WorksheetFunction.Trim(строка) Функция рабочего листа, которая удаляет все лишние пробелы (начальные, конечные и внутренние), оставляя внутри строки одиночные пробелы.

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

Ключевые слова для работы с текстом

Ключевое слово Описание
& Оператор & объединяет два выражения (результат = выражение1 & выражение2). Если выражение не является строкой, оно преобразуется в Variant (String), и результат возвращает значение Variant (String). Если оба выражения возвращают строку, результат возвращает значение String.
vbCrLf Константа vbCrLf сочетает в себе возврат каретки и перевод строки (Chr(13) + Chr(10)) и переносит последующий текст на новую строку (результат = строка1 & vbCrLf & строка2).
vbNewLine Константа vbNewLine в VBA Excel аналогична константе vbCrLf, также сочетает в себе возврат каретки и перевод строки (Chr(13) + Chr(10)) и переносит текст на новую строку (результат = строка1 & vbNewLine & строка2).

Примеры

Вывод прямых парных кавычек

Прямые парные кавычки в VBA Excel являются спецсимволами и вывести их, заключив в самих себя или в одинарные кавычки (апострофы), невозможно. Для этого подойдет функция Chr:

Sub Primer1()

    ‘Вывод одной прямой парной кавычки

MsgBox Chr(34)

    ‘Отображение текста в прямых кавычках

MsgBox Chr(34) & «Волга» & Chr(34)

    ‘Вывод 10 прямых парных кавычек подряд

MsgBox String(10, Chr(34))

End Sub

Смотрите интересное решение по выводу прямых кавычек с помощью прямых кавычек в первом комментарии.

Отображение слов наоборот

Преобразование слова «налим» в «Милан»:

Sub Primer2()

Dim stroka

    stroka = «налим»

    stroka = StrReverse(stroka) ‘милан

    stroka = StrConv(stroka, 3) ‘Милан

MsgBox stroka

End Sub

или одной строкой:

Sub Primer3()

MsgBox StrConv(StrReverse(«налим»), 3)

End Sub

Преобразование слова «лето» в «отель»:

Sub Primer4()

Dim stroka

    stroka = «лето»

    stroka = StrReverse(stroka) ‘отел

    stroka = stroka & «ь» ‘отель

MsgBox stroka

End Sub

или одной строкой:

Sub Primer5()

MsgBox StrReverse(«лето») & «ь»

End Sub

Печатная машинка

Следующий код VBA Excel в замедленном режиме посимвольно печатает указанную строку на пользовательской форме, имитируя печатную машинку.

Для реализации этого примера понадобится пользовательская форма (UserForm1) с надписью (Label1) и кнопкой (CommandButton1):

Пользовательская форма с элементами управления Label и CommandButton

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Sub StopSub(Pause As Single)

Dim Start As Single

Start = Timer

    Do While Timer < Start + Pause

       DoEvents

    Loop

End Sub

Private Sub CommandButton1_Click()

Dim stroka As String, i As Byte

stroka = «Печатная машинка!»

Label1.Caption = «»

    For i = 1 To Len(stroka)

        Call StopSub(0.25) ‘пауза в секундах

        ‘следующая строка кода добавляет очередную букву

        Label1.Caption = Label1.Caption & Mid(stroka, i, 1)

    Next

End Sub

Обе процедуры размещаются в модуле формы. Нажатие кнопки CommandButton1 запустит замедленную печать символов в поле надписи, имитируя печатную машинку.


Текст — это функция рабочего листа в Excel, но ее также можно использовать в VBA при использовании свойства диапазона. Эта функция похожа на функцию Worksheet и принимает такое же количество аргументов, которые представляют собой значения, которые необходимо преобразовать, и указанный числовой формат.

Оглавление

  • Текстовая функция Excel VBA
    • Примеры текстовой функции VBA в Excel
      • Пример №1
      • Пример #2
    • Применить форматирование к ячейкам
    • Рекомендуемые статьи

Текстовая функция Excel VBA

ТЕКСТ — это функция, доступная на рабочем листе, но, к сожалению, это не встроенная функция в Excel VBA. Вместо этого нам нужно использовать объект класса функции рабочего листа в VBA для доступа к этой функции. Текст функция в экселе преобразует значение в указанный числовой формат.

Одна из проблем с этой функцией — аргументы. Всякий раз, когда мы используем функцию рабочего листа VBAФункция рабочего листа VBAФункция рабочего листа в VBA используется, когда нам нужно сослаться на конкретный рабочий лист. Когда мы создаем модуль, код запускается на текущем активном листе рабочей книги, но мы можем использовать функцию рабочего листа для запуска кода в определенном классе рабочего листа.Читать далее, мы не видим четкого синтаксиса. как в нашем рабочем листе. Вместо этого он просто говорит «Arg1» и «Arg2».

текстовая функция vba

Примеры текстовой функции VBA в Excel

Ниже приведены примеры функций Excel VBA TEXT.

.free_excel_div{фон:#d9d9d9;размер шрифта:16px;радиус границы:7px;позиция:относительная;margin:30px;padding:25px 25px 25px 45px}.free_excel_div:before{content:»»;фон:url(центр центр без повтора #207245;ширина:70px;высота:70px;позиция:абсолютная;верх:50%;margin-top:-35px;слева:-35px;граница:5px сплошная #fff;граница-радиус:50%} Вы можете скачать этот текстовый шаблон VBA Excel здесь — Текстовый шаблон VBA Excel

Пример №1

Позвольте мне показать вам простой пример TEXT в VBA Excel. Но сначала взгляните на приведенный ниже код в Visual BasicCode. В Visual Basic код VBA относится к набору инструкций, написанных пользователем на языке программирования приложений Visual Basic в редакторе Visual Basic (VBE) для выполнения определенной задачи. Подробнее.

Код:

Sub Text_Example1() Dim FormattingValue As String Dim FormattingResult As String FormattingValue = 0,564 FormattingResult = WorksheetFunction.Text(FormattingValue, «hh:mm:ss AM/PM») MsgBox FormattingResult End Sub

пример текста vba 1.1

Во-первых, мы объявили две переменные в виде строки в VBA.

Dim FormattingValue As String Dim FormattingResult As String

Для первой переменной мы присвоили номер форматирования, который нам нужно отформатировать.

Значение форматирования = 0,564

Теперь для другой переменной мы назначили функцию ТЕКСТ.

FormattingResult = WorksheetFunction.Text(FormattingValue, «чч:мм:сс AM/PM»)

Если вы заметили, мы применили форматирование времени, то есть «чч:мм:сс AM/PM».

Затем, наконец, мы применили окно сообщения VBA. Функция VBA MsgBox — это функция вывода, которая отображает обобщенное сообщение, предоставленное разработчиком. Этот оператор не имеет аргументов, и персонализированные сообщения в этой функции записываются в двойных кавычках, а для значений предоставляется ссылка на переменную. Подробнее, чтобы показать результат.

MsgBox ФорматированиеРезультат

Когда мы запустим функцию кода ТЕКСТ, мы применим формат времени к числу 0,564 и отобразим результат ниже.

пример текста vba 1.3

Итак, мы получили время как «13:32:10».

Пример #2

Как и в примере с форматом даты, в этом примере мы внесли небольшие изменения. Ниже приведен код.

Код:

Sub Text_Example2() Dim FormattingValue As String Dim FormattingResult As String FormattingValue = 43585 FormattingResult = WorksheetFunction.Text(FormattingValue, «DD-MMM-YYYY») MsgBox FormattingResult End Sub

пример текста vba 2.1

Из предыдущего кода мы изменили значение форматирования с 0,565 на 43585 и изменили стиль форматирования на «ДД-МММ-ГГГГ».

Он применит форматирование к числу 43585 в качестве даты, и результат будет следующим.

пример 2.2

Применить форматирование к ячейкам

Мы видели простые примеры. Теперь посмотрим, как работать с ячейками на листе. Для этого примера посмотрите на данные ниже.

пример 3.1

Для всех этих чисел нам нужно применить формат времени. Этот код применит форматирование.

Код:

Sub Text_Example3() Dim k As Integer For k = 1 To 10 Cells(k, 2).Value = WorksheetFunction.Text(Cells(k, 1).Value, «hh:mm:ss AM/PM») Next k End Саб

пример 3.2

Этот код будет проходить через 10 ячеек и применять форматирование ниже.

пример 3.3

Используя функцию VBA TEXT, мы можем применить форматирование чисел к ячейкам.

Рекомендуемые статьи

Эта статья была руководством по текстовой функции VBA. Мы обсудили использование функции «Текст» в Excel VBA и несколько практических примеров. Кроме того, вы можете узнать больше о VBA из следующих статей:

  • Объект коллекции VBA
  • Текстовое поле в VBA
  • Функция InStr в VBA

Text is a worksheet function in Excel, but it can also be used in VBA while using the range property. This function is similar to the Worksheet function and takes the same number of arguments, which are the values one must convert and a specified number format.

Table of contents
  • Excel VBA Text Function
    • Examples of VBA Text Function in Excel
      • Example #1
      • Example #2
    • Apply Formatting to Cells
    • Recommended Articles

Excel VBA Text Function

The TEXT is the function available with the worksheet, but unfortunately, it is not a built-in function in Excel VBA. Instead, we need to use the worksheet function class object in VBA to access this function. The TEXT function in Excel converts a value to a specified number format.

One of the problems with this function is arguments. Whenever we use the VBA worksheet functionThe worksheet function in VBA is used when we need to refer to a specific worksheet. When we create a module, the code runs in the currently active sheet of the workbook, but we can use the worksheet function to run the code in a particular worksheet.read more class, we do not get to see the clear-cut syntax much like in our worksheet. Instead, it just says “Arg1” and “Arg2.”

vba text function

  • Arg1 is the value we need to apply the formatting to.
  • Arg2 is the formatting we need to apply, and we need to specify the formatting code.

VBA Text

You are free to use this image on your website, templates, etc, Please provide us with an attribution linkArticle Link to be Hyperlinked
For eg:
Source: VBA Text (wallstreetmojo.com)

Examples of VBA Text Function in Excel

Below are examples of Excel VBA TEXT functions.

You can download this VBA Text Excel Template here – VBA Text Excel Template

Example #1

Let me show you a simple example of TEXT in VBA Excel. But, first, look at the below code in Visual BasicVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more.

Code:

Sub Text_Example1()

Dim FormattingValue As String
Dim FormattingResult As String

FormattingValue = 0.564

FormattingResult = WorksheetFunction.Text(FormattingValue, "hh:mm:ss AM/PM")

MsgBox FormattingResult

End Sub

vba text example 1.1

Firstly, we have declared two variables as a string in VBA.

Dim FormattingValue As String

Dim FormattingResult As String

For the first variable, we have assigned the formatting number we need to format.

FormattingValue = 0.564

Now, for another variable, we have assigned the TEXT function.

FormattingResult = WorksheetFunction.Text(FormattingValue, "hh:mm:ss AM/PM")

If you observe, we have applied the formatting of time, i.e., “hh:mm:ss AM/PM.”

Then, finally, we applied a VBA message boxVBA MsgBox function is an output function which displays the generalized message provided by the developer. This statement has no arguments and the personalized messages in this function are written under the double quotes while for the values the variable reference is provided.read more to show the result.

MsgBox FormattingResult

When we run the code TEXT function, we will apply the time format to the number 0.564 and display the result below.

vba text example 1.3

So, we got the time as “01:32:10 PM”.

Example #2

Similar to the date format example, we have made some minor changes in this example. Below is the code.

Code:

Sub Text_Example2()

Dim FormattingValue As String
Dim FormattingResult As String

FormattingValue = 43585

FormattingResult = WorksheetFunction.Text(FormattingValue, "DD-MMM-YYYY")

MsgBox FormattingResult

End Sub

vba text example 2.1

From the previous code, we have changed the formatting value from 0.565 to 43585 and changed the formatting style to “DD-MMM-YYYY.”

It will apply the formatting to the number 43585 as the date, and the result is as follows.

example 2.2

Apply Formatting to Cells

We have seen simple examples. Now, look at how to work with cells in a worksheet. For this example, look at the below data.

example 3.1

For all these numbers, we need to apply the time format. This code will apply the formatting.

Code:

Sub Text_Example3()

Dim k As Integer

For k = 1 To 10
Cells(k, 2).Value = WorksheetFunction.Text(Cells(k, 1).Value, "hh:mm:ss AM/PM")
Next k

End Sub

example 3.2

This code will loop through 10 cells and apply the formatting below.

example 3.3

Using the VBA TEXT function, we can apply number formatting to the cells.

Recommended Articles

This article has been a guide to VBA Text Function. We discussed using the Text function in Excel VBA and some practical examples. Also, you can learn more about VBA from the following articles: –

  • VBA Collection Object
  • TextBox in VBA
  • InStr Function in VBA

Return to VBA Code Examples

This tutorial will demonstrate how to use the Text Function in VBA.

The Text function is used in an Excel worksheet to return a portion of a string in a specified format. The Text function is not a VBA function, but can be used in VBA by referring to the Worksheet Function object.

WorksheetFunction.Text

The syntax in VBA would therefore be as follows:

=WorksheetFunction.Text (Arg1, Arg2)

where Arg1 is the original string and Arg2 is the format of the string we want returned.

Sub TestWSFunction()
  Dim dte As String
  Dim strD As String
  dte = "08/05/2021"
  strD= WorksheetFunction.Text(dte, "mmmm")
  MsgBox strD 
End Sub

In the above example, the string variable dte is storing a date.  The Text function then returns the month portion of the date.

VBA Text ReturnMonth

Formatting Numbers with the Text Function

We can use the text function to format numbers in our VBA code.

Sub FormatCurrency()
  Dim strNum As String
  Dim strFormat As String
  strNum = "75896.125"
  strFormat = WorksheetFunction.Text(strNum, "$#,##0.00")
  MsgBox strFormat
End Sub

The string returned in the above example would be $75,896.13.

VBA Text ReturnCurrency

Other examples of number formatting using the Text Function are:

=WorksheetFunction.Text(75896.125, "0")
this will return: "75896"

=WorksheetFunction.Text(75896.125, "0.0")
this will return: "75896.1"

=WorksheetFunction.Text(75896.125, "#,##0")
this will return: "75,896"

However, Excel does have a built in VBA function that we can use instead of the Text function if we wish to format dates and numbers within VBA. This is known as the Format function.

The VBA Format Function

Taking the example above, rather than using WorksheetFunction.Text, we can just use the Format Function to achieve the same results.

=Format(75896.125, "0")
 this will return: "75896" 

=Format(75896.125, "0.0") 
this will return: "75896.1" 

=Format(75896.125, "#,##0") 
this will return: "75,896"

Similarly, we  can use the Format Function to format date portions of a string.

Sub TestFormatFunction() 
Dim dte As String 
Dim strD As String
 dte = "08/05/2021" 
 strD= Format(dte, "mmmm") 
 MsgBox strD 
End Sub

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!
vba save as

Learn More!

VBA Text

Excel VBA Text Function

VBA Text function is only used in VBA. It seems like it converts the numbers to text. But in reality, it converts numbers to any format like Time, Date or number range. For this, we need to allow this function to enable as Class.

If we see the argument of VBA Text, then we will see it consists of Arg1 and Arg2 as shown below.

Syntax of Text

  • Arg1 – Here we will put the value which we want to convert in the standard format.
  • Arg2 – And here we will select the format in which we want to see the output coming as.

Both the variables will be defined as String.

How to Use Excel VBA Text Function?

We will learn how to use a VBA Text function with a few examples in excel.

You can download this VBA Text Excel Template here – VBA Text Excel Template

VBA Text Function – Example #1

We will be converting the text or numbers into the standard format in all the upcoming examples in different ways.

Follow the below steps to use Text function in VBA.

Step 1: Open a Module which is available in the Insert menu tab as shown below.

VBA Text Module

Step 2: In the opened VBA Module, write the subprocedure of VBA Text as shown below.

Code:

Sub VBA_Text1()

End Sub

VBA Text Function Example 1.1

Step 3: As per the syntax of VBA Text, there are two arguments that we will need. So, define the first variable as String where we will be giving the input as shown below.

Code:

Sub VBA_Text1()

Dim Input1 As String

End Sub

VBA Text Function Example 1.2

Step 4: Now define another variable where we will be getting the output. And this would also be as String.

Code:

Sub VBA_Text1()

Dim Input1 As String
Dim Output As String

End Sub

VBA Text Function Example 1.3

Step 5: Now consider any random number which we need to convert into the standard format. This could be the number which we want to see or it could be any random number. Suppose, if we consider a decimal number 0.123 and see what we would get.

Code:

Sub VBA_Text1()

Dim Input1 As String
Dim Output As String

Input1 = 0.123

End Sub

VBA Text Function Example 1.4

Step 6: Now in the other defined variable which is Output, we will use it for putting VBA Text. Now, this function will be used as Worksheet function as shown below.

VBA Text Function Example 1.5

Step 7: Select the VBA Text function from the inbuilt function list. Now as per the syntax we will use our variable and format in which we want to convert that as Arg1 standard format as in which we want to convert that selected number.

Code:

Sub VBA_Text1()

Dim Input1 As String
Dim Output As String

Input1 = 0.123
Output = WorksheetFunction.Text(

End Sub

Example 1.6

Step 8: In the Arg1 we write the Input1 variable which has our number that we need to convert and Arg2 will be the format as HH:MM:SS AM/PM.

Code:

Sub VBA_Text1()

Dim Input1 As String
Dim Output As String

Input1 = 0.123
Output = WorksheetFunction.Text(Input1, "hh:mm:ss AM/PM")

End Sub

Example 1.7

Step 9: Now use MsgBox to see what comes as Output.

Code:

Sub VBA_Text1()

Dim Input1 As String
Dim Output As String

Input1 = 0.123
Output = WorksheetFunction.Text(Input1, "hh:mm:ss AM/PM")

MsgBox Output

End Sub

Example 1.8

Step 10: Now run the code by pressing the F5 key or by clicking on the Play Button. We will get the message box with a message as 02:57:07 AM.

VBA Text Example 1-9

We will see another time if we choose some other number.

Step 11: Now let’s change the input number as 12345 and changing the format of output in DD-MMM-YYYY as shown below.

Code:

Sub VBA_Text2()

Dim Input1 As String
Dim Output As String

Input1 = 12345
Output = WorksheetFunction.Text(Input1, "DD-MM-yyyy")

MsgBox Output

End Sub

VBA Text Example 1-10

Step 12: Now again run the code. We will get the date as 18 Oct 1933

VBA Text Example 1-11

If we know the exact number by which we can get an exact date or time then that will be better.

VBA Text Function – Example #2

There is another direct way to apply VBA Text. For this, we will enter some numbers in the excel sheet as shown below.

Random Numbers Example 2-1

Follow the below steps to use Text function in VBA.

Step 1: In a module, write the subcategory of VBA Text as shown below.

Code:

Sub VBA_Text3()

End Sub

VBA Text Example 2-2

Step 2: Select the range of cells where we want to see the output. Let’s consider those cells be from B1 to B5.

Code:

Sub VBA_Text3()

Range("B1:B5").Value

End Sub

VBA Text Example 2-3

Step 3: Now select the range of cells which we need to convert. Here that range is from cell A1 to A5 along with Worksheet function.

Code:

Sub VBA_Text3()

Range("B1:B5").Value = Range("A1:A5").Worksheet.

End Sub

VBA Text Example 2-4

Step 4: Select the Index function along by evaluating it.

Code:

Sub VBA_Text3()

Range("B1:B5").Value = Range("A1:A5").Worksheet.Evaluate("INDEX(

End Sub

VBA Text Example 2-5

Step 5: Now consider the Text function and select the range that we need to convert. And the format be in multiple zeros.

Code:

Sub VBA_Text3()

Range("B1:B5").Value = Range("A1:A5").Worksheet.Evaluate("INDEX(TEXT(A1:A5,""'000000""),)")

End Sub

VBA Text Example 2-6

Step 6: Now run the code by pressing the F5 key or by clicking on the Play Button. We will see the numbers available in column A now got converted into text with multiple zeros which leads to 6 digit numbers in column B.

VBA Text Example 2-7

Now let’s see, what would happen if we change the output format again from leading zeros to time format.

Step 7: In Arg2, put time format as HH:MM:SS and change the output range cell to C1 to C5 without disturbing the output obtained from the previous code.

Code:

Sub VBA_Text3()

Range("C1:C5").Value = Range("C1:C5").Worksheet.Evaluate("INDEX(TEXT(A1:A5,""hh:mm:ss""),)")

End Sub

HH:MM:SS Format Example 2-8

Step 8: Again run the code. We will see, column C will get filled with the default time format.

Default Time Format Example 2-9

Let’s try another experiment.

Step 9: In this, we will change the output cell range from D1 to D5 where we will see the VBA Text. And change the Arg2, in Date format which is DD-MMM-YYYY as shown below.

Code:

Sub VBA_Text3()

Range("D1:D5").Value = Range("D1:D5").Worksheet.Evaluate("INDEX(TEXT(A1:A5,""DD-MMM-YYYY""),)")

End Sub

DD-MMM-YYYY format Example 2-10

Step 10: Again run the code. This time we will see, the date will be seen in column D. And those dates are in the format that or DD-MMM-YYYY format.

VBA Text Example 2-11

This is how we can change the numbers in any standard format that we want.

Pros & Cons of Excel VBA Text Function

  • This is easy to implement.
  • We can change the numbers in any format that we want to see.
  • We cannot convert any text into the required number format.

Things to Remember

  • VBA Text converts only numbers into numbers. But the format of numbers will be the standard formats such as Date, Time, the combination of Date and Time or any digits sequence.
  • If you are applying and changing the numbers into a format of preceding zeroes, then put the apostrophe before the zeros. So that numbers will get converted into text and the Zeros will appear.
  • If we try to convert any text with VBA Text, then it will give the output as Text only.
  • To get the exact output, we must know the combination of numbers which will provide the exact time and date that we want to see.
  • Once done, always save the complete code in Macro-Enabled format, so that the code will not be lost.

Recommended Articles

This is a guide to VBA Text Function. Here we discuss how to use Text function in excel VBA along with practical examples and downloadable excel template. You can also go through our other suggested articles –

  1. VBA RGB
  2. VBA XML
  3. VBA Subscript out of Range
  4. VBA IsError

Время на прочтение
7 мин

Количество просмотров 312K

Приветствую всех.

В этом посте я расскажу, что такое VBA и как с ним работать в Microsoft Excel 2007/2010 (для более старых версий изменяется лишь интерфейс — код, скорее всего, будет таким же) для автоматизации различной рутины.

VBA (Visual Basic for Applications) — это упрощенная версия Visual Basic, встроенная в множество продуктов линейки Microsoft Office. Она позволяет писать программы прямо в файле конкретного документа. Вам не требуется устанавливать различные IDE — всё, включая отладчик, уже есть в Excel.

Еще при помощи Visual Studio Tools for Office можно писать макросы на C# и также встраивать их. Спасибо, FireStorm.

Сразу скажу — писать на других языках (C++/Delphi/PHP) также возможно, но требуется научится читать, изменять и писать файлы офиса — встраивать в документы не получится. А интерфейсы Microsoft работают через COM. Чтобы вы поняли весь ужас, вот Hello World с использованием COM.

Поэтому, увы, будем учить Visual Basic.

Чуть-чуть подготовки и постановка задачи

Итак, поехали. Открываем Excel.

Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.

Появилась вкладка.

Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):

То есть требуется, чтобы было как минимум две группы, по которым можно объединить товары (в нашем случае это будут Тип и Производитель — в таком порядке). Для того, чтобы предложенный мною алгоритм работал корректно, отсортируйте товары так, чтобы товары из одной группы стояли подряд (сначала по Типу, потом по Производителю).

Результат, которого хотим добиться, выглядит примерно так:

Разумеется, если смотреть прайс только на компьютере, то можно добавить фильтры и будет гораздо удобнее искать нужный товар. Однако мы хотим научится кодить и задача вполне подходящая, не так ли?

Кодим

Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».

И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».

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

Sub FormatPrice()End Sub

Напишем Hello World:

Sub FormatPrice()
    MsgBox "Hello World!"
End Sub

И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.

Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.

Примеры синтаксиса

' Процедура. Ничего не возвращает
' Перегрузка в VBA отсутствует
Sub foo(a As String, b As String)
    ' Exit Sub ' Это значит "выйти из процедуры"
    MsgBox a + ";" + b
End Sub' Функция. Вовращает Integer
Function LengthSqr(x As Integer, y As IntegerAs Integer
    ' Exit Function
    LengthSqr = x * x + y * y
End FunctionSub FormatPrice()
    Dim s1 As String, s2 As String
    s1 = "str1"
    s2 = "str2"
    If s1 <> s2 Then
        foo "123""456" ' Скобки при вызове процедур запрещены
    End IfDim res As sTRING ' Регистр в VB не важен. Впрочем, редактор Вас поправит
    Dim i As Integer
    ' Цикл всегда состоит из нескольких строк
    For i = 1 To 10
        res = res + CStr(i) ' Конвертация чего угодно в String
        If i = 5 Then Exit For
    Next iDim x As Double
    x = Val("1.234"' Парсинг чисел
    x = x + 10
    MsgBox xOn Error Resume Next ' Обработка ошибок - игнорировать все ошибки
    x = 5 / 0
    MsgBox xOn Error GoTo Err ' При ошибке перейти к метке Err
    x = 5 / 0
    MsgBox "OK!"
    GoTo ne

Err:
    MsgBox 

"Err!"

ne:

On Error GoTo 0 ' Отключаем обработку ошибок

    ' Циклы бывает, какие захотите
    Do While True
        Exit DoLoop 'While True
    Do 'Until False
        Exit Do
    Loop Until False
    ' А вот при вызове функций, от которых хотим получить значение, скобки нужны.
    ' Val также умеет возвращать Integer
    Select Case LengthSqr(Len("abc"), Val("4"))
    Case 24
        MsgBox "0"
    Case 25
        MsgBox "1"
    Case 26
        MsgBox "2"
    End Select' Двухмерный массив.
    ' Можно также менять размеры командой ReDim (Preserve) - см. google
    Dim arr(1 to 10, 5 to 6) As Integer
    arr(1, 6) = 8Dim coll As New Collection
    Dim coll2 As Collection
    coll.Add "item""key"
    Set coll2 = coll ' Все присваивания объектов должны производится командой Set
    MsgBox coll2("key")
    Set coll2 = New Collection
    MsgBox coll2.Count
End Sub

Грабли-1. При копировании кода из IDE (в английском Excel) есь текст конвертируется в 1252 Latin-1. Поэтому, если хотите сохранить русские комментарии — надо сохранить крокозябры как Latin-1, а потом открыть в 1251.

Грабли-2. Т.к. VB позволяет использовать необъявленные переменные, я всегда в начале кода (перед всеми процедурами) ставлю строчку Option Explicit. Эта директива запрещает интерпретатору заводить переменные самостоятельно.

Грабли-3. Глобальные переменные можно объявлять только до первой функции/процедуры. Локальные — в любом месте процедуры/функции.

Еще немного дополнительных функций, которые могут пригодится: InPos, Mid, Trim, LBound, UBound. Также ответы на все вопросы по поводу работы функций/их параметров можно получить в MSDN.

Надеюсь, что этого Вам хватит, чтобы не пугаться кода и самостоятельно написать какое-нибудь домашнее задание по информатике. По ходу поста я буду ненавязчиво знакомить Вас с новыми конструкциями.

Кодим много и под Excel

В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.

Sub FormatPrice()
    Sheets("result").Cells.Clear
    Sheets("data").Activate
End Sub

Работа с диапазонами ячеек

Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.

Примеры работы с Range

Sheets("result").Activate
Dim r As Range
Set r = Range("A1")
r.Value = "123"
Set r = Range("A3,A5")
r.Font.Color = vbRed
r.Value = "456"
Set r = Range("A6:A7")
r.Value = "=A1+A3"

Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:

  1. Считали группы из очередной строки.
  2. Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
    1. Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
  3. После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.

Для упрощения работы рекомендую определить следующие функции-сокращения:

Function GetCol(Col As IntegerAs String
    GetCol = Chr(Asc("A") + Col)
End FunctionFunction GetCellS(Sheet As String, Col As Integer, Row As IntegerAs Range
    Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End FunctionFunction GetCell(Col As Integer, Row As IntegerAs Range
    Set GetCell = Range(GetCol(Col) + CStr(Row))
End Function

Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».

Глобальные переменные

Option Explicit ' про эту строчку я уже рассказывал
Dim CurRow As Integer
Const GroupsCount As Integer = 2
Const DataCount As Integer = 3

FormatPrice

Sub FormatPrice()
    Dim I As Integer ' строка в data
    CurRow = 1
    Dim Groups(1 To GroupsCount) As String
    Dim PrGroups(1 To GroupsCount) As String

    Sheets(

"data").Activate
    I = 2
    Do While True
        If GetCell(0, I).Value = "" Then Exit Do
        ' ...
        I = I + 1
    Loop
End Sub

Теперь надо заполнить массив Groups:

На месте многоточия

Dim I2 As Integer
For I2 = 1 To GroupsCount
    Groups(I2) = GetCell(I2, I)
Next I2
' ...
For I2 = 1 To GroupsCount ' VB не умеет копировать массивы
    PrGroups(I2) = Groups(I2)
Next I2
I =  I + 1

И создать заголовки:

На месте многоточия в предыдущем куске

For I2 = 1 To GroupsCount
    If Groups(I2) <> PrGroups(I2) Then
        Dim I3 As Integer
        For I3 = I2 To GroupsCount
            AddHeader I3, Groups(I3)
        Next I3
        Exit For
    End If
Next I2

Не забудем про процедуру AddHeader:

Перед FormatPrice

Sub AddHeader(Ty As Integer, Name As String)
    GetCellS("result", 1, CurRow).Value = Name
    CurRow = CurRow + 1
End Sub

Теперь надо перенести всякую информацию в result

For I2 = 0 To DataCount - 1
    GetCellS("result", I2, CurRow).Value = GetCell(I2, I)
Next I2

Подогнать столбцы по ширине и выбрать лист result для показа результата

После цикла в конце FormatPrice

Sheets("Result").Activate
Columns.AutoFit

Всё. Можно любоваться первой версией.

Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:

Sub AddHeader(Ty As Integer, Name As String)
    Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow)).Merge
    ' Чтобы не заводить переменную и не писать каждый раз длинный вызов
    ' можно воспользоваться блоком With
    With GetCellS("result", 0, CurRow)
        .Value = Name
        .Font.Italic = True
        .Font.Name = "Cambria"
        Select Case Ty
        Case 1 ' Тип
            .Font.Bold = True
            .Font.Size = 16
        Case 2 ' Производитель
            .Font.Size = 12
        End Select
        .HorizontalAlignment = xlCenter
    End With
    CurRow = CurRow + 1
End Sub

Уже лучше:

Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:

Поэтому чуть-чуть меняем код с добавлением стиля границ:

Sub AddHeader(Ty As Integer, Name As String)
    With Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow))
        .Merge
        .Value = Name
        .Font.Italic = True
        .Font.Name = "Cambria"
        .HorizontalAlignment = xlCenterSelect Case Ty
        Case 1 ' Тип
            .Font.Bold = True
            .Font.Size = 16
            .Borders(xlTop).Weight = xlThick
        Case 2 ' Производитель
            .Font.Size = 12
            .Borders(xlTop).Weight = xlMedium
        End Select
        .Borders(xlBottom).Weight = xlMedium ' По убыванию: xlThick, xlMedium, xlThin, xlHairline
    End With
    CurRow = CurRow + 1
End Sub

Осталось лишь добится пропусков перед началом новой группы. Это легко:

В начале FormatPrice

Dim I As Integer ' строка в  data
CurRow = 0 ' чтобы не было пропуска в самом начале
Dim Groups(1 To GroupsCount) As String

В цикле расстановки заголовков

If Groups(I2) <> PrGroups(I2) Then
    CurRow = CurRow + 1
    Dim I3 As Integer

В точности то, что и хотели.

Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.

Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.

Спасибо за внимание.

Буду рад конструктивной критике в комментариях.

UPD: Перезалил пример на Dropbox и min.us.

UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.

Понравилась статья? Поделить с друзьями:
  • Текст для лабораторной по word
  • Текст для изучения word
  • Текст для форматирования в word задание
  • Текст для знакомства с word
  • Текст для упражнений word