<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97 VBAの森>ExcelでVBA



(4)

さてさて、苦労して入力したネコマクロですが、もっとカンタンな書き方がないかどうかじっくり研究してみましょう。

Sub NekoMacro2()

Range("F5").Select

 If Selection.Value >= 800 Then
  Selection.Font.ColorIndex = 7 ' <--ピンク色
  Selection.Offset(0, -4).Font.ColorIndex = 7
 Else
  Selection.Font.ColorIndex = 1 ' <--黒
  Selection.Offset(0, -4).Font.ColorIndex = 1
 End If

Range("F6").Select

 If Selection.Value >= 800 Then
  Selection.Font.ColorIndex = 7 ' <--ピンク色
  Selection.Offset(0, -4).Font.ColorIndex = 7
 Else
  Selection.Font.ColorIndex = 1 ' <--黒
  Selection.Offset(0, -4).Font.ColorIndex = 1
 End If

Range("F7").Select

 If Selection.Value >= 800 Then
  Selection.Font.ColorIndex = 7 ' <--ピンク色
  Selection.Offset(0, -4).Font.ColorIndex = 7
 Else
  Selection.Font.ColorIndex = 1 ' <--黒
  Selection.Offset(0, -4).Font.ColorIndex = 1
 End If

Range("F8").Select

 If Selection.Value >= 800 Then
  Selection.Font.ColorIndex = 7 ' <--ピンク色
  Selection.Offset(0, -4).Font.ColorIndex = 7
 Else
  Selection.Font.ColorIndex = 1 ' <--黒
  Selection.Offset(0, -4).Font.ColorIndex = 1
 End If

Range("F9").Select

 If Selection.Value >= 800 Then
  Selection.Font.ColorIndex = 7 ' <--ピンク色
  Selection.Offset(0, -4).Font.ColorIndex = 7
 Else
  Selection.Font.ColorIndex = 1 ' <--黒
  Selection.Offset(0, -4).Font.ColorIndex = 1
 End If

Range("F10").Select

 If Selection.Value >= 800 Then
  Selection.Font.ColorIndex = 7 ' <--ピンク色
  Selection.Offset(0, -4).Font.ColorIndex = 7
 Else
  Selection.Font.ColorIndex = 1 ' <--黒
  Selection.Offset(0, -4).Font.ColorIndex = 1
 End If

 ・
 ・
 ・
 ・

End Sub

同じような処理が繰り返されてますよね。少なくとも

If Selection.Value >= 800 Then
Selection.Font.ColorIndex = 7 ' <--ピンク色
Selection.Offset(0, -4).Font.ColorIndex = 7
Else
Selection.Font.ColorIndex = 1 ' <--黒
Selection.Offset(0, -4).Font.ColorIndex = 1
End If

ここんとこはおんなじはず。これを15回繰り返しているわけで、何が違うかというと

Range("F15").Select

そうですね。クリックしてSelectするセルの番号が違うわけですね。
ここを何とかすれば、いわゆる「繰り返し処理」というやつを作ることができるかもしれません。

ふつう、プログラムというものは、上から下に向かって1行ずつ処理を実行して、一番下の行のところまで行ったら処理が終了するようになってます。
プログラムの記述を短くするためには、ある程度行ったり来たりさせないとならないわけですね。
今回のように、やってる処理は同じだけど、選択しているセルの番号だけ毎回違う、なんて処理は、繰り返し処理が可能かもしれません。

考えてみましょう。まず何が必要でしょう。
選択するセルの番号を、いっこずつずらしていかないといけないですね。
そして、このネコ表でいくと、F5からF19まで処理をさせたいので、5から19まで、いっこずつ数を増やしていく必要があります。

Range("F★").Select

★のとこの数値を、5から19まで増やせばよいのです。こういう一定の法則がある処理は、VBA向き。


繰り返し処理に用いられる文に、For Nextというのがあります。書き方はこうです。

For 数 5 to 19

 (処理)

Next 数

「数」というものが5から19になるまで処理を繰り返し、処理が1回終るごとに数はいっこ増える、という意味ですね。

さて、ここで、VBAを使うにあたってもっとも重要なことが登場します。変数です。

上記のように「数が5から19まで増える」場合の「数」とは、要するに毎回違う値なわけですよね。
このように、5だったり6だったり7だったりする場合、値を固定することができないので、「変数」というものを用います。

値を入れておく入れ物だと思って下さい。とりあえずやってみましょう。
変数には名前を付けます。とりあえず数を入れておく変数には、何でもいいのでわかりやすい名前を付けておきましょう。
何でもいいんですけど、できればその変数はどういう目的で使われるのか、分かるような名前がいいでしょう。

今回は変数がふたついります。多分。

ひとつは、繰り返しの回数を数えるための変数。これは数字です。

これは、そうですねぇ・・・回数を数えますから、Cntとしましょうか。
Countだと、似たような名前の関数とか、Excelが既に使ってるかもしれないし、ブッキングしちゃいそうなんで、ところどころ文字を抜いてみました。

もうひとつはセルの番号を入れておく変数。こっちは文字として考えましょう。

こっちは、CellNbrってしようかな。ところどころ大文字にすると、なんかカッコイイデスよね。

名前を決めたら「こういう名前の変数を使わせて下さい」とお願いをします。

Dim Cnt As Integer
Dim CellNbr As String

これは、CntはInteger(数値の種類を表してます)、CellNbrは文字列です、と、正々堂々宣言をしていることになります。
これを、一番最初に書きます。
一番最初といっても、Sub NekoMacro2()これより上に書いても全然意味がないので、この行のすぐ下に書きましょう。

で、この2行の下から、晴れてCntとCellNbrという単語を入力しても、エラーになったりしないわけですね。
んではまず、For Nextの部分を作りましょう。

Cntは今回、5行目からネコのデータが始まってるので、1から4はいらないですよね。ですので、初期値が5ってことになります。

Cnt = 5

で、その下に、Cntが5から19の間、という意味の文を入力します。

For Cnt = 5 To 19

 (処理)

Next Cnt

次に、セルの番号を作って、CellNbrに入れます。
これは、For Cnt = 5 To 19 のすぐ下がいいかもしれないですね。

CellNbr = "F" & Cnt

これは単純で、"F"というのはF列のことですね。
ダブルコーテーションで囲んでいるのは、変数でもExcelの関数名でもなんでもないので、むき出しで書いてもExcelに分かってもらえないからです。
関数名とかセルの番号とかじゃなく、本当に「F」ってそのまま出したいときは、こんな風に””で囲んで守ります。

で、文字扱いなので&でつなぎます。後ろに来るのはCntです。
ここには、1回目は5、2回目は6、3回目は7。。。と、数字が入っているはずなので、そのままセル番号として使ってみます。

で、後は、IF文の部分を1回分、この繰り返し処理の内側に書けば完成です。

Sub NekoMacro2()

Dim Cnt As Integer
Dim CellNbr As String

Cnt = 5
For Cnt = 5 To 19
CellNbr = "F" & Cnt

Range(CellNbr).Select
 If Selection.Value >= 800 Then
  Selection.Font.ColorIndex = 7 ' <--ピンク色
  Selection.Offset(0, -4).Font.ColorIndex = 7
 Else
  Selection.Font.ColorIndex = 1 ' <--黒
  Selection.Offset(0, -4).Font.ColorIndex = 1
 End If

Next Cnt

End Sub

すると、さっき作ったながーーーーいプログラム文は、ほとんどいらないってことになります。
これで同じ処理ができるわけですね。
なんか忍びないですけど、いらない行は削除して下さい。

実行結果は同じはずなんですけど、いちおう試してみましょうか。
まあ、適当にネコたちの得点を書き換えてみて、何度かテストしてみましょう。

文字の色を変えるくらいのことなら、別にこんな大掛かりなことをしなくても、関数で何とかなるんですけれど、今日は練習ですから、処理の中身よりもIf文とかFor Next文とか変数とか、その辺をじっくり押さえておいて下さい。後はマクロ記録の方法。

そして、作り込みたい処理は紙に書き出すなどして、整頓するようにしましょう。