DIYしよう! EXCELでDIY

Excelで競馬分析をしよう    
   Home > DIYしよう!> ExcelでDIY
お知らせ ソフトウェア 競馬研究 DIYしよう 出馬表 開催情報 BLOG リンク モバイル
 
 

■変数ってなんだ?

   今回は前回でもちょこっと触れた変数について。はっきり言ってつまらん内容ですが、データを自由自在に扱うためにはどうしても必要なことなので、理解できなくても使える様になりましょう。

 普段パソコンを利用していると、様々な形式のデータに触れると思います。画像であったり、音楽であったり、テキストであったり…。これらは形式が違えど、HDDやメモリ上に読み込まれます。HDDは一度書きこむと、電源を落としてもデータが残っていますが、メモリ上のデータは、電源を落とすと消えてしまいます。HDDにはデータベースの様な消えては困るデータを、メモリには一時的に利用したいデータをと言うのが、パソコンの基本思想ですね(すごく乱暴な言い方ですが…)。

メモリにデータを格納 変数にデータを格納
図1.メモリと変数の概念

 これを競馬に当てはめると、成績や出馬表などの蓄積データはHDD上に蓄積し、分析に使うデータだけをその都度メモリ上に読み込んで処理すると言う使い方になります。ただし、メモリはOSが管理するもので、他のアプリケーションも利用する公共の場なので、プログラムから好き勝手にアクセスすることは出来ません。それに、実際の使い勝手もあまりよくないです。
 代わりにプログラム中では、変数という記憶領域を必要に応じて定義し、データの一時格納を行います。メモリにデータを保存する際には、メモリアドレスを意識しなければなりませんが、変数を利用すれば意識する必要がなくなります。

■変数のルール

 変数は必要に応じで、メモリ上に領域を確保し、使い終わった時にアプリケーションが解放してくれる便利なものです。ただ、利用する上でいくつか守らなければならないルールがあるので、注意が必要です。

変数のルール
  • 変数には名前を付ける必要がある
  • 変数名は出来る限り半角英数字のみにする
  • 変数には"型"が存在し、適切な型を指定する必要がある
  • 変数は使用する前に宣言をしなければならない
  • 同じ有効範囲内では名前の重複をしてはいけない

 上記ルールの中で重要なポイントは、名前を付けることと、使用する前に宣言することです。出来れば併せて変数の型も指定したほうがいいでしょう。VBは初心者向きに設計されているので、変数の宣言や型の指定を省いてもプログラムは動きます。でも、変数にまつわるバグは分かりづらい上に、後々まで残るので宣言をした方がいいです。

■変数の宣言

 使用する変数をあらかじめ、登録する作業のことを「変数の宣言」と言います。この作業は、VBに○○という名前の変数を使うので、メモリを確保してくださいと言う意味です。だから、未使用の変数があっても、メモリは消費されます。
変数の宣言は、Dimステートメントを使います。

Dim szTxt


 上記は、szTxtと言う名前の変数を宣言すると言う意味です。これをプログラムやプロシジャーの初めに記入するだけです。ただし、変数にはグローバル変数とローカル変数があり、変数が有効になる範囲が違います。変数の有効範囲(スコープ)とは、宣言の有効範囲のことであり、範囲の外では宣言は無効です。分かりずらいと思うので、こう考えてください。

変数の宣言の考え方のヒント
  • グローバル、ローカルの区分は変数の名前、管理に対する制約を軽減するためのもの
  • 変数は同じ名前を使ってはならない
  • プロシジャー内で宣言した変数は、プロシジャーの中の他の変数と同じ名前にしてはいけない
  • プロシジャー内で宣言した変数と同じ変数が、他のプロシジャー内にあっても問題ない
  • プロシジャーの外で宣言した変数は、グローバル変数であり、プロシジャーの内外を問わず同じ名前があってはいけない

変数の有効範囲
図2.変数の有効範囲(スコープ)


■変数の型

  変数にはもう1つ重要なルールが有ります。それが型です。変数は数字や文字を入れるための入れ物にすぎず、実際にデータを入れるまでどんなデータが入るか分かりません。作っている本人には分かっていても、あなたの書いたソースコードを動かす立場(PC)にしてみたら、たまったものでは有りません。好き放題データをほおりこまれて、効率よく仕事なんぞできるはずもないですね。しかも、PCは人間ほどの柔軟性が無いので、1cmのものを図るのに1mの物差しを持ってくるかもしれません。
そこで、プログラムコードを書く側が、事細かに変数の分類をして上げます。具体的には、数値や文字列、日付など用途にあった型に分類するだけです。VBが扱える変数の型は大雑把に分けて次に様なものが有ります。

表1.Visual Basicが扱える変数の型
宣言型 型名 使用メモリ 説明
Integer 整数型 2バイト -32,768〜32,767の範囲の整数
Long 長整数型 4バイト -2,147,483,648〜2,147,483,647の範囲の整数
Single 単精度浮動小数点数 4バイト -3.402823E38〜-1.401298E-45(負)
1.401298E-45 〜 3.402823E38 (正)の範囲の実数
Double 倍精度浮動小数点数型 8バイト -1.79769313486232E308〜-4.94065645841247E-324(負)
4.94065645841247E-324〜1.79769313486232E308(正)
の範囲の実数
Date 日付型 8バイト 西暦100年01月01日〜9999年12月31日までの日付
String 可変長文字列 10+文字数 0〜2GBまでの可変長文字列
String*n 固定長文字列 文字列の長さ 0〜2GBまでの固定長
Variant バリアント 内容による 中に代入されたデータにより変数の型が変化

注)他にも変数の型は存在しますが、ここでは省略します

 数字が苦手な人が見れば発狂しそうな数値が出ていますね(笑)。ざっと挙げるだけでも以上のような型が存在します。面倒ならVariant型を宣言すればいいのですが(VBでは何も変数の型を書かなければ自動的にVariantになる)、その場合バグの見つけずらい出来の悪いソースコードになるので、初めから変数の型を意識してコードを書くようにしましょう。

 上記の中で、競馬に役立つ変数の型をあげると、Long型、Single型、Date型、String型でしょう。大抵の処理はLong型とString型でことが足ります。連対率やタイムの管理にはSingle程度で十分ですね。日付の管理にはDate型を積極的に利用しましょう。LongやIntegerを使っても日付の管理は出来ますが、面倒な閏年の処理や2000年問題を自分で処理する必要が有ります。
型を宣言する場合には、変数の宣言の際に後ろに型を付けてあげましょう。

Dim szTxt as String …… szTxt変数をString型として宣言
Dim i as Integer …………i変数をInteger型として宣言
Dim mDate as Date………mDate変数をDate型として宣言

続けて宣言したい場合には、

Dim szTxt as String,i as Integer

カンマ(,)で区切れば複数の変数の宣言が行えます。

今回はここまで。面白くない話しを長々と説明してすみません。
次回は今回出てきた変数を使って、ワークシートのちょっとした分析をします。

 
 

HomeMenuBackNext