【脱・エラー恐怖症】VBAの「データ型」を完全攻略!Long, String, Date, Variantの使い分け

【業務効率化】VBA
スポンサーリンク

こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!

毎日事務処理に追われて、「もっと楽になりたい」と思ってプログラミングを始めたものの、画面に出る真っ赤なエラーメッセージに心が折れそうになっていませんか?

この記事で解決できる悩み

  • VBAで「型が一致しません」というエラーが出てしまい、怖くてコードが書けなくなる悩み。
  • 「とりあえず全部Variantでいいじゃない?」と思ってしまうことによる、将来的なトラブル(処理落ちや予期せぬバグ)。
  • どのデータ型を選べばいいのかという迷い。

今日は、VBAを使う上で避けては通れない「データ型」について、実務で本当によく使う4つ(Long, String, Date, Variant)に絞って解説します。

【業務効率化】VBAの記事を見る

データ型は「整理整頓用の箱」

データ型とは、変数を宣言するときに決める「箱の種類」のことです。

引っ越し作業を想像してみてください。本を入れるなら丈夫な段ボール、布団なら圧縮袋、と使い分けますよね? プログラミングも同じです。

1. Long(長整数型):数字を入れるならこれ一択!

「整数を入れるときはIntegerじゃないの?」と思った方、よく勉強されていますね。でも、今はLongを使います。

  • 特徴: -2,147,483,648 から 2,147,483,647 までの整数を扱えます 。
  • なぜIntegerじゃダメ?: Integerは32,767までしか入りません。Integerでは足りない場合、エラー(オーバーフロー)になります。
  • 使いどころ: 行数のカウント、個数、金額など。

2. String(文字列型):文字なら何でもお任せ

  • 特徴: 名前、住所、商品コードなど「文字」として扱いたいデータを入れます。
  • 注意点: 数字であっても “090-1234-5678” のように電話番号を扱う場合は、計算しないのでString型に入れます。

3. Date(日付型):日付計算の強い味方

  • 特徴: 日付や時刻を扱います。
  • メリット: 「今日から3日後」のような計算が簡単にできます。String型で日付を管理すると、計算するときに面倒な変換が必要になります。

4. Variant(バリアント型):最強にして最凶の万能箱

  • 特徴: 数字、文字、日付、なんでも入ります。型指定を省略(Dim x)すると自動的にこれになります。
  • なぜダメなの?: なんでも入る分、メモリ(PCの作業机)を多く使います。また、数字だと思って計算したら中身が文字でエラー…なんてことも。
  • 使いどころ: どうしても何が入るかわからない時や、配列を一気に取り込む時など、意図を持って使います。

コピペで動く!実践コード

実際にこれらを使って、売上リストからメッセージを作るマクロを書いてみました。

VBE(コードを書く画面)に貼り付けて動かしてみてください。

Sub CreateSalesMessage()
    ' 変数の宣言(=箱の用意)
    Dim lastRow As Long       ' 行数は3万を超える可能性があるのでLong
    Dim staffName As String   ' 名前は文字なのでString
    Dim salesDate As Date     ' 日付はDate
    Dim rawData As Variant    ' 何が入るか不明な一時データはVariant
   
    ' ここではテスト用に直接値を入れます
    lastRow = 100000           ' Integerだと入らない数値でもLongならOK!
    staffName = “佐藤"
    salesDate = Date          ' 今日の日付
    rawData = Range("A1").Value ' セルの値は型が不明確なのでVariantで受けることも
   
    ' メッセージを表示
    ' & で文字をつなげます
    MsgBox "担当:" & staffName & vbCrLf & _
          "日付:" & Format(salesDate, "yyyy年mm月dd日") & vbCrLf & _
          "処理行数:" & lastRow & "行", vbInformation, "処理完了"

End Sub

試しに、Dim lastRow As Long をDim lastRow As Integer に変えて実行してみてください。オーバーフローします。

まとめ

そこまで複雑な処理でない場合、「全部Variant」で書いても動くには動きます。

でもやはり、データ型を理解していないと、複雑な処理を実装した実務レベルのものを作るのは難しいです。

LongStringを意識して使うことは、「私はこのデータをこう扱いたい!」というPCへの意思表示になります。

エラーが出てもパズルを解く感覚で楽しんでいきましょう!

【業務効率化】VBAの記事を見る


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を厳選して紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました