5/08/2018

Excel。マクロ27。円がついてもExcel VBAなら計算できちゃうんです。

Excel。マクロ27。円がついてもExcel VBAなら計算できちゃうんです。

<Val関数>

次のようなデータがあります。

B列のデータの合計をB8に算出するのは、SUM関数を使えば、
いとも簡単に算出することができますよね。

ところが、次のようになっていると、算出することはできるのでしょうか?

C列は、C8にSUM関数を使って、合計を算出しようと、
0(ゼロ)と表示されてしまっていますよね。

この原因は、515円と数値ではなくて、文字になってしまっているからですね。
そういう時には、
表示形式のユーザー定義を使えば算出することができるわけですよね。

一応確認しておきましょう。

D列は、515円と表示されていますが、
D8には、合計値がSUM関数で算出されています。

D3をクリックして、セルの書式設定ダイアログボックスを表示しましょう。

G/標準"円"とすることで、中身は数値のまま、
数値の後ろに”円”を表示して、見た目”円”という形になっています。

中身が数値なので、計算することができるわけですね。

ここまでは、Excelの話。

例えば、データを読み込んだ場合、
C列のように円と付いてしまっていると、文字になっていますので、計算できない。

けど、計算したい場合、円を取り除いて、数値にして、
計算することになりますが、結構面倒ですよね。

そこで、Excel VBAを知っていると、
このケースが改善することができるので、時短することが可能になります。

では、次のようなExcel VBAの構文を作ってみましょう。

Sub 円表示計算()
    Dim kotae As Long
    Dim i As Long
   
    For i = 1 To 5
        kotae = kotae + Val(Cells(i + 2, "c"))
    Next i
       
    Range("c8").Value = kotae
    Range("c8").NumberFormat = "#,##0""円"""
   
End Sub

あとは、実行してみましょう。
B8をご覧いただくと、きちんと合計値を算出していますよね。

数式バーをみると、数値になっていますね。

表示形式のユーザー定義を使って、
数値の後ろに円があるだけではなくて、
三桁区切りのカンマも合わせて表示するようにしています。

では、Excel VBAの構文を確認してみましょう。

Sub 円表示計算()
    Dim kotae As Long
    Dim i As Long
   
    For i = 1 To 5
        kotae = kotae + Val(Cells(i + 2, "c"))
    Next i
       
    Range("c8").Value = kotae
    Range("c8").NumberFormat = "#,##0""円"""
End Sub

変数の宣言をしているのが最初の2行で、kotae と iを用意します。

For~to~Next文を使っていますが、
今回のデータが5件とわかっているのでTo 5。

kotae = kotae + Val(Cells(i + 2, "c"))

この一行で計算しているわけですが、
注目するのは、Val(Cells(i + 2, "c")のところですね。

Cells(i+2,”c”)は、データがあるC3~C7ということになるのですが、
この結果を、Val関数を使っていますね。

このVal関数は、文字列を数値に変換することができるExcel VBAの関数なのですが、
文字列の先頭から、Excelが『こりゃ数値じゃないのか?』と判断というか、
数値に変換できるところまでを数値に変換することができるのです。

つまり、~円の場合、~円までを数値をして認識したので、
計算することが出来たわけです。

あとは、数値のうしろに、円を表示したいので、NumberFormatを使っています。

Range("c8").NumberFormat = "#,##0""円"""

このように、Val関数は便利なのですが、
次のようになっていると、うまくいかなので、注意が必要です。

C3をご覧ください。1,515円と表示されていますね。

この「,」(三桁区切りのカンマ)があると、
その前までしか数値として判断しません。

つまり1ということになってしまうので注意が必要です。

1515円ならいいのですが…、「,」(三桁区切りのカンマ)は、
Excel VBAにとって、鬼門ですね。