TOP メニュー

2010年3月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
フォトアルバム

カテゴリー「Super Play Rite の基本」の7件の投稿

2007年4月10日 (火)

座席表作成(5)

【´・ω・`】:悪児さんの座席表作成マクロを見て勉強になったよ。

(●`ε´●):お、おまえがそんなことを言うのは珍しいな。いったい

      どんなところが?

【´・ω・`】:それは下のコードだ。

     %名前=Range("B2:B50")

              このコードはSuper Play Riteを知らなければ書くことはできない。

     エクセルにもRangeというオブジェクトがあるが、こういう使い方は

     できないからな。

(●`ε´●):くまぷー、おまえはこの書き方を知らなかったんだな?

【´・ω・`】:うん。ちょっと解説するとこのコードはセルB2からB50までに

      書かれている氏名を配列変数%名前に代入するための

      ものだ。%名前(1)にはB2の「赤城まりこ」、%名前(2)には

      B3の「アジャコング」が格納されている。

      今まで同じことをやるのに、くまぷーは下のように書いていた。

      For %i = 1  To  49

                      %名前(%i) =Cells(%i+1, 2)

                Next

(●`ε´●):この書き方はVBAの書き方だな。

      こういうコードを書いていたら、

      くまぷーが三四郎マクロ初心者だということが

      バレバレだな。

【´・ω・`】:うん、でも本当に初心者だから仕方がない・・・。

      

      

2007年4月 5日 (木)

15パズル(7)

【´・ω・`】:今回はもう一つの基本事項のループだ。

      ループは処理の繰り返しに使う。その中でも最も基本的な

      を取り上げる。 まず、「For ループ」を取り上げよう。

★書式:

               For  %カウンタ変数 = 開始値 To 終了値

          繰り返したい処理

      Next

【´・ω・`】:このような記述をすると%カウンタ変数の値を開始値から

      終了値まで1ずつ増加させながら、(終了値-開始値+1)回だけ

      「繰り返したい処理」を繰り返す・・・。

(●`ε´●):おい、難しいぞ!!

【´・ω・`】:OK,では具体的に行こう。

 具体例(1)

      For %i = 1 To 5

                         MsgBox("こんにちは")

      Next

【´・ω・`】:具体例(1)のように記述すると、(終了値-開始値+1)回、つまり

      (5-1+1)回だから、5回ほど「こんにちは」というメッセージボックスが

      表示される。ではもう一つ具体例を・・・。

 具体例(2)

      For %i = 1 To 5

                         MsgBox( %i )

      Next

【´・ω・`】:さて、こんどはメッセージボックスの中身が「こんにちは」から%iに変わった。

      すると%カウンタ変数の%iが、開始値1から終了値5まで1ずつ増加していく

      から、具体例(1)では5回とも同じ「こんにちは」というメッセージが表示されたが

      こんどは・・・。

(●`ε´●):メッセージボックスの内容が5回とも違って、1,2,3,4,5と

      なるというわけか?

【´・ω・`】:その通り。「For ループ」では変化する%カウンタ変数の値をうまく

      利用するのがコツだな。

(●`ε´●):おー、なんとなくわかったぜ。

      ところで、なんで%iなんだ?

【´・ω・`】:別に%Xでも、%Yでも、あるいは日本語で%番号でもいいんだが

      %iがよくつかわれるのは integer(整数)の頭文字だからだな。

      それでは次回はこの2回でやった基本事項の考えをもとにして

      15パズルのコードに戻ろう。

15パズル(6)

【´・ω・`】:Range()形式をCells()形式にすると何がいいかを

      理解してもらうために二つほど基本事項を説明したい。

      まずは・・・

=(等号)の使い方について

【´・ω・`】:Super Play Riteでは、等号は2つの使い方があるんだ。

 (1)代入演算子としての=(等号)

   例) %X = %X +1

(●`ε´●):おい、その式はおかしくないか?両辺から%Xを引いたら

      0=1になっちゃうぞ!!

【´・ω・`】:この場合の等号の使い方は数学での使い方と違うんだ。

(●`ε´●):どう違う?

【´・ω・`】:まず式の右辺を計算して、その結果を左辺に代入するんだ。

      つまり、もしも%Xが1ならば右辺を計算して2。その結果を左辺に

      代入するわけだから、%X = %X +1のコードを実行すると

      実行前に1であった%Xが実行後には2になるということだ。

(●`ε´●):それでは、実行前に%Yが3だったとすると

      例) %Y = %Y -2

      の後では%Y は1になるということだな?

【´・ω・`】:そう。ちなみに割り算の「÷」を表す記号は「/(スラッシュ)」、かけ算は

     「*(アスタリスク)」になる。

(●`ε´●):わかった。で、もう一つの等号の使い方は?

(2)比較演算子としての=(等号)

【´・ω・`】:もう一つは数学の等号と同じ。左辺と右辺が等しいという意味。等号は

     If文のの中などで条件判断に使われると数学の等号と同じ使い方になる。

     例)      If Range("A1") = 1 Then

                                 MsgBox("A1は1です")

                           Else

                                 MsgBox("A1は1ではありません")

                           End  If

(●`ε´●):わかったけど面倒くさいな。なんでSuper Play Riteを作ったひとは

       同じ記号に二つの意味を持たせたんだ?!別の記号にしておけば

       混乱しないのに。

【´・ω・`】:BASICをルーツとするプログラミング言語はSuper Play Riteと同じだな。

      もちろん、ちがう記号を割り当てている言語もある。次回はもうひとつの

      基本事項を説明しよう。

                                                 (続く)

2007年4月 1日 (日)

記録マクロの功罪(3)

 前回は記録マクロの功罪のうち、「罪」の方を述べました。

今回は「功」の方です。

 それはコードの書き方を示してくれるという点です。

例えば、文字の色を赤くしたいと思ったならば、実際に

文字を赤くする操作をして記録マクロにコードを生成させれば

良いのです。すると下のようになります。

!! マクロ記録 : 2007/03/31 17:05:27
Range("A1").SetCurrent()
CurrentCell.CharStyle.Color = RGB(255, 0, 0)

なるほど、こうなるのかとわかります。

セルの背景を赤くしたければ、赤くする操作をして

記録マクロにコードを生成させれば良いのです。

すると下のようになります。

!! マクロ記録 : 2007/03/31 17:05:27
Range("A1").SetCurrent()
CurrentCell.CharStyle.Color = RGB(255, 0, 0)
CurrentCell.CellStyle.BackColor = RGB(255, 0, 0)

先ほどのコードに4行目が追加されました(赤字の行)。

見比べれば文字そのものの色を赤にしたければ

     CharStyle.Color

セルの背景を赤にしたければ

     CellStyle.BackColor

を弄ればいいということがわかります。

このように記録マクロを使えば、どのようにコードを

書けば良いかというのが(だいたい)わかります。

あと必要なのはちょっとした好奇心です。

(●`ε´●):CurrentCellは現在のセルって意味で・・・

      つまり、A1のことだから・・・

Range("A1").SetCurrent()
CurrentCell.CharStyle.Color = RGB(255, 0, 0)

Range("A1").CharStyle.Color = RGB(255, 0, 0)

と1行にまとめられるんじゃないか・・・

はい、その通り。まとめられます。もちろん

Range("A1").CellStyle.BackColor = RGB(255, 0, 0)

も有効です。

 ちなみにRGBは光の3原色を示しています。

R・・・Red(赤), G・・・Green(緑), B・・・Blue(青),

各色の度合いを0~255の整数値で現し、全て0だと

黒、全て255だと白になります。

(●`ε´●):お~、記録マクロって役に立つな!!

特にマクロ解説本が市販されていない三四郎ではな!!

 

2007年3月31日 (土)

記録マクロの功罪(2)

初心者向けを謳っているマクロ解説本を見ると記録マクロから

入っていくものが多いように見受けられます。確かにプログラミングに

関する知識を何一つ持たずにコードが手にはいるのですからお手軽と言えば

これ以上お手軽なものもありません。

 しかし、お手軽でかつ、素晴らしいというものは世の中に数多くは

ありません。記録マクロには大きな弱点があることを意識しておくべきでしょう。

記録マクロの弱点

  1. 余計なコードを生成することが非常に多い。
    そのため、コードが煩雑になる傾向がある。
  2. 実際にマウスとキーボードで操作できること以外の
    コードは作れない。
     したがって1000回繰り返すには同じことを
    1000回やらなくてはならない。煩わしくてやってられないですよね。
  3. 2.と同様の理由で条件判断を含むコードを生成することができない。

以上の理由で、くまぷーは志の高い入門者には記録マクロから入ることを

お奨めしません。多少、敷居が高く感じようとも基礎の文法からしっかり学んだ方が

良いと思います。文法を知らずに会話だ、会話だと狂奔する英語教育のようなもの

定型的な挨拶だけであとはさっぱり・・・となることが多いようです。(-_-;)

今回は記録マクロの功罪の「罪」について述べさせて頂きました。

記録マクロの功罪(1)

 三四郎はユーザがマウスやキーボードで行った操作を

記録して再現する機能を持っています。

この機能は「記録マクロ」と言われています。

(●`ε´●):どうやってやるんだ?

【´・ω・`】:メニューを「ツール」「マクロ」「記録開始」と辿ればいい。

そうすると三四郎が自動的にユーザの行った処理を記録してくれる。

(●`ε´●):記録って?

【´・ω・`】:例えばA1に「くまぷー」と入力するとその操作を三四郎が

プログラムに翻訳してくれるんだ。下が記録マクロで作られたコードだ。

!! マクロ記録 : 2007/03/31 14:02:16

Range("A1").SetCurrent()
CurrentCell.Formula = "くまぷー"

3行あるが、最初の緑の行はコメントと呼ばれていて

プログラムの実行時には無視される。

単なる説明のための行だ。

行頭に感嘆符を二つ入力するとその行はコメントになる。

(●`ε´●):ではA1に「くまぷー」と書き込むのに必要なのは

下の2行ということなんだな?

【´・ω・`】::うん。

(●`ε´●):ちょっと解説してくれ。

【´・ω・`】:OK。Range("A1")はセルA1を示している。

SetCurrent()はアクティブにする、ということだ。

だからRange("A1")とSetCurrent()を「.」(ドット)でつないで

              Range("A1").SetCurrent()

と記述するとセルA1をアクティブにしなさい、という命令になる。

(●`ε´●):セルをマウスでクリックしたりするとそのセルの枠が

黒太表示になって文字などを入力できるようになる。

この状態をアクティブって言うんだったよな?!

【´・ω・`】:うん。

(●`ε´●):で、次は?

【´・ω・`】:CurrentCellは現在のアクティブセル。

(●`ε´●):つまり、A1だな?!

【´・ω・`】:うん。Formulaは式。つまり、A1の式として「くまぷー」を

代入しなさいということ。

この2行を実行するとA1に「くまぷー」と入力したのと同じことになる。

(●`ε´●):「くまぷー」ってのは式じゃないだろ?

【´・ω・`】:うん、でも記録マクロを使うとそういうコードが

生成されてしまうんだ。実際には自動記録で生成されるコードは

冗長なものになることが多いんだ。例えばセルA1に「くまぷー」入力するだけなら、

          Range("A1") = "くまぷー"

の1行で十分だし・・・。

(●`ε´●):この方がすっきりしているな。

                                                  (続く)

2007年3月29日 (木)

変数

 多くのプログラミング言語ではあらかじめ、変数宣言を

しておかないとエラーになってしまいます。

しかし、三四郎マクロでは変数を宣言無しで使うことができます。

また三四郎マクロではではLongだのStringだのと

変数の型を指定しなくても使えます。

変数自体を宣言しないのでこれは当たり前ですか・・・。(^^ゞ

 
 三四郎マクロでは変数は大雑把に言うとたったの2種類です。

%Count, %i, %MyRange

などのようにと頭に%をくっつけたもの。それと

$Count, $i, $MyRange

と頭に$のついたものです。%はその変数が

ローカル変数であることを示し、$はその変数が

グローバル変数であることを示しています。

ここではローカル変数とはなんだとか、

グローバル変数とはなんだとかいった説明はしません。

 ローカル変数・グローバル変数の用語がわからない方は

とりあえず三四郎マクロでは文字列の頭に%をつければ、

その文字列が変数として扱われるという理解して、

当面は$のついたグローバル変数のことは

忘れてしまっても差し支えないと思います。

 当分の間、この道場で取り上げるマクロでは

ローカル変数だけしか使わない予定です。(^。^)