Как преобразовать целочисленное значение "45" в строковое значение "45" в Excel VBA?
Как преобразовать целое число в строку в Excel VBA?
Ответ 1
CStr(45)
- это все, что вам нужно (функция Convert String)
Ответ 2
Попробуйте функцию CStr()
Dim myVal as String;
Dim myNum as Integer;
myVal = "My number is:"
myVal = myVal & CStr(myNum);
Ответ 3
В большинстве случаев вам не нужно "конвертировать"; 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"
Так что, действительно, единственный редкий случай - это когда вы действительно хотите сохранить целочисленное значение в варианте или значении ячейки, когда нет соединения с другой строкой (что, я бы добавил, довольно редкий случай):
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"
Ответ 4
В моем случае функция CString не была найдена. Но добавление пустой строки в значение тоже работает.
Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
Ответ 5
Кратчайший путь без объявления переменной - подсказки типа:
s$ = 123 ' s = "123"
i% = "123" ' i = 123
Это не скомпилируется с Option Explicit
. Типы будут не Variant
а String
и Integer
Ответ 6
Если строка, которую вы вытаскиваете, является шестнадцатеричным номером, например E01, то Excel переведет его как 0, даже если вы используете функцию CStr, и даже если вы сначала поместите его в тип переменной String. Один из способов решения проблемы - добавить "к началу значения".
Например, при вытягивании значений из таблицы Word и приведении их в Excel:
strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Ответ 7
Другой способ сделать это - соединить два проанализированных участка числового значения вместе:
Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))
Я нашел лучший успех с этим, чем CStr()
потому что CStr()
, кажется, не преобразует десятичные числа, которые пришли из вариантов в моем опыте.
Ответ 8
Если у вас есть действительное целочисленное значение и вам необходимо сравнить значения, вы можете просто продолжить сравнение, как показано ниже.
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