Vba excel преобразование числа в текст

Функции преобразования типов данных в VBA Excel. Наименования функций, синтаксис, типы возвращаемых данных, диапазоны допустимых значений выражения-аргумента.

Синтаксис функций преобразования

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

Если аргумент, переданный в функцию, не входит в диапазон типа, в который преобразуются данные, происходит ошибка.

Функции преобразования типов

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

Функция Тип данных Диапазон значений аргумента
CBool Boolean Любое допустимое строковое или числовое выражение.
CByte Byte От 0 до 255.
CCur Currency От -922 337 203 685 477,5808 до 922 337 203 685 477,5807.
CDate Date Любое допустимое выражение даты.
CDbl Double От -1,79769313486231E308 до -4,94065645841247E-324 для отрицательных значений; от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений.
CDec Decimal 79 228 162 514 264 337 593 543 950 335 для чисел без десятичных знаков. Для чисел с 28 десятичными знаками диапазон составляет 7,9228162514264337593543950335. Наименьшим возможным числом, отличным от нуля, является число 0,0000000000000000000000000001.
CInt Integer От -32 768 до 32 767, дробная часть округляется.
CLng Long От -2 147 483 648 до 2 147 483 647, дробная часть округляется.
CSng Single От -3,402823E38 до -1,401298E-45 для отрицательных значений; от 1,401298E-45 до 3,402823E38 для положительных значений.
CStr String Результат, возвращаемый функцией CStr, зависит от аргумента Выражение.
CVar Variant Диапазон совпадает с типом Double  для числовых значений и с типом  String  для нечисловых значений.

Дополнительно для VBA7:

Функция Тип данных Диапазон значений аргумента
CLngLng LongLong От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, дробная часть округляется. Действительно только для 64-разрядных платформ.
CLngPtr LongPtr От -2 147 483 648 до 2 147 483 647 для 32-разрядных платформ, от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 для 64-разрядных платформ, дробная часть округляется в обоих типах систем.

Примеры преобразования типов

Функция CBool

Функция CBool используется для преобразования выражений в тип данных Boolean.

Dim a

a = CBool(10) ‘Результат: True

a = CBool(0) ‘Результат: False

a = CBool(«True») ‘Результат: True

a = CBool(«Test») ‘Результат: Error

Dim a, b, c

a = «Test1»

b = «Test2»

c = CBool(a = b) ‘Результат: False

c = CBool(a <> b) ‘Результат: True

Функция CByte

Функция CByte используется для преобразования выражений в тип данных Byte.

Dim a, b, c

a = 654

b = 3.36

c = a / b ‘Результат: 194,642857142857

c = CByte(c) ‘Результат: 195

c = a * b ‘Результат: 2197,44

c = CByte(c) ‘Результат: Error

Функция CCur

Функция CCur используется для преобразования выражений в тип данных Currency.

Dim a, b, c

a = 254.6598254

b = 569.2156843

c = a + b ‘Результат: 823,8755097

c = CCur(a + b) ‘Результат: 823,8755

Функция CDate

Функция CDate используется для преобразования выражений в тип данных Date. Она распознает форматы даты в соответствии с национальной настройкой системы.

Dim a As String, b As Date, c As Double

a = «28.01.2021»

b = CDate(a) ‘Результат: #28.01.2021#

c = CDbl(b) ‘Результат: 44224

Dim a

a = CDate(44298.63895) ‘Результат: #12.04.2021 15:20:05#

a = CDate(44298) ‘Результат: #12.04.2021#

a = CDate(0.63895) ‘Результат: #15:20:05#

Функция CDbl

Функция CDbl используется для преобразования выражений в тип данных Double.

Dim a As String, b As String, c As Double

a = «45,3695423»

b = «548955,756»

c = CDbl(a) + CDbl(b) ‘Результат: 549001,1255423

Примечание
Eсли основной язык системы – русский, при записи в редакторе VBA Excel дробного числа в виде текста, ставим в качестве разделителя десятичных разрядов – запятую. Проверьте разделитель по умолчанию для своей национальной системы:
MsgBox Application.DecimalSeparator

Функция CDec

Функция CDec используется для преобразования выражений в тип данных Decimal.

Dim a As String, b As Double, c

a = «5,9228162514264337593543950335»

b = 5.92281625142643

c = CDec(a) CDec(b) ‘Результат: 0,0000000000000037593543950335

Dim a As Double, b As String, c

a = 4.2643E14

b = CStr(a) ‘Результат: «4,2643E-14»

c = CDec(a) ‘Результат: 0,000000000000042643

Функция CInt

Функция CInt используется для преобразования выражений в тип данных Integer.

Dim a As String, b As Integer

a = «2355,9228»

b = CInt(a) ‘Результат: 2356

Функция CLng

Функция CLng используется для преобразования выражений в тип данных Long.

Dim a As Date, b As Long

a = CDate(44298.63895) ‘Результат: #12.04.2021 15:20:05#

b = CLng(a) ‘Результат: 44299

a = CDate(b) ‘Результат: #13.04.2021#

Функция CSng

Функция CSng используется для преобразования выражений в тип данных Single.

Dim a As String, b As Single

a = «3,2365625106»

b = CSng(a) ‘Результат: 3,236562

Функция CStr

Функция CStr используется для преобразования выражений в тип данных String.

Dim a As Single, b As String

a = 5106.23

b = CStr(a) ‘Результат: «5106,23»

Функция CVar

Функция CVar используется для преобразования выражений в тип данных Variant.

Dim a As Double, b As String, c

a = 549258.232546

b = «Новое сообщение»

c = CVar(a) ‘Результат: 549258,232546 (Variant/Double)

c = CVar(b) ‘Результат: «Новое сообщение» (Variant/String)

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


Most times, you won’t need to «convert»; VBA will do safe implicit type conversion for you, without the use of converters like CStr.

The below code works without any issues, because the variable is of Type String, and implicit type conversion is done for you automatically!

Dim myVal As String
Dim myNum As Integer

myVal = "My number is: "
myVal = myVal & myNum

Result:

«My number is: 0»

You don’t even have to get that fancy, this works too:

Dim myString as String
myString = 77

«77»

The only time you WILL need to convert is when the variable Type is ambiguous (e.g., Type Variant, or a Cell’s Value (which is Variant)).

Even then, you won’t have to use CStr function if you’re compounding with another String variable or constant. Like this:

Sheet1.Range("A1").Value = "My favorite number is " & 7

«My favorite number is 7»

So, really, the only rare case is when you really want to store an integer value, into a variant or Cell value, when not also compounding with another string (which is a pretty rare side case, I might add):

Dim i as Integer
i = 7
Sheet1.Range("A1").Value = i

7

Dim i as Integer
i = 7
Sheet1.Range("A1").Value = CStr(i)

«7»

Return to VBA Code Examples

We have already covered an introduction to string functions in our VBA Strings and Substrings Functions tutorial. In this tutorial, we are going to look at how to convert an integer to a string (click here to learn about converting Strings to Numbers). The reason you would want to convert a number or date to a string is in order to use string manipulation functions on these values.

The VBA CStr Function

The VBA CStr Function allows you to convert a number, date or boolean data type to a string.

MsgBox CStr (88)

The syntax of the CStr Function is:

CStr(expression) where expression is the number or date that you want to convert.

The following code shows you how numbers are outputted compared to text, including by using the CStr Function.

Sub UsingTheConvertToStringFunction()


Debug.Print CStr(8)
Debug.Print "Text"
Debug.Print 8
Debug.Print 2


End Sub

This uses Debug.Print to output the results to the Immediate Window.

Converting An Integer To A String in VBA

Both CStr(8) and the word Text are displayed as text and are left aligned whereas the two numbers are right aligned within the immediate window.

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!

OBJECTS
Worksheets: The Worksheets object represents all of the worksheets in a workbook, excluding chart sheets.
Range: The Range object is a representation of a single cell or a range of cells in a worksheet.

PREREQUISITES
Worksheet Name: Have a worksheet named Analyst.
Number to convert to Text: Ensure that the number that you want to convert to text is captured in cell («B5»).

ADJUSTABLE PARAMETERS
Output Range: Select the output range by changing the cell reference («C5») in the VBA code to any cell in the worksheet, that doesn’t conflict with the formula.
Number to convert to Text: Select the number that you want to convert to text by changing the cell reference («B5») to any cell in the worksheet that contains the number that you want to convert to text and doesn’t conflict with the formula.

 

Максим

Пользователь

Сообщений: 18
Регистрация: 09.09.2013

Доброго дня!
Подскажите макрос, который преобразовывает число в текст с учетом формата ячеек.
Знаю, что в известных надстройках присутствует данный функционал, но избыточен для меня, например не нужен откат выполненных действий (это тоже потраченное время). Интересует максимальное быстродействие на большом массиве.

Какие команды могут прочитать формат ячеек?

Пример во вложении

Прикрепленные файлы

  • пример.xlsx (15.02 КБ)

Изменено: Максим08.09.2021 15:51:33

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

Доброе время суток.
Изучите

Range.Text property (Excel)

 

Mershik

Пользователь

Сообщений: 8277
Регистрация: 03.12.2015

#3

08.09.2021 16:21:16

Максим, UDF — лежит здесь:

https://www.excel-vba.ru/chto-umeet-excel/vidimoe-znachenie-yachejki-v-realnoe/

Код
Function VisualVal_Text(rc As range)
    VisualVal_Text = rc.Text
End Function

Не бойтесь совершенства. Вам его не достичь.

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

#4

09.09.2021 08:26:45

Mershik, в той же теме, написано почему это плохое решение.
Итоговое такое:

Код
Function VisualVal(rc As Range)
    VisualVal = Application.Text(rc.Value, rc.NumberFormat)
End Function

Изменено: bedvit09.09.2021 08:27:06

«Бритва Оккама» или «Принцип Калашникова»?

 

Максим

Пользователь

Сообщений: 18
Регистрация: 09.09.2013

#5

09.09.2021 10:30:27

Спасибо всем! Но интересует именно преобразование текущих ячеек, без использования функций и добавления дополнительных столбцов.
Начал писать макрос, но остановился на том, что надо прочитать содержимое ячейки + использовать функцию + записать итоговый результат в ячейку. Я новичок в макросах по разному писал код, всякие ошибки выпадали. Помогите дописать. Или где-то есть уже готовый макрос.

Код
Function VisualVal(rc As Range)
    VisualVal = Application.Text(rc.Value, rc.NumberFormat)
End Function
Sub Преобразование()


'    On Error Resume Next
    Dim i, x, y As Long

    x = ActiveCell.Column
    y = ActiveCell.Row
    For i = 0 To Selection.Count - 1
    Cells(i + y, x).Select

???
    
    Selection.Value = Selection.Value ' преобразование формул в значение
    
' для визуализации
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With


Next
End Sub
 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#6

09.09.2021 10:37:13

Цитата
Максим написал:
без использования функций и добавления дополнительных столбцов

странное требование про «без функций». Чем они Вам помешали-то? :) Не знаю зачем там у Вас всякие заливки устанавливаются, поэтому подправил как мог

Код
Function VisualVal(rc As Range)
    VisualVal = Application.Text(rc.Value, rc.NumberFormat)
End Function
Sub Преобразование()
Dim rc As Range, sres$
For Each rc In Selection.Cells
    sres = VisualVal(rc)
    'назначаем текстовый формат ячейкам, чтобы избежать лишних преобразований
    rc.NumberFormat = "@"
    rc.Value = sres
Next
     
' для визуализации
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub

есть нюансы, который надо использовать по ситуации. Например, если для ячеек установлен формат вроде такого «0000000» и в значении будут ведущие нули — то назначение текстового формата для ячейки перед записью значений обязательно.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#7

09.09.2021 10:39:25

Код
Sub Преобразование()
    Dim cl As Range
    For Each cl In Selection
        cl = VisualVal(cl)
    Next
End Sub
 

RAN, если формат ячеек на листе изначально Общий(General), то не все ячейки смогут преобразоваться корректно.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#9

09.09.2021 10:46:17

#7

полностью рабочий  :idea:

Без заливок и прочего лишнего от ТСа:

Изменено: Jack Famous09.09.2021 10:47:04

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

 

Максим

Пользователь

Сообщений: 18
Регистрация: 09.09.2013

Большое спасибо все участникам! Очень помогли.
Закраску я делал для визуализации, что цикл отработан.

Изменено: Максим09.09.2021 11:16:09

 

Максим

Пользователь

Сообщений: 18
Регистрация: 09.09.2013

#12

10.09.2021 11:57:11

Итого получился код с % выполнения, может кому понадобиться

Код
Function VisualVal(rc As Range)
    VisualVal = Application.Text(rc.Value, rc.NumberFormat)
End Function

Sub Преобразование_число_в_текст()
Dim rc As Range, calc, ab, xy, a As Long, sres$
'начало отсчета времени
'a = Timer

    Application.CutCopyMode = False
    ab = Selection.Count
    ' Отключение пересчёта формул, чтобы ускорить макрос.
    ' Перед отключением запоминаем режим формул, чтобы потом его вернуть.
    calc = Application.Calculation
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

For Each rc In Selection.Cells
    sres = VisualVal(rc)
    'назначаем текстовый формат ячейкам, чтобы избежать лишних преобразований
    rc.NumberFormat = "@"
    rc.Value = sres
    
    xy = xy + 1
'    Application.StatusBar = "Выполнено: " & xy & " из " & ab  ' кол-во обработанных ячеек
    Application.StatusBar = "Выполнено: " & Int(100 * xy / ab) & "%"  ' процент обработанных ячеек
'    DoEvents 'чтобы форма перерисовывалась
Next

    'сбрасываем значение статусной строки
    Application.StatusBar = False
    ' Включение того, что отключили.
    Application.ScreenUpdating = True
    Application.Calculation = calc


'вывод затраченного времени
'MsgBox Timer - a

End Sub

Понравилась статья? Поделить с друзьями:
  • Vba excel преобразование типов данных
  • Vba excel преобразование текста в дату
  • Vba excel преобразование даты в число
  • Vba excel преобразование даты в текст
  • Vba excel предыдущее значение ячейки