Excel VBAで整数を文字列に変換するにはどうすればよいですか?


回答:


262

CStr(45) 必要なのはこれだけです(文字列変換関数)


1
CStr(45)、正確には。
中村浩一

これはe +変換された数値では機能しません!すなわち7.7685099559e + 11として表示されるように期待できない「+ 11 7.7685099559e」:私はむしろ、これは、より汎用的なものになると言って、「776850995590」だから:CStr(CDbl(***))
Mahhdy

それは質問のニーズに答えるかもしれませんが、状況によっては不完全で不十分でもあります。多くの場合(たとえば、ファイル命名の目的のために)あなたは、ゼロ接頭辞の数字は、そのような作成することがあります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

変数は文字列型であり、暗黙的な型変換が自動的に行われるため、以下のコードは問題なく機能します。

Dim myVal As String
Dim myNum As Integer

myVal = "My number is: "
myVal = myVal & myNum

結果:

「私の番号は:0」

あなたはその空想を取得する必要さえありません、これもうまくいきます:

Dim myString as String
myString = 77

「77」

変数の型があいまいなときに変換する必要があります唯一の時間がある(例えば、Variant型、またはセルの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ベースの配列Option Base 1、を使用した暗黙の型指定Def[Type](EVILの少年!)、暗黙を使用しない場合、SOのVBAに関する質問は半分にはなりません...あなたはそれを手に入れます-VBAで唯一良い暗黙のことは、明示的にCall廃止された暗黙の呼び出し構文です。
Mathieu Guindon 2017

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 2017

2

プルしている文字列がE01などの16進数である場合、Excelは、CStr関数を使用していても、最初に文字列変数型に配置した場合でも、0に変換します。この問題を回避する1つの方法は、値の先頭に 'を追加することです。

たとえば、Wordのテーブルから値を引き出してExcelに取り込む場合、次のようになります。

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


0

これを行う別の方法は、数値の2つの解析済みセクションを一緒に接合することです。

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

私の経験では、バリアントから得られた10進数を変換しないように見えるCStr()ため、これよりもうまくいきましたCStr()


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.