ฉันจะแปลงค่าจำนวนเต็ม "45" เป็นค่าสตริง "45" ใน Excel VBA ได้อย่างไร
ฉันจะแปลงค่าจำนวนเต็ม "45" เป็นค่าสตริง "45" ใน Excel VBA ได้อย่างไร
คำตอบ:
CStr(45)
คือทุกสิ่งที่คุณต้องการ (ฟังก์ชั่นแปลงสตริง)
CStr(CDbl(***))
7
007
คุณอาจต้องการระบุจำนวนทศนิยมหรือรวมตัวคั่นหลักพัน หากรายละเอียดเหล่านี้มีความสำคัญต่อคุณ: excelfunctions.net/vba-format-function.html
ลองใช้ฟังก์ชัน CStr ()
Dim myVal as String;
Dim myNum as Integer;
myVal = "My number is:"
myVal = myVal & CStr(myNum);
เวลาส่วนใหญ่คุณไม่จำเป็นต้อง "แปลง"; VBA จะทำแปลงชนิดปลอดภัยโดยปริยายสำหรับคุณโดยไม่ต้องCStr
ใช้ตัวแปลงเช่น
โค้ดด้านล่างใช้งานได้โดยไม่มีปัญหาใด ๆ เนื่องจากตัวแปรเป็นประเภทสตริงและการแปลงประเภทโดยนัยจะทำเพื่อคุณโดยอัตโนมัติ!
Dim myVal As String
Dim myNum As Integer
myVal = "My number is: "
myVal = myVal & myNum
ผลลัพธ์:
"หมายเลขของฉันคือ: 0"
คุณไม่จำเป็นต้องได้รับสิ่งแฟนซีสิ่งนี้เช่นกัน:
Dim myString as String
myString = 77
"77"
ครั้งเดียวที่คุณจะต้องแปลงคือเมื่อตัวแปรชนิดไม่ชัดเจน (เช่นประเภทตัวแปรหรือเซลล์Value
(ซึ่งเป็นตัวแปร))
แม้ว่าคุณจะไม่ต้องใช้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]
(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
CStr(45)
เพื่อความแม่นยำ