Как преобразовать целочисленное значение «45» в строковое значение «45» в Excel VBA?
Как преобразовать целочисленное значение «45» в строковое значение «45» в Excel VBA?
Ответы:
CStr(45)
это все что вам нужно (функция Convert String)
CStr(CDbl(***))
7
становятся 007
. Вы также можете указать количество десятичных знаков или включить тысячи разделителей. Если эти детали важны для вас: excelfunctions.net/vba-format-function.html
В большинстве случаев вам не нужно «конвертировать»; VBA сделает безопасное неявное преобразование типов без использования таких конвертеров, как CStr
.
Приведенный ниже код работает без каких-либо проблем, поскольку переменная имеет тип String, и неявное преобразование типа выполняется автоматически!
Dim myVal As String
Dim myNum As Integer
myVal = "My number is: "
myVal = myVal & myNum
Результат:
«Мой номер: 0»
Вам даже не нужно это придумывать, это тоже работает:
Dim myString as String
myString = 77
"77"
Единственный раз, когда вам потребуется конвертировать, это когда переменная Type неоднозначна (например, Type Variant или Cell Value
(который является Variant)).
Даже в этом случае вам не придется использовать CStr
функцию, если вы соединяетесь с другой строковой переменной или константой. Как это:
Sheet1.Range("A1").Value = "My favorite number is " & 7
«Мой любимый номер 7»
Так что, действительно, единственный редкий случай - это когда вы действительно хотите сохранить целочисленное значение в варианте или в значении Cell, когда нет соединения с другой строкой (что, я бы добавил, довольно редкий случай):
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"
Option Base 1
неявной типизацией с помощью Def[Type]
(boy that EVIL!), Неявного ... Вы получаете это - единственная хорошая неявная вещь в VBA - это неявный синтаксис вызова, который сделал явное Call
устаревание.
В моем случае функция CString не была найдена. Но добавление пустой строки к значению также работает.
Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
CString
, что является функцией VB.NET. Конкатенация пустого строкового литерала для создания строки является довольно неудачным методом преобразования. Используется CStr
для явных преобразований типов - это неявное преобразование типов, вызывающее удивление любого, кто читает этот код. Извините, я нашел этот ответ так поздно после того, как он был опубликован, я хотел бы, чтобы я проголосовал за него намного раньше.
Если полученная вами строка окажется шестнадцатеричным числом, таким как E01, то Excel преобразует ее в 0, даже если вы используете функцию CStr, и даже если вы впервые поместите ее в переменную типа String. Одним из способов решения этой проблемы является добавление к началу значения.
Например, при извлечении значений из таблицы Word и переносе их в Excel:
strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Кратчайший путь без объявления переменной - подсказки типа :
s$ = 123 ' s = "123"
i% = "123" ' i = 123
Это не будет компилироваться Option Explicit
. Типы не будут, Variant
но String
иInteger
Еще один способ сделать это - соединить два проанализированных участка числового значения вместе:
Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))
Я нашел лучший успех с этим, чем CStr()
потому CStr()
что, кажется, не конвертирует десятичные числа, которые пришли из вариантов в моем опыте.
Если у вас есть действительное целочисленное значение и вы хотите сравнить значения, вы можете просто продолжить сравнение, как показано ниже.
Sub t()
Dim i As Integer
Dim s As String
' pass
i = 65
s = "65"
If i = s Then
MsgBox i
End If
' fail - Type Mismatch
i = 65
s = "A"
If i = s Then
MsgBox i
End If
End Sub
Принятый ответ подходит для небольших чисел, что особенно важно, когда вы берете данные из таблиц Excel. поскольку большие числа будут автоматически преобразованы в научные числа, то есть e + 10.
Поэтому я думаю, что это даст вам более общий ответ. Я не проверял, есть ли у него падение или нет.
CStr(CDbl(#yourNumber#))
это будет работать для e + преобразованных чисел! как разCStr(7.7685099559e+11)
что будет показано как "7.7685099559e + 11" не так, как ожидалось: "776850995590" Так что я скорее скажу, что мой ответ будет более общим результатом.
С уважением, М
Sub NumToText(ByRef sRng As String, Optional ByVal WS As Worksheet)
'---Converting visible range form Numbers to Text
Dim Temp As Double
Dim vRng As Range
Dim Cel As Object
If WS Is Nothing Then Set WS = ActiveSheet
Set vRng = WS.Range(sRng).SpecialCells(xlCellTypeVisible)
For Each Cel In vRng
If Not IsEmpty(Cel.Value) And IsNumeric(Cel.Value) Then
Temp = Cel.Value
Cel.ClearContents
Cel.NumberFormat = "@"
Cel.Value = CStr(Temp)
End If
Next Cel
End Sub
Sub Macro1()
Call NumToText("A2:A100", ActiveSheet)
End Sub
Reffer: MrExcel.com - конвертировать числа в текст с помощью VBA
CStr(45)
, точнее.