連載
» 2006年08月18日 00時00分 公開

基礎解説 演習方式で身につけるチェック式WSH超入門:第4回 関数を使いこなす(その1) 文字列、数値、日付を扱う関数 (3/4)

[牟田口大介(Microsoft MVP Visual Developer - Scripting),著]

数値演算関数 その1(三角関数)

 連載第3回では、算術演算子を用いて数値の計算をする例を取り上げたが、これから説明する数値演算関数を用いれば、もっと複雑な計算も可能になる。

 三角形の面積を求める公式として、「1/2×(辺1の長さ)×(辺2の長さ)×sin(辺1、辺2に挟まれる角度)」というものがある。この公式を利用して三角形の面積を算出するには、Sin関数を用いればよい。Sin関数の引数に指定する角度の単位はラジアンである。従ってディグリー(度)から変換するには、π(≒3.14)/180をかける必要があるが、πはAtn関数(アークタンジェント)を使うことで求められる。

 例えば、三角関数を使って次の三角形の面積を求めてみよう。

三角形の図
この三角形の面積を、公式を使って求める。

 スクリプトは次のようになる。

Option Explicit
Dim dblPi,dblArea
dblPi = 4 * Atn(1) 'π(≒3.14)の正確な値を求める
dblArea = (1 / 2) * 5 * 7 * Sin(60 * dblPi / 180) '面積を求める
MsgBox "辺1=5cm、辺2=7cm、両辺の作る角が60°の三角形の面積は、" & dblArea & "平方cm"

 実行結果は次のとおり。

Sin関数の使用例
Sin関数を使って三角形の面積を求める。

 このように、三角比を含むような数式も数値演算関数を使って求められる。変数の接頭辞dblは、倍精度浮動小数点数型(Double)といって、小数点以下の数値を含むデータ型に付ける変数名である。なお、Sin関数のほかにもCos、Tan関数や、平方根(√)を求めるSqr関数などがある。

数値演算関数 その2(数値の丸め)

 先ほどの例の結果は小数点以下の数字が多く表示されて分かりづらい。そこで、少ない小数点のけた数で丸めるために用意されているのがRound関数である。先ほどの例の最後の行を次のようにしてみよう。

MsgBox "辺1=5cm、辺2=7cm、両辺の作る角が60°の三角形の面積は、" & Round(dblArea, 2) & "平方cm"

 実行結果は次のようになる。

Round関数の使用例
指定された小数点位置で丸められる。

 この例では、Round関数で小数点以下第2位までを表示するようにしている。

数値演算関数 その3(乱数)

 数値演算関数でほかによく使うものは、乱数を発生させるRnd関数であろう。乱数とは、取り出すたびに異なるようなランダム(無作為)な数値のことで、Rnd関数を使うと、0以上1未満の乱数を得ることができる。

Option Explicit
Randomize '乱数系列を初期化
Dim intMin, intMax
intMin = 1 '最小値
intMax = 100 '最大値
MsgBox "1〜100までのランダムな数→" & Int((intMax - intMin + 1) * Rnd + intMin) 'ランダムな値を表示

 上記のスクリプトを3回実行してみた。このように、実行するたびにランダムな数値が得られる。

Rnd関数の実行例その1Rnd関数の実行例その2Rnd関数の実行例その3 Rnd関数の実行例
1〜100の乱数を発生させている。画面はスクリプトを3回実行した結果。実行するたびに異なる数値が得られていることが分かる。

 乱数は機械的に発生させるものだが、種(シード)と呼ばれる数値だけは指定しないと、いつも同じ乱数を発生させてしまう(逆にいえば、同じ種を指定することで、同じ乱数系列を取得できる)。そこでこのサンプルでは、Randomizeステートメントを使って、乱数の種をシステム・タイマーから取得して、乱数系列を初期化している。これで実行するたびに異なった乱数が発生するというわけである。

 Rnd関数の戻り値に(最大値−最小値+1)をかけ、最小値を足すことで、最小値〜最大値の範囲のランダムな値を取得できるので覚えておこう。

 なお、Rnd関数は引数に乱数系列を指定する値を取るが(詳しくはヘルプ参照)、引数を省略してもよい。このように引数がない関数を使うときは、( )を付けても付けなくてもよい。

 上記スクリプトでは、最後に整数値に変換するためにInt関数を用いている。この関数は、小数値の整数部分を返す。

 ここで例題を1つ出そう。虹の7色から今日のラッキーカラーをランダムに選ぶスクリプトを考える。文字列処理関数と数値演算関数の組み合わせがポイントとなる。

CHECK!

マーカーで隠れたところを選択してチェックしてみよう。


Option Explicit
Randomize '乱数系列を初期化
Dim strColors, intMin, intMax, strLuckyColor
strColors = "赤橙黄緑青藍紫" '色の一覧
intMin = 1 '最小値
intMax = Len(strColors) '最大値
strLuckyColor = Mid(strColors, Int((intMax - intMin + 1) * Rnd + intMin), 1)
MsgBox "今日のラッキーカラーは、「" & strLuckyColor & "」"

 スクリプトの実行結果は次のとおり。

ラッキーカラーを表示するスクリプトその1ラッキーカラーを表示するスクリプトその2ラッキーカラーを表示するスクリプトその3 ラッキーカラーを表示するスクリプト
虹の7色からランダムに1色を取り出し表示する。3回実行した結果。

 この例では、Mid関数の引数にRnd関数の戻り値を用いることで、文字列からランダムに文字列を取得している。このようにRnd関数はゲームなどに応用できる。ほかにもこれまでに登場した関数を組み合わせて、自分なりのゲームを考えてみるのも楽しいだろう。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。