
(05) VBA「カラーチャート」、コードの説明!
Cells オブジェクトと Range オブジェクトを操作
For 〜 Next 制御文でループ(繰り返し)処理を実行
定型化作業や繰り返し処理が得意な、VBA
「広告」
(05) VBA「カラーチャート」、コードの説明!
Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。
現状、 VBAコード 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。
Cells オブジェクトと Range オブジェクトを操作
正式には、 Cells は Worksheet オブジェクト または Range オブジェクトのプロパティで、「セルを表す Range オブジェクト」を返します。2オブジェクトのプロパティのため、 Cells オブジェクト自体は存在しません。
Worksheet オブジェクトの Cells プロパティは、「ワークシートの全セル範囲を示す Range オブジェクト」ですが、まだ理解できないかもしれません。
この連載を見ている方で(現状)これを理解するのは難しいと思いますので、便宜上 Cells オブジェクトで説明を続けます。
Sub Macro1()
Range("A1").Select
Cells(1, 1).Interior.Color = RGB(255, 0, 0)
Range("A1").Select
End Sub
Range("A1").Select の .Select は セルを現す Range オブジェクトのメソッドで、「A1」セルを選択する機能(操作)を実行。
つまり、マウス(トラックパッド)で「A1」セルをクリックする操作に対応したコードです。
スクロールされて「A1」セルが画面上に表示されていない場合にこのコードを実行すると、「A1」セルを画面上に表示するため、結果的にスクロールされます。
「 H列 」以降の列を画面上に表示後、 Macro1() を実行して試してください。
Cells( 行番号, 列番号 ) もセルを表すオブジェクトで、 Cells( 1, 1 ) は Range("A1") と同等です。
同様に、C列の列番号は「3」となります。
Range("A1: F52") の形式だと 複数セルを持つ Range オブジェクトとなり、単一セルに限定されません。
現時点では、「 Cells( 行番号, 列番号 ) は、単一セルを示す Range オブジェクトと読み替え」てください。
単一セルを VBA で扱う場合、Cells( 行番号, 列番号 ) 形式の方が(繰り返しの処理を)プログラム処理しやすいため、 Range オブジェクトと使い分けます。
つまり、Cells(1, 1).Interior.Color はセルの背景色を示す Range("A1").Interior.Color プロパティ。
ちなみに、セルの文字色を示すプロパティは、 Range("A1").Font.Color です。
RGB(r, g, b) は、フルカラー(1670万色)中の1色を指定するために用意されている関数。
この代入は、「A1」セルを示す Range オブジェクトの Interior.Color(背景色)プロパティに、RGB関数が返す整数値(255)をセットするということになります。
(その結果、該当セルの背景色が変更される)
For 〜 Next 制御文でループ(繰り返し)処理を実行

Sub Macro1()
'
' Macro1 Macro
' ColorChart1 (Red)
Dim i As Integer
Dim j As Integer
j = 0
For i = 0 To 255 Step 5
j = j + 1
Cells(j, 1).Interior.Color = RGB(255, 0, i)
Cells(j, 1).Value = "255, 0, " & i
Cells(j, 2).Interior.Color = RGB(255, i, 0)
Cells(j, 2).Value = "255, " & i & ", 0"
Next i
Range("A1").Select
End Sub
Dim [変数名] As [変数の型]
形式で、以降で使用する変数を宣言します。
Integer は整数の型で、整数値が大きくなる場合は Long を指定します。
j = 0
j = j + 1
は代入式で、左辺に 「右辺の結果」を代入します。
左辺に、「右辺の結果」をセットするの方が解りやすいでしょうか?
変数 j に 0 をセットする
変数 j を +1(インクリメント)する
繰り返し処理を行うための「For 〜 Next ループ」制御構造文
For [変数名] = [初期値] To [終了値] Step [増減値]
…
Next [変数名]
変数 i を利用して、0 〜 255 まで( 0, 5, 10, … 255 まで) +5単位で繰り返し処理を行ないます。
j は行番号で毎回+1し、 列番号は 1 (A列)か 2 (B列)固定で、RGB関数の引数(3パラメータ中の一つ)を i にて可変処理しています。
Cells( j , 1 ).Value プロパティを利用して、A列のセルに文字列をセットしています。
.Value は省略してもこの場合動作は変わりませんが、省略しないほうが良いでしょう。
Visual Basic では文字列合成において数値が混ざっても柔軟に処理されるので問題ありませんが、(回避する方法として)"255, 0, " & i ではなく "255, 0, " & CStr(i) の方が良いかもしれません。
CStr 関数は、文字列化を行うための関数です。
また、"255, 0, " といった一時的な定数表記を 文字列リテラル と呼びます。
一気に説明しましたが、難しかったでしょうか?
最初は、「習うより慣れろ」って感じで学習すれば良いかと思います。
お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBAコード 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。
「広告」
最後まで読んでいただき、ありがとうございます。
ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル
「広告」
コメント