こんにちは、ぐーです!
毎日大量の営業データを処理していると、避けては通れない課題に直面することがあります。それは、「見た目は数値なのに、Excelが計算対象として認識してくれない」という問題です。
皆さんも、一度は経験したことがあるのではないでしょうか。
- 「売上を集計したいのに、なぜかエラーが出てしまう……」
- 「商品コードの先頭に『0』を表示したいのに、勝手に消えてしまう……」
こうしたトラブルの背景には、実はデータの「型(データ型)」という概念が大きく関わっています。
人間の目には同じ「100」に見えても、コンピュータにとっては「計算可能な数値の100」と「単なる文字としての100」は、全く異なるデータとして扱われているのです。
今回は、この「型」を自由自在にコントロールし、エラーの悩みから解放されるための3つの関数をご紹介します。
1. 数値を「文字」に変換する:CStr関数
まずは、計算用の数値を「文字列」として扱いたい場合の方法です。
例えば、数値の社員番号「1001」に「番」という文字を繋げて、「1001番」というメッセージを作成したいシーンなどで役立ちます。数値型のまま文字と結合しようとすると、プログラムが混乱してエラーが発生することがあります。そんな時に活躍するのが「CStr(シー・ストリング)」関数になります。
▼ コピペで使えるコード
Sub NumberToString()
Dim myNumber As Long
Dim myString As String
myNumber = 12345
' 数字を文字に変換して結合
myString = CStr(myNumber) & "番"
MsgBox "あなたの番号は " & myString & " です"
End Sub
ポイント: CStr(数字) で、数字が「文字扱い」になります。これで文字同士の接着も安定します!
2. 文字を「整数」に変換する:CLng関数
次は逆のパターンで、「見た目は数字だが、中身は文字」として保存されているデータを計算に用いたい場合です。
外部システムからダウンロードしたCSVファイルや、WebサイトからコピーしたデータをExcelに貼り付けた際によく見られる現象です。これらが「文字」として認識されていると、そのままでは足し算などの計算ができません。
そこで「CLng(シー・ロング)」を利用します。この関数は、文字としての数字を「長整数(小数点を含まない数値)」へと変換してくれます。
▼ コピペで使えるコード
Sub StringToLong()
Dim textPrice As String
Dim total As Long
textPrice = "500" ' これは文字としての500
' 文字を整数に変換して計算
total = CLng(textPrice) * 2
MsgBox "合計は " & total & " 円です"
End Sub
注意点: 小数点を含む数値に CLng を適用すると、自動的に四捨五入されて整数になってしまうため、その点だけ注意が必要です。
3. 文字を「小数」に変換する:CDbl関数
最後は、消費税率の計算など、精密な「小数点」を扱いたいケースです。
CLng では切り捨てられてしまう端数も、「CDbl(シー・ダブル)」を使えば正確に保持できます。これで複雑な数値計算もバッチリ対応可能になります。
▼ コピペで使えるコード
Sub StringToDouble()
Dim textRate As String
Dim result As Double
textRate = "1.08" ' 文字としての小数
' 文字を倍精度浮動小数点数(小数)に変換
result = 1000 * CDbl(textRate)
MsgBox "税込価格は " & result & " 円です"
End Sub
まとめ:エラーに直面したら「型」を疑おう!
- CStr: 数値 → 文字(文字列と結合したい時)
- CLng: 文字 → 整数(一般的な計算をしたい時)
- CDbl: 文字 → 小数(細かい数値を扱いたい時)
これら3つの関数をマスターすれば、突然の「型が一致しません」というエラーメッセージに驚くこともなくなります。
データを正しい姿に「着せ替える」ように、ぜひ日々の業務に取り入れてみてください。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント