EXCEL VBA 文字列を数値に変換・単位が付いた数値を計算・数値として認識・計算(Val関数)
EXCEL VBA 文字列を数値に変換・単位が付いた数値を計算・数値として認識・計算(Val関数)
今回説明するのは、文字列として登録されている数値を計算できる数値へ変換するVal関数の使用方法を説明します。EXCELデータに数値組み合わせて単位が一緒に登録(例:10人・10円・10個など)されている場合は、数値部分も文字列として認識されています。その文字列として認識されている数値を計算する場合は、数値として認識させる必要があります。その時にVal関数を利用する事で、数値として認識させる事ができます。また、Val関数だけでは、文字列を数値として認識させるのが難しい場合は、Replace関数を使い併せる事で数値化として認識させる事ができます。それでは、サンプルプログラムを交えて順番に説明いたします。
●【Replace関数については、下記を参照して下さい】
●【Val関数、下記を参照して下さい】(Microsoft社 様)】
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/val-function
● Val関数を利用するには、下記の通りに設定を行います。
・ Val(文字列)
※Val関数は文字列の数値を計算できる数値に変換する事ができます。
文字列で入力 (数値) | VAL関数結果 | 説明(内容 |
---|---|---|
123,345 | 123 | [ , ]カンマは、数値として認識されない。カンマ以降は無視される。 |
123.456 | 123.456 | 「 . 」ピリオドは、数値として認識される。 |
\123,345 | 0 | [ \ ]円マークは数字として認識されない。文字列の先頭に記号・文字を入力すると変換されない。 |
123,456円 | 123 | [ , ]カンマは、数値として認識されない。カンマ以降は無視される。 |
123456円 | 123456 | 数値の文字列の最後の文字列は無視されるので、正常に変換される。 |
12 34 56 | 123456 | 半角スペースは影響なく変換される。 |
123456 | 0 | 全角数値の文字列は変換されない。 |
12 34 56 | 0 | 全角数値+半角スペースは変換されない。 |
123456 | 0 | 全角数値と半角数字の混在は、変換されない。 |
2022年6月14日 | 2022 | 日付は、最初の年のみ変換されます。文字列以降は、変換されない。 |
2022/6/14 | 2022 | 日付は、最初の年のみ変換されます。文字列(記号)以降は、変換されない。 |
12時12分12秒 | 12 | 時間は、最初の年時のみ変換されます。文字列以降は、変換されない。 |
12:12:12 | 12 | 時間は、最初の時のみ変換されます。文字列(記号)以降は、変換されない。 |
&HFF | 255 | [&H]16進数はそのまま10進数に変換されます。 |
【使用例①】
A列の文字列(数値含む)をVal関数を利用して、B列に変換結果を表示させます。
【サンプルプログラム】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
' ' Sub Val_Strt00() 'A列の文字列を変換して結果をB列に表示します。 Dim I As Long Dim EX_Str For I = 2 To 15 EX_Str = Cells(I, "A") Cells(I, "B").Value = Val(EX_Str) Next I End Sub ' |
【注意点】・Val関数の変換結果のまとめ
・数値の間に記号「,」カンマなどあると記号以降は変換されない。
・先頭に記号・文字が入力されると変換されない。⇒ 0になる。
・数値の文字列も大文字の場合は変換されない。 ⇒ 0になる。
・全角数値・全角スペースは変換されない。⇒ 0になる。
EXCEL VBA 文字列を数値に変換・単位が付いた数値を計算・数値として認識・計算(Val関数 + Replace関数)
下記のサンプルプログラムは、文字列を数値に変換(数値として認識)するサンプルプログラムですが、Val関数とReplace関数を組み合わせた利用方法で明いたします。VAL関数だけでは、数値として認識できない場合は、Replace関数を使いVal関数では処理できない文字・記号等を消すことにより、文字列を計算のできる数値へ変換します。それでは、サンプルプログラムを交えて順番に説明いたします。
【プログラムの流れ】
① セルのデータを読み込み及び変換結果を転記するため、行の2行目~13行目まで繰り返します。
② A列のデータを「Ex_Str」へ代入します。
③ Replace関数を使い「Ex_Str」に「¥」円マークが代入されている場合は、削除します。
④ Replace関数を使い「Ex_Str」に「,」カンマが代入されている場合は、削除します。
⑤ Replace関数を使い「Ex_Str」に「年」が代入されている場合は、削除します。
⑥ Replace関数を使い「Ex_Str」に「月」が代入されている場合は、削除します。
⑦ Replace関数を使い「Ex_Str」に「日」が代入されている場合は、削除します。
⑧ Replace関数を使い「Ex_Str」に「月」が代入されている場合は、削除します。
⑨ Val関数とReplace関数の組み合わせの処理結果をC列に転記します。
⑩ 13行目が終了するまで繰り返します。(①へ戻る)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
' ' Sub Val_Str01() '文字列を変換・Val関数とReplace関数を組み合わせる Dim I As Long Dim EX_Str As String For I = 2 To 13 '行の2行目~13行目まで繰り返します。 EX_Str = Cells(I, "A") 'A列のデータをEx_Strへ代入 Cells(I, "B").Value = Val(EX_Str) 'B列にVal関数の処理結果を代入します。 EX_Str = Replace(EX_Str, "\", "") '「\」マークを削除します EX_Str = Replace(EX_Str, ",", "") '「,」カンマを削除します。 EX_Str = Replace(EX_Str, "年", "") '「年」を削除します。 EX_Str = Replace(EX_Str, "月", "") '「月」を削除します。 EX_Str = Replace(EX_Str, "日", "") '「日」を削除します。 EX_Str = Replace(EX_Str, ":", "") '「:」コロンを削除します。 Cells(I, "C").Value = Val(EX_Str) 'C列へ・Val関数とReplace関数(上記の処理)の処理結果を代入します。 Next I End Sub ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。