繰り返し処理をするFor~Next
For~NextステートメントをExcel2003で解説しています。
同じことを何度も何度もする For~Next
2003版 繰り返し処理をするFor~Nextステートメント
毎回のように作成している記録のマクロですが、コードの意味が
たとえよく分からなくても、便利だなあと思えば使っちゃえばいいのです。
関数だって、エクセルの内部でどのように計算しているかわからなくても、即座に正しい結果が出れば使っています。
でも、そこはマクロ講座ですから、多少なりとも理解を助ける説明を付け加えさせてもらいますが、面倒なら飛ばしてもいいんです。
今回は、繰り返し処理をするFor~Nextを頭に叩き込むことにしましょう。
(サンプルファイルは、こちらから マクロ講座23回サンプルデータ)
このページの画像および解説はExcel2003用です。
記録のマクロでセルを赤く塗るマクロ
はじめにFor~Nextを使う準備として、セルを赤く塗るマクロの記録をしてみましょう。
さあ、今日もおきまりの実習ですよ。(「あ~、やだ」って言わないの!)
(1)マクロの記録を開始
(2)マクロの記録ダイアログボックスが表示されたら、名前をつけたほうが後でわかりやすです。
でも、そのままOKをクリックしてもかまいません。
(3)A1セルを選択し、ツールバーの色パレットボタンでセルを赤く塗ります。
A2セルを選択し、セルを赤く塗ります。
A3セルを選択し、セルを赤く塗ります。
A4セルを選択し、セルを赤く塗ります。・・・A10セルまで繰り返します。
A2セルを選択し、セルを赤く塗ります。
A3セルを選択し、セルを赤く塗ります。
A4セルを選択し、セルを赤く塗ります。・・・A10セルまで繰り返します。
(4)A1:A10までのセルが赤く塗られました。
マクロの記録を終了します。記録終了ボタンを押します。
マクロの記録を終了します。記録終了ボタンを押します。
自動記録で作成したマクロを見てみましょう。
セルの背景色は、InteriorオブジェクトのColorlndexプロパティまたはColorプロパティ を使います。 Colorlndexプロパティは、2003までおなじみでしたが、 2007以降は表示できる色が増えたので、Colorlndexで設定できない色は、Colorプロパティを使いRGB関数によって作成された値が入ります。
セルの背景色は、InteriorオブジェクトのColorlndexプロパティまたはColorプロパティ を使います。 Colorlndexプロパティは、2003までおなじみでしたが、 2007以降は表示できる色が増えたので、Colorlndexで設定できない色は、Colorプロパティを使いRGB関数によって作成された値が入ります。
こちらは、Excel2003で記録した場合なので、ColorIndexプロパティが使われて、赤く塗るのは
ColorIndex = 3
Sub Macro1() Range("A1").Select With Selection.Interior .ColorIndex = 3 .Pattern = xlSolid End With '(同様のコードがA10まで繰り返されている) End Sub
コードの解説です。
A1セルの範囲を選択して、
その選択された部分の内側の色をカラーパレットの3番の色にする
その選択された部分の内側の塗りつぶしパターンをSolidとする
(同様の内容が、A10まで繰り返し)
という意味になります。
Selectionは選択されているもの
Interiorは、内部を意味し、
ColorIndexは、カラーパレットの色です。
Patternは、塗りつぶしのパターンです。
3番がなぜ赤になる?というと、
カラーパレットの色は、左上が1番で左から右、
上から下の順番に番号がふられています。だから3番は赤なんです。
A1セルの範囲を選択して、
その選択された部分の内側の色をカラーパレットの3番の色にする
その選択された部分の内側の塗りつぶしパターンをSolidとする
(同様の内容が、A10まで繰り返し)
という意味になります。
Selectionは選択されているもの
Interiorは、内部を意味し、
ColorIndexは、カラーパレットの色です。
Patternは、塗りつぶしのパターンです。
3番がなぜ赤になる?というと、
カラーパレットの色は、左上が1番で左から右、
上から下の順番に番号がふられています。だから3番は赤なんです。
コードをスリムにしますね。今回塗りつぶしPatternは、不要ですから
Sub Macro2() Range("A1").Interior.ColorIndex = 3 Range("A2").Interior.ColorIndex = 3 Range("A3").Interior.ColorIndex = 3 Range("A4").Interior.ColorIndex = 3 Range("A5").Interior.ColorIndex = 3 Range("A6").Interior.ColorIndex = 3 Range("A7").Interior.ColorIndex = 3 Range("A8").Interior.ColorIndex = 3 Range("A9").Interior.ColorIndex = 3 Range("A10").Interior.ColorIndex = 3 End Sub