2008年05月01日

続・前回のコードについて説明致しますぅ〜

えぇ〜、大変長らくお待たせしましたぁ〜


一歩前進マクロの解説の続編です・・

そうさのぉ〜、間を空けすぎて何から書けがいいのか忘れてしまったのだが・・・

ん〜、それじゃぁ、マクロ(VBA) における = (イコール) の意味を取り上げよう。数学的な意味はご存知のとおり、『右辺と左辺は等価である』 ということだ。しかし、マクロでは を変数として A = A+1 などという記述が平気で行なわれる。数学的にはあり得ない式だが、マクロでは 『左辺に右辺を代入する』 という意味がある。つまり という変数に A+1 の値を代入しなさいっていう意味なのである。

他にも厄介なことに場合によって別の意味を持つ。If A = B ThenEnd If となっていた場合、右辺と左辺が等しいか否かっていう比較演算子として働くのである。前回説明のとおり If は条件が真か偽かで処理を分岐するものなので、条件を与える場所では 真か偽 の値が要求されているため、ここでは代入ではなく比較演算子として働くのである。

では、ここで問題!
変数 A、B、C が定義されていたとして、マクロ的に A = B = C を説明しなさい。



まぁ、この記述は マクロ(VBA) 独特の意味をもつ。C言語 や Perl、JavaScript をはじめ多くのプログラム言語とは違った意味になっている。後者では代入演算子として B に C を代入し、更に B を A に代入せよという意味になるのに対し、マクロでは A に B と C が等価か否かの結果を代入せよっていうことになってしまうのだ。最初の = は代入演算子、後のは比較演算子として振舞うっていうわけだ。


ちょっとややこしいが、これを踏まえて続きを解説しよう。

Cells(Row,Col1) = Cells(Row,Col2)

もちろんこれは代入演算子。右辺で指定されたセル(元のコマ位置)の値を左辺で指定されたセル(移動先のコマ位置)の値に代入しているわけだ。

Cells(Row,Col2) = Empty

この行の左辺は前の行の右辺と同じである。元のコマ位置のセルの値に Empty (空白) を代入することで移動を完了しているわけだ。

そして多少難解ながら非常に重要な文 書式設定 Cells(Row,Col1), 90

前回、簡単に解説したが覚えているだろうか? 書式設定 というプロシジャーが定義されている。そのプロシジャーを呼び出している行だ。後に続く Cells(Row,Col1), 90 はプロシジャーに与える引数。ここでは移動先のセルを指定する Rangeオブジェクト とフォントの向きを指定するための角度が与えられている。ただし、この引数はプロシジャーの定義に従った変数でなければならない。

書式設定 プロシジャーを見てみよう。

Private Sub 書式設定(objRange As Range, Orient As Long) 〜 End Sub

と定義されている。プロシジャー名の後に続く括弧内で受け取る引数が指定されているわけだ。最初の引数の値に Rangeオブジェクト を objRange という変数で受け取り、2番目の引数の値で 長整数 を Orient という変数名で受け取るように定義されているのだ。呼び出し側で与えたものと一致していることが解るであろう。

この 書式設定プロシジャー でやっていることは、文字通り書式設定だ。セルのプロパティに値を設定しているだけなので、Excel マクロ のヘルプを参照してください。 ・・・『手抜き』・・・しちゃった?

プロシジャーの呼び出しも非常に重要です。そして便利です。
もちろん、それぞれの場所で同じコードを何度も記述すればプロシジャーとして呼び出すことなく同じ処理ができます。この例では2個所ですね。でもね・・・

例えばもし、書体をかえたいなぁ〜 て思った場合、書式設定プロシジャーを呼び出していれば .Font.Name = "HGP創英角ポップ体" の1箇所を変えるだけでOKですが、同じコードが何箇所にも書かれていると全てを修正しなくてはなりません。修正もれは即、バグに繋がります。フォントなどの場合はすぐに発見できますが、数値演算などの場合は発見しにくく、バグを残してしまう原因になりかねません。また、数十箇所もあったりしたらコードを書くのも嫌になってしまいますし・・・



って、あれっ? ひょっとして・・・難しかった?

どうも解りやすく説明するのが下手みたいなんです・・・

先日、仕事先でマクロの説明をできるだけ解りやすくしたつもりなんですが・・・

喧嘩売ってんのかっ!

って言われちゃいました。ちょっと凹んだ・・・フリ してました。


だって、下手なんだもん!  って心の中で叫びながら・・・




タグ:マクロ EXCEL
posted by Woody at 22:07| Comment(0) | TrackBack(0) | Excel マクロ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/95331753
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。