Excel VBA에서 정수를 문자열로 변환하는 방법


답변:


262

CStr(45) 필요한 전부입니다 (문자열 변환 기능)


1
CStr(45)정확해야합니다.
Kouichi C. Nakamura

e + 변환 된 숫자에는 작동하지 않습니다! 즉, 7.7685099559e + 11은 예상치 않은 "7.7685099559e + 11"로 표시 될 것입니다 : "776850995590"그래서 나는 이것이보다 일반적인 것이라고 말할 것입니다.CStr(CDbl(***))
Mahhdy

질문의 요구에 답할 수 있지만 일부 상황에서는 불완전하고 불충분합니다. 종종 (예를 들어 파일 이름 지정 목적으로) 접두사 0이 아닌 숫자를 만드는 7것이 007좋습니다. 소수 자릿수를 지정하거나 천 단위 구분 기호를 포함 할 수도 있습니다. 이러한 세부 사항이 중요한 경우 : excelfunctions.net/vba-format-function.html
cartbeforehorse

97

CStr () 함수를 사용해보십시오

Dim myVal as String;
Dim myNum as Integer;

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

51

대부분의 경우 "변환"할 필요가 없습니다. VBA는와 같은 변환기를 사용 하지 않고 안전한 암시 적 유형 변환을 수행합니다 CStr.

아래 코드는 변수가 Type String이고 암시 적 유형 변환이 자동으로 수행 되므로 문제없이 작동합니다 !

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"


2
이 답변에 더 많은 표가없는 이유를 이해하지 못합니다. 유형 변환이 항상 수행되는 것은 아니며 사용중인 연산자에 따라 다릅니다. 예를 들어 + 연산은 항상 정수를 문자열로 확장하지는 않습니다.
Mark Ch

1
@MarkCh 나는 이것이 오래되었다는 것을 알고 있지만 ... VBA의 암묵적 인 암묵적 변환과 기본 멤버 호출이 VBA 코드를 연약하고 놀랍고 버그가 발생하기 쉬운 것일 수 있습니까? 암시 적 변환, 암시 적 액세스 가능성, 암시 적 기본 멤버 액세스, 암시 적 1 기반 배열이있는 암시 적 1- 기반 배열 Option Base 1, Def[Type](소식이 EVIL입니다!) 당신은 그것을 얻습니다-VBA에서 유일하게 좋은 암시적인 것은 명시 적으로 Call쓸모없는 것을 만든 암시 적 호출 구문입니다 .
Mathieu Guindon

7

필자의 경우 CString 함수를 찾을 수 없습니다. 그러나 값에 빈 문자열을 추가해도 작동합니다.

Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10

2
아무도 CStringVB.NET 함수에 대해 이야기하지 않았습니다. 빈 문자열 리터럴을 연결하여 문자열을 만드는 것은 상당히 절름발이 한 변환 방법입니다. 를 사용하여 CStr명시 적 형식 변환을위한 -이 암시 적 형식 변환하고 그 코드를 읽는 사람의 눈썹을 제기한다. 죄송합니다.이 답변이 게시 된 후 너무 늦게 발견되었습니다.
Mathieu Guindon

2

당기는 문자열이 E01과 같은 16 진수이면 CStr 함수를 사용하고 처음 문자열 변수 유형으로 저장하더라도 Excel은 0으로 변환합니다. 이 문제를 해결하는 한 가지 방법은 값의 시작 부분에 '를 추가하는 것입니다.

예를 들어 Word 테이블에서 값을 가져 와서 Excel로 가져 오는 경우 :

strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)


0

이를 수행하는 또 다른 방법은 숫자 값의 두 구문 분석 섹션을 함께 결합하는 것입니다.

Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))

나는보다는이 더 나은 성공을 발견 CStr()하기 때문에 CStr()내 경험에 변형에서 온 변환 10 진수하지 않는 것입니다.


0

유효한 정수 값이 있고 값을 비교해야하는 경우 아래에 표시된대로 비교를 진행하면됩니다.

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

허용되는 답은 적은 숫자에 적합하며, 가장 중요한 것은 Excel 시트에서 데이터를 가져 오는 동안 중요합니다. 숫자가 클수록 과학적인 숫자 즉, e + 10으로 자동 변환됩니다.
그래서 이것이 더 일반적인 대답을 줄 것이라고 생각합니다. 몰락이 있는지 확인하지 않았습니다.

CStr(CDbl(#yourNumber#))

이것은 e + 변환 된 숫자에서 작동합니다! 그냥 CStr(7.7685099559e+11)예상대로 "7.7685099559e + 11"로 표시됩니다 : "776850995590"그래서 나는 오히려 내 대답이 더 일반적인 결과라고 말할 것입니다.

감사합니다, M


0

여기에 이미지 설명을 입력하십시오

    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

참고 : MrExcel.com – VBA를 사용하여 숫자를 텍스트로 변환

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.