カテゴリー名: [ExcelVBAとOLE 基本概念とセル操作]
今回は、セルの消去(Clear)がテーマです。
付随して、文字の大きさや色の設定、セルの背景色の指定、コメント付加の例がサンプルに出てきます。
セルをクリアするには Clear関連メソッドを使います。
Clear関連メソッドには次のものがあります。
書式にはいろいろなものがあります。たとえば、数値の表示形式(小数点以下何桁まで表示するかとか、001のようなゼロを前置するかなど)、フォントの種類や大きさ・色、セルの背景色等々。
コメントは、たとえば、「この欄には年齢を入力して下さい」のような説明書きのことです。セルに付加することができます。
単2 Clear とすれば、データ本体、書式、コメントのすべてがクリアされます。
このほか、ハイパーリンクを消去する ClearHyperlinks、
アウトラインを消去する ClearOutline というのもありますが、今回は触れません。
なお、ClearNotes は、ClearComments と同じようにコメントを消去するメソッドのようです。
マクロとして、書式やコメントの付いた書き込みをするマクロ PutData と、それらをクリアするマクロ TestClear の二つを登録します。
SetExcelMacro.vbsでマクロを組み込んだ場合、次のようにショートカットキーが割り当てられます。
Control + m
Control + j
Book1.xlsを生成する時に PutData を実行した上で保存しているので、ExcelでBook1.xlsを開けば、既にデータが書き込まれた状態になっています。
その状態で Control + j
を入力すると、各々の行に対してClear関連メソッドが適用されます。
Control + m
を入力すれば、PutDataが実行されて再びClearが適用される前のデータが表示されます。
4行の各行にどんな書き込みが行われ、どのClear関連メソッドが適用されるかを記します。
マクロを掲げると下のとおり。
-------- ここから
Sub PutData()
ActiveSheet.UsedRange.Clear
With Range("A1:C1")
.Value = Array(189, 365, "=SUM(A1:B1)")
.Interior.ColorIndex = 15
End With
With Range("C1")
.AddComment "合計欄"
.Comment.Visible = True
End With
With Range("A2:C2")
.Value = Array(4, 5, 6)
.NumberFormatLocal = "000"
.Font.Size = 20
.Font.ColorIndex = 5
End With
With Range("A3")
.Value = "=TODAY()"
.NumberFormatLocal = "m月d日"
.AddComment "今日の日付"
.Comment.Visible = True
End With
With Range("A4:C4")
.Value = Array(7, 8, 9)
.Font.ColorIndex = 3
.Interior.ColorIndex = 15
End With
End Sub
Sub TestClear()
Range("A1:C1").ClearContents
Range("D1").Value = "ClearContents"
Range("A2:C2").ClearFormats
Range("D2").Value = "ClearFormats"
Range("A3").ClearComments
Range("D3").Value = "ClearComments"
Range("A4:C4").Clear
Range("D4").Value = "Clear"
End Sub
-------- ここまで
ActiveSheet.UsedRange.Clear
の UsedRange は、既に書き込みが行われている領域全体を指します。それをClearすれば、すなわちシート全体をClearすることになります。Range("A1").Font.Size = 20
のように指定します。Range("A1").Font.ColorIndex = 5
のように設定します。Range("A1").Interior.ColorIndex = 15
のように指定します。Range("A1").AddComment "合計欄"
のようにして行います。Range("A1").Comment.Visible = True
のようにします。NumberFormatLocal というプロパティは、書式を定めるものです。数値、日付と時刻などの書式を設定します。いろんなパターンがあり簡単には説明できないので、ここでは省略します。
全自動一括処理では、Clear関連メソッドを適用した結果だけを示しても分かりにくいと思います。
そこで、A1:D4 の領域にはClear関連メソッドを適用した結果を表示し、
合わせて、その下の A6:C9 の領域にClearを適用する前の状態を表示することにします。
ということで、PutDataでA1:C4の領域に書き込みを行った後、その領域をA6:C9にコピーします。これは、マクロの方にはない処理です。
プログラムは下のとおり。
1Option Explicit 2Dim FSO, BookPath 3Dim EXLapp, WBobj, WSobj 4Const xlWorkbookNormal = -4143 5 6Set FSO = CreateObject("Scripting.FileSystemObject") 7BookPath = FSO.GetAbsolutePathName("Book1.xls") 8If (FSO.FileExists(BookPath) = True) Then FSO.DeleteFile(BookPath) 9Set EXLapp = CreateObject("Excel.Application") ' Excelの起動 10EXLapp.Visible = True ' Excelを見える状態に 11Set WBobj = EXLapp.Workbooks.Add() ' Workbookの新規作成 12Set WSobj = WBobj.ActiveSheet 13PutData WSobj 14WSobj.Range("A1:C4").Copy WSobj.Range("A6:C9") 15With WSobj 16 .Range("A1:C1").ClearContents 17 .Range("D1").Value = "ClearContents" 18 .Range("A2:C2").ClearFormats 19 .Range("D2").Value = "ClearFormats" 20 .Range("A3").ClearComments 21 .Range("D3").Value = "ClearComments" 22 .Range("A4:C4").Clear 23 .Range("D4").Value = "Clear" 24End With 25WBobj.SaveAs BookPath, xlWorkbookNormal 26EXLapp.quit 27 28Sub PutData(WSobj) 29 WSobj.UsedRange.Clear 30 With WSobj.Range("A1:C1") 31 .Value = Array(189, 365, "=SUM(A1:B1)") 32 .Interior.ColorIndex = 15 33 End With 34 With WSobj.Range("C1") 35 .AddComment "合計欄" 36 .Comment.Visible = True 37 End With 38 With WSobj.Range("A2:C2") 39 .Value = Array(4, 5, 6) 40 .NumberFormatLocal = "000" 41 .Font.Size = 20 42 .Font.ColorIndex = 5 43 End With 44 With WSobj.Range("A3") 45 .Value = "=TODAY()" 46 .NumberFormatLocal = "m月d日" 47 .AddComment "今日の日付" 48 .Comment.Visible = True 49 End With 50 With WSobj.Range("A4:C4") 51 .Value = Array(7, 8, 9) 52 .Font.ColorIndex = 3 53 .Interior.ColorIndex = 15 54 End With 55End Sub
マクロの方にない一定領域のコピーは、
WSobj.Range("A1:C4").Copy WSobj.Range("A6:C9")
として行っています。
このCopyの使い方については、当シリーズの後の方で述べます。
文字色や背景色を簡単に設定するのに ColorIndex を用います。
ColorIndexに指定する値は整数値ですが、これは、便宜的に設けられた整理番号のようなものです。初期状態では下のようになっています。
色 | 番号 | 16進数値(3色配合) |
---|---|---|
黒 | 1 | #000000 |
白 | 2 | #FFFFFF |
赤 | 3 | #FF0000 |
明るい緑 | 4 | #00FF00 |
青 | 5 | #0000FF |
黄 | 6 | #FFFF00 |
ピンク | 7 | #FF00FF |
水色 | 8 | #00FFFF |
濃い赤 | 9 | #800000 |
緑 | 10 | #008000 |
濃い青 | 11 | #000080 |
濃い黄 | 12 | #808000 |
紫 | 13 | #800080 |
青緑 | 14 | #008080 |
25%灰色 | 15 | #C0C0C0 |
50%灰色 | 16 | #808080 |
グレー | 17 | #9999FF |
プラム | 18 | #993366 |
アイボリー | 19 | #FFFFCC |
薄い水色 | 20 | #CCFFFF |
濃い紫 | 21 | #660066 |
コーラル | 22 | #FF8080 |
オーシャンブルー | 23 | #0066CC |
アイスブルー | 24 | #CCCCFF |
濃い青 | 25 | #000080 |
ピンク | 26 | #FF00FF |
黄 | 27 | #FFFF00 |
水色 | 28 | #0000FF |
紫 | 29 | #800080 |
濃い赤 | 30 | #800000 |
青緑 | 31 | #008080 |
青 | 32 | #0000FF |
スカイブルー | 33 | #00CCFF |
薄い水色 | 34 | #CCFFFF |
薄い緑 | 35 | #CCFFCC |
薄い黄 | 36 | #FFFF99 |
ペールブルー | 37 | #99CCFF |
ローズ | 38 | #FF99CC |
ラベンダー | 39 | #CC99FF |
ベージュ | 40 | #FFCC99 |
薄い青 | 41 | #3366FF |
アクア | 42 | #33CCCC |
ライム | 43 | #99CC00 |
ゴールド | 44 | #FFCC00 |
薄いオレンジ | 45 | #FF9900 |
オレンジ | 46 | #FF6600 |
ブルーグレー | 47 | #666699 |
40%灰色 | 48 | #969696 |
濃い青緑 | 49 | #003366 |
シークグリーン | 50 | #339966 |
濃い緑 | 51 | #003300 |
オリーブ | 52 | #333300 |
茶 | 53 | #993300 |
プラム | 54 | #993366 |
インディゴ | 55 | #333399 |
80%灰色 | 56 | #333333 |
参考サイト: 【VBA】色番号一覧 - だめだま
上の表の「番号」は、簡易的に割り当てられている整理番号です。
たとえば、青にするには ColorIndex に5をセットします。
どの番号にどの色を割り当てるかは、ユーザーが再設定できるようです。あまり再設定する必要性はないように思いますが……
「16進数値」は、赤・緑・青(R, G, B)の三つの色の成分の値を示すもののようです。三つの配合によって色が決まるのだと思います。それぞれが2桁の16進数で表現されています。
16進数値をセットするときは ColorIndex でなく Color を用います。
VBA, VBScript のどちらにおいても、16進数値は &H
を前置して表現します。
.Font.Color = &H0000FF
のように書きます。VBA, VBScript 共通です。
〜 以上 〜