【VBAマクロ】文字列⇔数値|変換方法を徹底解説!【エクセル初心者向け】

スポンサードリンク
VBA
過去の自分
過去の自分

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

今の自分
今の自分

なるほど…。
エクセルデータを扱っているとよくあることですよね。
では今回は「セル内の値(文字列⇔数値)をマクロで変換する方法」
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セルに適用)

CIntで文字列を数値に変換

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

Cint変換失敗例

少数点が含まれる場合は、下記VBAコードのように「CInt」を「CDbl」に変更してください。

Sub 文字列→数値2()
    Range("A1").Value = CDbl(Range("A1").Value)
End Sub

これで小数点があっても文字列にすることができます。

CDblで文字列を数値に変換

Val関数でも文字列を数値に変換できます。

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

最後に、セルの「NumberFormat」を「General」にすることでも文字列を数値に変換できます。

Sub 文字列→数値4()
    Range("A1").NumberFormat = "General"
    Range("A1").Value = Range("A1").Value
End Sub

しかしながらこの場合は、セルに値を再入力しないと変換されないため、4行目で値を再入力しています。

NumberFormatで数値に変換

数値→文字列に変換

今度はセルの値を数値→文字列に変換する方法です。
下記のVBAコードを見てください。

Sub 数値→文字列()
    Range("A1").Value = "'" & Range("A1").Value
End Sub

セルの値の先頭に「’(シングルクォーテーション)」を付けることで、数値を文字列に変換することができます。

数値を文字列に変換1

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

数値を文字列に変換2

この「’」は値には含まれませんのでご安心ください。
ゼロ埋めしても「’」は現れません。

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など、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

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