セルのクリア

カテゴリー名: [ExcelVBAとOLE 基本概念とセル操作

2016/08/13

今回は、セルの消去(Clear)がテーマです。

付随して、文字の大きさや色の設定、セルの背景色の指定、コメント付加の例がサンプルに出てきます。

△ 関連の Program Page


《このページの目次》


    

1. 概要

 セルをクリアするには Clear関連メソッドを使います。

 Clear関連メソッドには次のものがあります。

 書式にはいろいろなものがあります。たとえば、数値の表示形式(小数点以下何桁まで表示するかとか、001のようなゼロを前置するかなど)、フォントの種類や大きさ・色、セルの背景色等々。

 コメントは、たとえば、「この欄には年齢を入力して下さい」のような説明書きのことです。セルに付加することができます。

 単2 Clear とすれば、データ本体、書式、コメントのすべてがクリアされます。

    

 このほか、ハイパーリンクを消去する ClearHyperlinks、
アウトラインを消去する ClearOutline というのもありますが、今回は触れません。

 なお、ClearNotes は、ClearComments と同じようにコメントを消去するメソッドのようです。

目次に戻る


    

2. マクロ

 マクロとして、書式やコメントの付いた書き込みをするマクロ PutData と、それらをクリアするマクロ TestClear の二つを登録します。

 SetExcelMacro.vbsでマクロを組み込んだ場合、次のようにショートカットキーが割り当てられます。

 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
-------- ここまで

    

 NumberFormatLocal というプロパティは、書式を定めるものです。数値、日付と時刻などの書式を設定します。いろんなパターンがあり簡単には説明できないので、ここでは省略します。

目次に戻る


    

3. OLEを利用するVBScript

 全自動一括処理では、Clear関連メソッドを適用した結果だけを示しても分かりにくいと思います。

 そこで、A1:D4 の領域にはClear関連メソッドを適用した結果を表示し、
合わせて、その下の A6:C9 の領域にClearを適用する前の状態を表示することにします。

 ということで、PutDataでA1:C4の領域に書き込みを行った後、その領域をA6:C9にコピーします。これは、マクロの方にはない処理です。

 プログラムは下のとおり。

    

△ vovXL06.vbs

 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の使い方については、当シリーズの後の方で述べます。

    

4. ColorIndexの値について

 文字色や背景色を簡単に設定するのに 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 共通です。

〜 以上 〜