エクセルがともだち

会社で一番のともだちがエクセル・・・のアラフィフパート事務員のつれづれ帳。備忘録もかねてエクセルのことやVBAのことを書いていくつもりです。

【VBA】Val関数の落とし穴にはまった~Val関数はカンマ付テキストはカンマの前までしか数値を返さない

VBAをやっていて、Val関数の落とし穴にはまったので備忘録として記載。

 

今回の事象

①テキストファイルからデータを読み込んでエクセルに出力していく

②テキストファイルの内容は

 3月  1,234円

 4月  5,879円

 とかそんな感じ

③文字位置からエクセルに

 f:id:mwke:20210221142908p:plain

 みたいな感じで出力しようとしていた

④ところがこうなった

 f:id:mwke:20210221143015p:plain

 

「VAL関数は数値として認識できる部分までを数値として返す」とのことでした。なのでカンマの部分で「これ知らん。あっしの仕事はここまで!」と引き上げてしまい、返ってきた数値が千の位より左側だけとなった。

文字列情報に「¥」が入っていても「これ知らん」となるようで「¥300」は頭の部分で「わしゃ知らん」となるので「0」と返ってくるそうです。

 

対処法としては

①Replace関数で「,」や「¥」を取り除いてからVal関数をかける

②VALの代わりにCLNGやCINT関数を使う

等があるようです。

 

サンプルコード

Sub val関数()

Range("B2").Value = Val(Range("A2").Value)
Range("B3").Value = Val(Range("A3").Value)

Range("C2").Value = CLng(Range("A2").Value)
Range("C3").Value = CLng(Range("A3").Value)

Range("D2").Value = Val(Replace(Range("A2").Value, ",", ""))
Range("D3").Value = Val(Replace(Range("A3").Value, "\", ""))

End Sub

 

結果

f:id:mwke:20210221143744p:plain

 

たしか半年前くらいにaccessVBAでテキストインポートの時も同じことにはまった記憶がよみがえってきた。二回目だし、ブログにも書いたから忘れない。。。といいな。