マクロに「一時保存」をさせる技術!変数とデータ型(厳選4選)

Level5 VBA・マクロ

「さっき計算した数字を、別の場所でも使い回したい」
「毎回長いコードを書くのは面倒。もっとスッキリさせたい」

そんな時に欠かせないのが、今回学ぶ「変数(へんすう)」です。
変数と聞くと数学の X や Y を思い出して「難しそう……」と身構えてしまうかもしれませんが、VBAにおける変数は、ただの「名前を書いたラベル付きの箱」にすぎません。

今回は、実務で使う変数を厳選して4種類紹介します。
特に、何でも入る魔法の箱「Variant」は非常に便利ですが
使い方を間違えるとトラブルの元になることも……。

正しい知識を身につけて、あなたのマクロを「知的なロボット」へと進化させましょう!


変数とは「値を入れておくための一時的な箱」

変数とは、数値や文字を一時的に入れておくための「箱」のことです。
なぜ箱が必要なのか? それは、手作業をスロー再生してみると分かります。

【手作業:合計金額を計算して報告する】

  1. セルA1の単価(1,000円)を見て、頭の中で覚える
  2. セルA2の個数(5個)を見て、頭の中で覚える
  3. 頭の中で「1,000 × 5 = 5,000だ」と計算する
  4. 「合計は5,000円です」と口に出す

この「頭の中で覚える」という動作をマクロにさせるのが「変数」の役割です。

たんたん
たんたん

変数に数値を入れておけば、何の数字かわかるようにできるよ!

しかも、金額や個数が変わるたびに代入し直すだけでOK!


変数の使い方は「準備」と「代入」の2ステップ

変数を使うには、決まったルールがあります。

1. 箱を準備する(宣言)

「今からこの名前の箱を使うよ!」とマクロに伝えます。 

Dim 箱の名前 As データの種類
(例:Dim kingaku As Long

たんたん
たんたん

これを「変数の宣言」と呼ぶよ!

マクロ作成の時には宣言を必ずしよう。

2. 箱に中身を入れる(代入)

箱の名前 = 入れたいもの
(例:kingaku=10000)

たんたん
たんたん

「=」は数学的な等しいという意味ではありません。

「=」は「右を左へ入れる」という意味です。
なので「=」を「←」と認識しましょう!


実務で使う「データ型」はこの4つだけでいい!

変数(箱)には、入れるものに合わせて「形」があります。
これを「データ型」と呼びます。

種類型の名前入れるもの
数字Long (ロング)整数(金額、回数、行番号など)
文字String (ストリング)名前、住所、メッセージなど
日付Date (デート)請求日、締切日、今日の日付など
何でも入る箱Variant (バリアント)何でも入る(数字でも文字でもOK)
たんたん
たんたん

使う予定のデータに応じて使い分けよう!
数字・文字・日付の3つがほぼ全て。

※以前のVBAでは数字に Integer を使っていましたが、今のパソコン性能なら、より大きな数字(21億まで)を扱える Long を使うのが実務のスタンダードです。


何でも入る「Variant」の光と影

「Variant(バリアント)」は、中身に合わせて箱の形が勝手に変わる「何でも入る箱」です。

  • メリット:
     何を宣言すればいいか迷った時、とりあえずVariantにしておけばエラーが起きません。
    セルの内容をまるごと変数に入れる時などに非常に重宝します。
  • デメリット(ここが重要!):
    1. ミスに気づきにくい: 
      「数字を入れるつもりだったのに、間違えて文字が入ってしまった」という時でも、Variantは文句を言わずに受け入れてしまいます。
      その結果、計算する段階になって初めてマクロが止まってしまいます。
    2. 動作が少し重くなる:
       何でも入る分、コンピュータはいちいち中身を確認しなければならず
      大量のデータを扱う時は処理スピードが落ちます。

【結論】
 基本は Long や String で「中身を限定」して箱を作り、どうしても型が決まらない時だけ Variant を使うべきです。


なぜわざわざ「変数」を使うのか?

直接セルを指定すればいいじゃないか、と思うかもしれません。
でも、変数を使うとこんなに良いことがあります。

  1. 修正が一瞬で終わる: 
    例えば、10箇所で「消費税率 0.1」を使っている場合。
    変数を使っていれば、箱の中身を一箇所変えるだけですべての計算が修正されます。
  2. 計算が速くなる: 
    エクセルのセルを何度も見に行くより
    変数(メモリ)の中を見に行くほうが、マクロの動くスピードは圧倒的に速くなります。
  3. 「名前」が付けられる: 
    Range("A1") と書くより tanka と書くほうが、後で読み返した時に
    「あ、ここは単価のことだな」とすぐに分かります。
たんたん
たんたん

ただコード上に「1000」ってあっても何かわからないよね。
しかも、修正するときに全ての「1000」を書き換えないといけないよ。

変数を使えば、この「1000」が何者かわかるようにできる!
書き換えたい時も、変数への代入箇所だけ修正でOK!


実際に変数を使ってみよう!

それでは、変数を使って計算をするマクロを書いてみましょう。

Sub 変数のテスト()
    ' 1. 箱を準備する
    Dim tanka As Long      ' 単価(数字)
    Dim kosu As Long       ' 個数(数字)
    Dim kekka As Variant   ' 合計(計算結果は何が起きるか分からないのでVariant)
    
    ' 2. 箱にデータを入れる
    tanka = 500
    kosu = 3
    
    ' 3. 計算して別の箱に入れる
    kekka = tanka * kosu
    
    ' 4. 結果を報告する
    MsgBox "合計金額は " & kekka & " 円です。"
End Sub

[F5]キーを押して実行してみてください。
「合計金額は 1500 円です。」と表示されれば大成功です!

たんたん
たんたん

コードをコピペしてみて!

サンプルをいじるところから始めるのが
最短のVBA学習だよ。


今回のクエストを終えて

  • 変数は「名前付きの箱」。一時的に情報を覚えさせておく場所。
  • Dim 名前 As 型 で準備し、 = で中身を入れる。
  • 実務で使う型は Long、String、Date、Variant の4つ。
  • Variantは便利だけど、「ミスに気づきにくい」という弱点がある。

これで、情報を賢く扱うための「武器」が揃いました。

次回、本ブログの真骨頂!
この変数とRangeを組み合わせて、Cellsを使わずにセルの場所を自由自在に動かすテクニックを伝授します。
ここを越えれば、大量データの自動化が現実味を帯びてきますよ!

コメント

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