Làm cách nào để chuyển đổi giá trị số nguyên "45" thành giá trị chuỗi "45" trong VBA Excel?
Làm cách nào để chuyển đổi giá trị số nguyên "45" thành giá trị chuỗi "45" trong VBA Excel?
Câu trả lời:
CStr(45)
là tất cả những gì bạn cần (chức năng Convert String)
CStr(CDbl(***))
7
sẽ trở thành 007
. Bạn cũng có thể muốn chỉ định số thập phân hoặc bao gồm hàng nghìn dấu phân cách. Nếu những chi tiết này quan trọng đối với bạn: excelfiances.net/vba-format-feft.html
Hầu hết các lần, bạn sẽ không cần phải "chuyển đổi"; VBA sẽ thực hiện chuyển đổi loại ngầm an toàn cho bạn, mà không cần sử dụng các trình chuyển đổi như thế nào CStr
.
Đoạn mã dưới đây hoạt động mà không có bất kỳ vấn đề nào, bởi vì biến là Kiểu chuỗi và việc chuyển đổi kiểu ngầm được thực hiện cho bạn một cách tự động!
Dim myVal As String
Dim myNum As Integer
myVal = "My number is: "
myVal = myVal & myNum
Kết quả:
"Số của tôi là: 0"
Bạn thậm chí không cần phải có được sự ưa thích đó, điều này cũng hoạt động:
Dim myString as String
myString = 77
"77"
Lần duy nhất bạn S convert cần chuyển đổi là khi Loại biến không rõ ràng (ví dụ: Biến thể loại hoặc một ô Value
( là biến thể)).
Thậm chí sau đó, bạn sẽ không phải sử dụng CStr
hàm nếu bạn kết hợp với biến hoặc hằng chuỗi khác. Như thế này:
Sheet1.Range("A1").Value = "My favorite number is " & 7
"Số yêu thích của tôi là 7"
Vì vậy, thực sự, trường hợp hiếm hoi duy nhất là khi bạn thực sự muốn lưu trữ một giá trị số nguyên, thành một biến thể hoặc giá trị Cell, khi không kết hợp với một chuỗi khác (đó là trường hợp phụ khá hiếm, tôi có thể thêm vào):
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
, gõ ngầm với Def[Type]
(cậu bé đó là EVIL!), Ẩn ... bạn hiểu rồi - điều duy nhất tiềm ẩn trong VBA là cú pháp cuộc gọi ngầm khiến cho Call
lỗi thời rõ ràng .
Trong trường hợp của tôi, chức năng CString không được tìm thấy. Nhưng việc thêm một chuỗi rỗng vào giá trị cũng hoạt động.
Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
CString
, đó là một chức năng VB.NET. Kết hợp một chuỗi ký tự trống để tạo một chuỗi là một phương thức chuyển đổi khá khập khiễng. Sử dụng CStr
cho chuyển đổi loại rõ ràng - đây là chuyển đổi loại ngầm định và làm tăng sự chú ý của bất kỳ ai đọc mã đó. Xin lỗi tôi đã tìm thấy câu trả lời này rất muộn sau khi nó được đăng, tôi ước tôi có thể hạ cấp nó sớm hơn nhiều.
Nếu chuỗi bạn đang kéo vào là số hex như E01, thì Excel sẽ dịch nó thành 0 ngay cả khi bạn sử dụng hàm CStr và ngay cả khi bạn gửi tiền đầu tiên vào loại biến Chuỗi. Một cách xung quanh vấn đề là nối thêm 'vào đầu giá trị.
Ví dụ: khi kéo các giá trị ra khỏi bảng Word và đưa chúng vào Excel:
strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Cách ngắn nhất mà không khai báo biến là với Gợi ý Loại :
s$ = 123 ' s = "123"
i% = "123" ' i = 123
Điều này sẽ không được biên dịch với Option Explicit
. Các loại sẽ không Variant
nhưng String
vàInteger
Một cách khác để làm điều đó là ghép hai phần được phân tích cú pháp của giá trị số với nhau:
Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))
Tôi đã tìm thấy thành công tốt hơn với điều này hơn CStr()
bởi vì CStr()
dường như không chuyển đổi số thập phân đến từ các biến thể theo kinh nghiệm của tôi.
Nếu bạn có một giá trị số nguyên hợp lệ và yêu cầu của bạn là so sánh các giá trị, bạn có thể chỉ cần tiếp tục với việc so sánh như được thấy dưới đây.
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
Câu trả lời được chấp nhận là tốt cho các số nhỏ hơn, quan trọng nhất là trong khi bạn đang lấy dữ liệu từ các bảng excel. vì các số lớn hơn sẽ tự động chuyển đổi thành các số khoa học, tức là e + 10.
Vì vậy, tôi nghĩ rằng điều này sẽ cung cấp cho bạn câu trả lời chung hơn. Tôi đã không kiểm tra nếu nó có bất kỳ sự sụp đổ hay không.
CStr(CDbl(#yourNumber#))
điều này sẽ làm việc cho số e + chuyển đổi! vì chỉ CStr(7.7685099559e+11)
sẽ được hiển thị là "7.7685099559e + 11" không như mong đợi: "776850995590" Vì vậy, tôi muốn nói rằng câu trả lời của tôi sẽ có kết quả chung chung hơn.
Trân trọng, M
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
CStr(45)
, để được chính xác.