
マクロでエクセルデータを操作したいんだけど、
数字が文字列になっていて集計できない場合がある…。
数値⇔文字列に変換する方法があれば教えて!

なるほど…。
エクセルデータを扱っているとよくあることですよね。
では今回は「セル内の値(文字列⇔数値)をマクロで変換する方法」を
VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。
マクロでセル内の値を変換【文字列⇔数値】
- セル内の「文字列→数値」に変換する方法
- セル内の「数値→文字列」に変換する方法
上記の2つは変換方法が異なりますので、別々に解説いたします。

上図が元データの一例です。
これからA1セルの値を変換していきます。
文字列なのか数値なのかがわかりやすいように「B2セル」に「TYPE関数」を入れ、A1セルを参照しております。
TYPE関数は、参照先のセルが数値なら1、文字列なら2と表示されます。
C1セルには、さらにそれがわかりやすいように、B1セルが1なら数値、2なら文字列と表示される数式を入れています。
文字列→数値に変換
Sub 文字列→数値1()
Range("A1").Value = CInt(Range("A1").Value)
End Sub
上記VBAコードにて、セル内の数字を文字列→数値に変換することができます。
(CInt関数をA1セルに適用)

しかしながら、下図のとおりA1セルに小数点が含まれる場合は、小数点以下が切り捨てられてしまいますので、注意してください。

少数点が含まれる場合は、下記VBAコードのように「CInt」を「CDbl」に変更してください。
Sub 文字列→数値2()
Range("A1").Value = CDbl(Range("A1").Value)
End Sub
これで小数点があっても文字列にすることができます。

Val関数でも文字列を数値に変換できます。
Sub 文字列→数値3()
Range("A1").Value = Val(Range("A1").Value)
End Sub

最後に、セルの「NumberFormat」を「General」にすることでも文字列を数値に変換できます。
Sub 文字列→数値4()
Range("A1").NumberFormat = "General"
Range("A1").Value = Range("A1").Value
End Sub
しかしながらこの場合は、セルに値を再入力しないと変換されないため、4行目で値を再入力しています。

数値→文字列に変換
今度はセルの値を数値→文字列に変換する方法です。
下記のVBAコードを見てください。
Sub 数値→文字列()
Range("A1").Value = "'" & Range("A1").Value
End Sub
セルの値の先頭に「’(シングルクォーテーション)」を付けることで、数値を文字列に変換することができます。

少数点以下が入っていても、文字列に変換できます。

この「’」は値には含まれませんのでご安心ください。
ゼロ埋めしても「’」は現れません。
Sub 数値→文字列()
Range("A1").Value = "'" & Range("A1").Value
Range("A1").Value = "'00" & Range("A1").Value
End Sub

これまで1つのセルの値を変換する方法を紹介いたしました。
しかしながら、データというのは列ごとに変換したい場合が多くあります。
そこで、列全体の値を変換する方法を次項で紹介いたします。
列全体の値を変換する

「While」を使えば、列全体の値を変換することができます。
今回は、B列の数字(文字列)を数値に変換した例です。
Sub 列全体の値を変換()
Dim lastRow As Integer
Dim i As Integer
i = 2
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Do While i <= lastRow
Range("B" & i).Value = CInt(Range("B" & i).Value)
i = i + 1
Loop
End Sub
上記VBAコードにて、B列の最終行を取得し、B2~B列の最終行まで値の変換を繰り返しています。
これで列全体の文字列を数値に変換することができます。
「最終行を取得する方法」や「While」については、下記記事でわかりやすく解説しております。ご参考ください。
うまく動作しないときの対処法
エラーが発生する
コンパイルエラー・実行時エラー
コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。
また今回の場合は、変換できない場合に「型が一致しません」というエラーが発生します。
たとえば、数字ではない値(アルファベットや漢字など)を数値に変換しようとした場合などです。
警告表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。
最後に
セル内の値(文字列⇔数値)を変換するマクロを解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!