Відповіді:
CStr(45)
все, що вам потрібно (функція «Перетворити рядок»)
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 є неоднозначною (наприклад, Variant Type або Cell Value
(що є Variant)).
Навіть тоді вам не доведеться використовувати CStr
функцію, якщо ви поєднуєте іншу змінну String або константу. Подобається це:
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"
Option Base 1
, неявного введення тексту Def[Type]
(хлопчик, що ЗЛИВ!), Неявного ... Ви отримуєте це - єдиний хороший неявний предмет у 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)
, якщо бути точним.