【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  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-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

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

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

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

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?