例文を使って繰り返し業務を時短

【マクロ・VBA】指定した範囲の数値を文字列に変換する

エクセル、マクロ、VBAで指定した範囲の数値を文字列に変換する方法 VBA

Str関数:数値を文字列に変換する

VBAのStr関数は、引数で指定された数値を文字列に変換する関数です。変換された文字列は、指数表記または小数点表記のどちらかになります。

表記方法:文字列= Str(数値)
 例)Cell(1,1) = Cstr(Cell(1,1))

<数値を文字列に変換する方法>

  • Cstr関数:数値を文字列にする 
  • Str関数:正負記号付きの文字列に変換。
    変換前の数値が0または正数(プラス値)の場合、左端に半角スペースが付く
    負数(マイナス値)の場合、左端に負号(半角マイナス文字の-)が付く
  • Format関数:数値を金額形式や日付形式など指定した形式(フォーマット)の文字列に変換。

<注意>
列内に数値と文字列が混在している場合、一度文字列に変換してからCstrに変換。
また、Str関数で変換される数値は、Double型またはSingle型に限定されます。また、Str関数で変換された文字列は、数値を表しているわけではなく、単に数値を表す文字列であることに注意してください。

Cells(1, 1).NumberFormat = "@"
Cells(1, 1) = CStr(Cells(1, 1))

指定した列を文字列に変換

Sub 列を指定して文字列に変換()
 Dim i As Long
 For i = 1 To Range("A1").End(xlDown).Row
  With Cells(i, "A")
   .NumberFormatLocal = "@"
    .Value = CStr(Cells(i, "A"))
  End With
 Next i
MsgBox "完了"
End Sub

選択した範囲を文字列に変換

Sub 選択範囲を文字列に変換()
 Dim rng As Range

 For Each rng In Selection
  With rng
   .NumberFormatLocal = "@"
   .Value =  CStr(rng)
  End With
 Next rng
End Sub

表示形式を文字列に変換

Sub Format()

Dim str As String     
Dim i As Long

Dim max_row As Long
max_row = Cells(Rows.Count, 1).End(xlUp).Row 

For i = 2 To max_row  
    str = Range("A" & i).NumberFormatLocal      
    Range("B" & i) = str  
Next i

MsgBox "完了"
End Sub

数値→文字列変換

Sub 選択したセル範囲の値を文字列へ変換()
    Dim iRow  As Long     '行位置
    Dim iCol  As Long     '列位置
    Dim iRowMax  As Long     '行数
    Dim iColMax   As Long     '列数
    
    '// 変換後の表示形式を設定
    Selection.NumberFormatLocal = "@"
    

    '// 行位置、列位置、行数、列数を取得
    iRow = Selection.Row
    iCol = Selection.Column
    iRowMax = iRow + Selection.Rows.Count - 1
    iColMax = iCol + Selection.Columns.Count - 1
    
    '// 選択セル範囲を列ごとにループ
    For iCol = iCol To iColMax
        If (Range(Cells(iRow, iCol), Cells(iRowMax, iCol)).Text <> "") Then
       
            '// 区切り位置設定
            Call Range(Cells(iRow, iCol), Cells(iRowMax, iCol)).TextToColumns
            
            Call Val(Range(Cells(iRow, iCol), Cells(iRowMax, iCol)).TextToColumns)
            
             'Range(Cells(i, iCoMaxl).Formula = "=VALUE(Cells(iRow, iCoMaxl))"
        End If
    Next
    
MsgBox "完了"
End Sub

参考)先頭が0の数値を表示させたい場合

Sub A列の数値を文字列に変換_先頭に0を付加()
 Dim i As Long
 For i = 1 To Range("A1").End(xlDown).Row
  With Cells(i, "A")
   .NumberFormatLocal = "@"
   .Value = Format(.Value, "0000")
  End With
 Next i
  MsgBox "完了"
End Sub

コメント

タイトルとURLをコピーしました