「変数 プログラミング」と検索すると、よく「値を入れる箱」と表現される事が多いです。
例えば、「ぶどう」といった文字列や「1+2」といった整数の計算結果を箱の中に保存しておいて、後で箱の中身を参照する、といった使い方になります。
さらに、変数にはある程度好きな名前を付けられます。変数に何が入っているのか分かりやすくなるので、コードが非常に見やすくなります。
変数を使った例
実際に変数を使ってみます。まずは下のコードを実行してみましょう。
Dim fruit As String '果物名の変数を宣言
fruit = "すいか"
Dim price As Integer, qty As Integer '価格・個数の変数を宣言
price = 2000
qty = 6
Dim ws As Worksheet 'ワークシートのオブジェクト変数を宣言
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Cells(5, 1).Value = fruit 'A5セルにfruit(すいか)を代入
ws.Cells(5, 2).Value = price 'B5セルにprice(2000)を代入
ws.Cells(5, 3).Value = qty 'C5セルにqty(6)を代入
実行すると、すいか・2000・6がセルに入力されているはずです。
先程の箱の例に例えると、fruitという名前の変数(箱)に「すいか」の文字列を代入(入れる)イメージです。
このコードでは、以下の変数を使用しました。
- 変数 fruitに「すいか」の文字列を代入
- 変数 priceに「2000」の数値を代入
- 変数 qtyに「6」の数値を代入
- 変数 wsという変数に「ThisWorkbook.Sheets(“Sheet1”)」というオブジェクトを代入
変数を使うことで、ThisWorkbook.Sheets(“Sheet1”)と何度も入力しなくてよくなり、どのセルに何が入ったのか分かりやすくなりますね。
変数について
変数を使うメリットには以下が挙げられます。
- 四則演算などの計算ができる →例えば price * qty で変数同士でかけ算することで合計の値段を求めることが可能
- 参照できる→ price * qty の計算結果を別な変数 totalに代入すると、totalを参照することでいつでもその計算結果を使えます
- 別の値に更新できる → 変数 fruitにいちごやパイナップルといった別な文字を入れて更新が可能
- 禁止された名前もあるが、ある程度任意の名前を付けられる → 変数にどんな値が入っているのか分かりやすくなる
ちなみに変数に名前をつける場合、ある程度好きな名前を付けられるといっても命名規則があります。使えない名前や記号もあるので、使いながら覚えていきましょう。詳細は下のリンクへ。
変数の宣言
変数を使う場合、あらかじめ「こういう変数を使います!」と宣言をします。
具体的には、どんな種類(数値や文字や日付など)でどんな名前の変数を使うか宣言します。この変数の種類のことを「データ型」といいます。
変数を宣言する場合は、以下のように記述します。
Dim 変数名 As 型
例えば、変数 fruitを文字列型(string型)で宣言する場合は、
Dim fruit As String
となります。
また、複数の変数を「,(カンマ)」で区切ることで同時に宣言することもできます。
Dim price As Integer, qty As Integer
変数のデータ型について
Excelのセルには、文字や数字、日付など様々なデータを入力しますよね。データ型にも文字や数字、日付の他にオブジェクト(ブックやシートなど)といったものがあります。
全てを覚える必要はないので、よく使うデータ型をピックアップします。
整数
整数を使う場合は、以下の型を使います。
integer型 : -32,768~32,767の整数
long型 : -2,147,483,648~2,147,483,647の整数
例えば、変数 priceをinteger型で宣言する場合は、
Dim price As Integer
となります。
扱う整数の桁によってinteger型かlong型かを判断します。例えば、変数 priceをinteger型で宣言したので、もし100,000といった大きな数値を代入すると「オーバーフローしました」とエラーになってしまいます。
文字列
文字列を使う場合は、以下のデータ型を使います。
string:任意の文字列
例えば、変数 fruitをstring型で宣言する場合は、
Dim fruit As String
となります。
オブジェクト変数
ブックやシートといったオブジェクトも変数として使えます。これを、オブジェクト変数といいます。
例えば、オブジェクト変数 wsをWorksheetオブジェクトとして宣言する場合は、
Dim ws As Worksheet
となります。
ただ、オブジェクトの概念がやや難しいので、とりあえずこのWorksheetのオブジェクト変数だけでもおまじないのように書いて使ってみてください。非常に便利です。
変数に代入
変数を宣言したら、その変数に何かを代入して運用します。
変数 = ○○
といった形で、変数と代入する値を =(イコール)でつなげます。
整数を代入
整数を代入する場合は、以下のように半角数字を使います。
price = 2000
文字列を代入
文字列を代入する場合は、代入する文字列の前後を「”(ダブルクォーテーション)」ではさみます。
fruit = “すいか”
文字列を使う場合、例えば
MsgBox “Hello World” → 「Hello World」という文字列を表す
Set ws = ThisWorkbook.Sheets(“Sheet1”) → 「Sheet1」という文字列を表す
といったかんじで、文字列の前後を「”(ダブルクォーテーション)」ではさみます。
sheetオブジェクトを代入
オブジェクトを代入する場合は、変数の前にSetを付けます。とりあえずおまじないとして覚えましょう。
例えば、マクロのコードが書かれているブック(ThisWorkbook.Sheets)のシート名(Sheet1)を変数 wsに代入する場合は
Set ws = ThisWorkbook.Sheets(“Sheet1”)
となります。
変数を宣言する場合は「Dim ws As Worksheet」と「Worksheet」が単数形でしたが、代入する場合は「.Sheets()」と複数形なるので注意です。
次に、別に開いているブック(book2.xlsxファイルとする)のシート名(Sheet1)を代入する場合は、
Set ws2 = Workbooks(“book2.xlsx”).Sheets(“Sheet1”)
となります。
また、「Workbooks(“book2.xlsx”).Sheet(1)」のように「Sheet(1)」と番号を付けることで、左から何番目のシートを扱うか指定ができます。
最後に
変数を使えるようになることで、コードの見やすさや効率がだいぶ上がります。
次回はいよいよ「if文・for文」についてまとめます。
