繰り返し処理をするFor~Next
同じことを何度も何度もするなんて For~Next
繰り返し処理をするFor~Nextステートメント
毎回のように作成している記録のマクロですが、コードの意味が
たとえよく分からなくても、便利だなあと思えば使っちゃえばいいのです。
関数だって、エクセルの内部でどのように計算しているかわからなくても、即座に正しい結果が出れば使っています。
でも、そこはマクロ講座ですから、多少なりとも理解を助ける説明を付け加えさせてもらいますが、面倒なら飛ばしてもいいんです。
今回は、繰り返し処理をするFor~Nextを頭に叩き込むことにしましょう。
(サンプルファイルは、こちらから マクロ講座23回サンプルデータ)
記録のマクロでセルを何度も赤く塗るマクロ
はじめに、予備知識としてセルを赤く塗るマクロの記録をしてみましょう。
この記録マクロは、マクロ作成後、For~Nextを使って書き換えます。
さあ、今日もおきまりの実習ですよ。(「あ~、やだ」って言わないの!)
Excel2013で記録マクロを作成する手順は以下の動画をご覧ください。
(1)マクロの記録を開始
(2)A1セルを選択し、ツールバーの色パレットボタンでセルを赤く塗ります。
A2セルを選択し、セルを赤く塗ります。
A3セルを選択し、セルを赤く塗ります。
A4セルを選択し、セルを赤く塗ります。・・・これをA10まで繰り返します。
A2セルを選択し、セルを赤く塗ります。
A3セルを選択し、セルを赤く塗ります。
A4セルを選択し、セルを赤く塗ります。・・・これをA10まで繰り返します。
(3)A1:A10までのセルが赤く塗られました。
マクロの記録を終了します。記録終了ボタンを押します。
マクロの記録を終了します。記録終了ボタンを押します。
自動記録で作成したマクロを見てみましょう。
セルの背景色は、InteriorオブジェクトのColorlndexプロパティまたはColorプロパティ を使います。 Colorlndexプロパティは、Excel2003までは、パレットに登録されていた色を含めて標準の色と定義されているのが56色だけでしたので、 Colorlndexプロパティで設定しました。 Excel2007以降は1,670万色以上もの色が使えるようになり、Colorプロパティで設定するようになりました。Colorプロパティには、RGB関数によって作成された値が入ります。
セルの背景色は、InteriorオブジェクトのColorlndexプロパティまたはColorプロパティ を使います。 Colorlndexプロパティは、Excel2003までは、パレットに登録されていた色を含めて標準の色と定義されているのが56色だけでしたので、 Colorlndexプロパティで設定しました。 Excel2007以降は1,670万色以上もの色が使えるようになり、Colorプロパティで設定するようになりました。Colorプロパティには、RGB関数によって作成された値が入ります。
Sub セルを赤く塗る() Range("A1").Select With Selection.Interior .Pattern = xlSolid ' 網掛けはなし .PatternColorIndex = xlAutomatic ' 網掛けの色はオート .Color = 255 '色は赤 RGB(255,0,0)と同じ意味 .TintAndShade = 0 ' テーマカラーの明るさは0 .PatternTintAndShade = 0 ' オブジェクトの濃淡と網掛けパターンは0 End With '(同様のコードがA10まで繰り返されている) End SubExcel2003で記録した場合は、ColorIndexプロパティが使われるので、6行目の赤く塗るのコードは .ColorIndex = 3になります。
コードの解説です。
A1セルの範囲を選択して、
その選択された部分の内側の網掛けはなし
その選択された部分の内側の網掛けの色はオート
その選択された部分の内側の色は赤
その選択された部分の内側のテーマカラーの明るさは0
その選択された部分の内側のオブジェクトの濃淡と網掛けパターンは0
という意味になります。
A1セルの範囲を選択して、
その選択された部分の内側の網掛けはなし
その選択された部分の内側の網掛けの色はオート
その選択された部分の内側の色は赤
その選択された部分の内側のテーマカラーの明るさは0
その選択された部分の内側のオブジェクトの濃淡と網掛けパターンは0
という意味になります。
コードをスリムにしますね。今回塗りつぶし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