【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
   
基礎解説
チェック式 WSH入門 第4回

3.数値演算関数を使いこなす

Microsoft MVP
Visual Developer - Scripting
牟田口 大介
2006/08/18
Page1 Page2 Page3 Page4

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

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

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

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

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

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

マーカーで隠れたところを、1つずつクリックしてチェックしてみよう。 マーカーで隠れたところを、1つずつクリックしてチェックしてみよう。
Option Explicit
Randomize '乱数系列を初期化
Dim strColors, intMin, intMax, strLuckyColor
strColors = "赤橙黄緑青藍紫" '色の一覧
intMin = 1 '最小値
'最大値
MsgBox "今日のラッキーカラーは、「" & strLuckyColor & "」"

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

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

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


 INDEX
  [基礎解説]チェック式 WSH入門
  第4回 関数を使いこなす(その1) 文字列、数値、日付を扱う関数
    1.VBScriptの関数を使いこなそう
    2.文字列処理関数を使いこなす
  3.数値演算関数を使いこなす
    4.日付処理関数を使いこなす
 
 基礎解説

ホワイトペーパーTechTargetジャパン

Windows Server Insider フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています