VBAをやっていて、Val関数の落とし穴にはまったので備忘録として記載。
今回の事象
①テキストファイルからデータを読み込んでエクセルに出力していく
②テキストファイルの内容は
3月 1,234円
4月 5,879円
とかそんな感じ
③文字位置からエクセルに
みたいな感じで出力しようとしていた
④ところがこうなった
「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
結果
たしか半年前くらいにaccessVBAでテキストインポートの時も同じことにはまった記憶がよみがえってきた。二回目だし、ブログにも書いたから忘れない。。。といいな。
コメント