Làm cách nào để chuyển đổi một số nguyên thành một chuỗi trong VBA Excel?


Câu trả lời:


262

CStr(45) là tất cả những gì bạn cần (chức năng Convert String)


1
CStr(45), để được chính xác.
Kouichi C. Nakamura

điều này sẽ không làm việc cho số e + chuyển đổi! tức là 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 điều này sẽ chung chung hơn:CStr(CDbl(***))
Mahhdy

Nó có thể trả lời các nhu cầu của câu hỏi, nhưng nó cũng không đầy đủ và không đủ trong một số trường hợp. Thông thường (ví dụ: cho mục đích đặt tên tệp), bạn có thể muốn tạo các số có tiền tố bằng 0, như vậy 7sẽ 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
cartb Beforehorse

97

Hãy thử hàm CStr ()

Dim myVal as String;
Dim myNum as Integer;

myVal = "My number is:"
myVal = myVal & CStr(myNum);

51

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( biến thể)).

Thậm chí sau đó, bạn sẽ không phải sử dụng CStrhà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"


2
Tôi không hiểu tại sao câu trả lời này không có nhiều phiếu hơn, vì nó là sự thật. Điều đáng chú ý là việc chuyển đổi loại không phải lúc nào cũng được thực hiện, nó phụ thuộc vào người vận hành sử dụng. Ví dụ, thao tác + sẽ không luôn mở rộng một số nguyên thành một chuỗi.
Đánh dấu

1
@MarkCh Tôi biết điều này đã cũ, nhưng ... có lẽ vì các chuyển đổi ngầm ẩn đáng ghét và các cuộc gọi thành viên mặc định của VBA là điều khiến cho rất nhiều mã VBA trở nên yếu đuối, đáng ngạc nhiên và dễ bị lỗi? Sẽ không có một nửa số câu hỏi VBA về SO nếu đó không phải là chuyển đổi ngầm định, khả năng truy cập ngầm, truy cập thành viên mặc định, ẩn các mảng dựa trên 1 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 Calllỗi thời rõ ràng .
Mathieu Guindon

7

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

2
Không ai nói về 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 CStrcho 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.
Mathieu Guindon

2

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)

2

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 Variantnhưng StringInteger


0

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.


0

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

0

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


0

nhập mô tả hình ảnh ở đây

    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 - Chuyển đổi số thành văn bản với VBA

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.