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


(3)

 2.処理を分岐させます。

これには、If Then Else という、Basicの処理分岐の命令文を使います。まずは下の処理の流れをアタマに入れてくださいね。

セル「F5」の得点を見る
もしも800以上だったら それ以外だったら
「B5」のフォントをピンク色に 「B5」のフォントを黒に
もしもって考るのはおしまい

まず単純に考えてみると、下のようになります。

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

このマクロを実行すると、とりあえず今選択しているセルの中身が800以上か未満か判断して、そのセルの文字の色を変更しています。

ちょっと試してみましょうか。


Excelのワークシートのウィンドウに戻りましょう。VBEのウィンドウとふつうのワークシートのウィンドウ、両方開いてますよね。
VBEのウィンドウは閉じなくてよいので、最小化でもしといてください。
ネコ表の中で、合計得点が800点以上のネコでテストします。わたしはとりあえずF6のセルが800以上なので、ここをクリックして選択(Selection)しました。

で、マクロを実行します。
忘れちゃいました?覚えにくいですよね。
これ。・・・メニューバー[ツール]→[マクロ]→[マクロ]で、NekoMacro2の方を実行します。
と、いかがでしょう。文字の色、変ります?クリックして選択しているセルの中の値(Value)が800以上なら、数字の色が変るはずです。

なんか味気ないですけど、VBAの第一歩ですので、もうしばらくお付き合いを。


これからVBAを使っていくと、いやっていうほど出てくる「書き方」なので、今覚える必要はないんですけど...。入力した構文を見ると、ピリオドで区切って単語を入力しますよね。

Selection.Font.ColorIndex

Selection.Value

例えば「文字」には、いろいろな設定項目がありますね。

色、種類、大きさ、太さ、配置....ツールバーの中に並んでいるツールボタンで設定できるものだけ見ても、相当な数です。

また、ひとくちに「セル」といっても、これまたいろいろな設定項目があるんですね。そのセルの番号(A4,H12など)、背景色、高さ、幅、入力されている値....。

VBAでは、これらの設定項目ひとつひとつを細かく記述する場合、ピリオドで区切って入力します。

今選んでるもの.入力されてる文字.色

今選んでるもの.中に入力されている値

本に載っているサンプルなどを見ると、訳のわからない単語がいっぱい並んでいてくらくらしますが、よーく見ると、ちょこちょこピリオドで区切られて入力されている個所があるはずです。

選んでいるセル=中に入力されている値のことではないんです。これもVBAの鉄則。Valueという言葉をうしろにくっつけてはじめて、「セルの中に入力されている値」のことをあらわすのです。

ここまでオッケーでしょうか?

さて、次の段階として、「色を変更したいのは数値のところじゃなくて、ネコの名前」なので、ネコの名前の入力されているB列の文字色が変るようにしていきましょう。




3.別のセルの文字の色を変えましょう。

今選んでいるセルより4つ左にあるセルの色を変えればいいんですよね。
Excelはセル単位で処理を考えますので、「今いる位置から、右にいくつ、下にいくつ」という考え方を常に持ちます。
これが結構めんどくさいんですよね・・。
んじゃ、処理を書き足しましょう。

Sub NekoMacro2()

 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

これで、得点のセルと、名前のセル、両方の色が変ることになります。
Offsetという新しい単語が新しく登場してきましたね。これは「この場所から指定した分だけ動いたところ」を指します。
実際にアクティブセルが移動しているわけではないのですが・・・。とにかく下にいくつ、右にいくつ分離れた場所を処理するのか、座標を示します。
上と左の場合はマイナスで示しますので、上のような表記になります。

同じように、F6をアクティブにした状態でこのマクロを動かして実験してみましょう。
ネコの名前も色が変ります?




4.繰り返し処理について考えましょう。

さて、これで第2ステップもクリアですね。

後は、この表の中のすべてのネコに対して、この処理が働けばいいんです。
どうやってやるか・・・。ここが一番の難所であります。

今、F6をアクティブにしてますから、2匹めのネコの得点を判断して色を変えてますよね。
3匹めのネコの得点判断をさせるためには、F7をクリックしてから、またこのIf Then Elseを書いて判断させればいいわけですよね。

Sub NekoMacro2()

Range("F6").Select '<---F6をクリックします。

 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 <---F7をクリックします。

 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

みどりの字のところが6行目のネコの処理、青い字のところが7行目のネコの処理です。
あ、5行目にもネコがいますから、この前に5行目のネコの処理をしないといけないのか。

・・・・・と、すると、このIF Then Else文を、15回書かないといけないってことですよね。

ま、とりあえずRange("セルの番号").Select のところを増やしていけばセルは移動していきますから、F19まで繰り返せば目的は達成できそうです。

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

わはははは〜。じゃ、ワークシート上にコマンドボタン作って、テストしやすくしてみましょうか。ボタンの作り方、ご記憶ですか?挑戦してみてくださいね。
ボタンの標題は変えられるので、入力し直してもよいでしょうし、コマンドxxのままでもいいでしょう。この辺はExcelの操作マニュアルを参照して下さいね。

さあ、コマンドボタンをクリックして、テストです。
おりこうネコのところの色が変るかな?
試しに、各ネコの得点を変更して合計得点が変っても正しく実行されるかどうか、試してみましょう。

これでいちおう第3ステップ終了です。まあ、使えないことはないですよね。
いかがでしょう。これがExcelのVBAです。

いちおう、ここまでクリアできたら、次はこんなことを考えましょう。

「もっと手短で楽な書き方はないか」

できるできないはともかくとして、考えるだけ考えましょう。これもVBAの鉄則です。
プログラム文は、できるだけ短い方が、負荷がかからなくてエラーの発生も最低限に押さえることができるはずなんですね。
では、処理の内容は同じですけど、このプログラム文をもっと短くできないか考えてみるとしましょう。