セルのクリア – ExcelVBAの散策とruby

2016/03/26

参考サイト:  Excel VBA 入門講座 セルのクリア


《目次》


1. 概要

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

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

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

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

 アウトラインは、セル範囲のグループ化に関連するものですが、小さなサンプルでは扱いにくいのでここでは取り上げません。

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

目次に戻る


2. マクロを登録するスクリプト

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

 マクロへのショートカットキーの割り当ては、

 WriteDataの方が Control + m

 TestClearの方は Control + j に割り当てます。

 Book1.xlsを生成する時に WriteData を呼び出しているので、ExcelでBook1.xlsを開けば、既にデータが書き込まれた状態になっています。

    

 1# encoding: Windows-31J
 2require "./exlap"
 3
 4macro_str = <<'EOS'
 5Sub TestClear()
 6    Range("A1:C1").ClearContents
 7    Range("D1").Value = "ClearContents"
 8    Range("A2:C2").ClearFormats
 9    Range("D2").Value = "ClearFormats"
10    Range("A3").ClearComments
11    Range("D3").Value = "ClearComments"
12    Range("A4:C4").Clear
13    Range("D4").Value = "Clear"
14End Sub
15
16Sub WriteData()
17    ActiveSheet.UsedRange.Clear
18    With Range("A1:C1")
19        .Value = Array(189, 365, "=SUM(A1:B1)")
20        .Interior.ColorIndex = 15
21    End With
22    With Range("C1")
23        .AddComment "合計欄"
24        .Comment.Visible = True
25    End With
26    With Range("A2:C2")
27        .Value = Array(4, 5, 6)
28        .NumberFormatLocal = "000"
29        .Font.Size = 20
30        .Font.ColorIndex = 5
31    End With
32    With Range("A3")
33        .Value = "=TODAY()"
34        .NumberFormatLocal = "m月d日"
35        .AddComment "今日の日付"
36        .Comment.Visible = True
37    End With
38    With Range("A4:C4")
39        .Value = Array(7, 8, 9)
40        .Font.ColorIndex = 3
41        .Interior.ColorIndex = 15
42    End With
43End Sub
44EOS
45
46macro_name1 = "TestClear"
47macro_name2 = "WriteData"
48File.delete("Book1.xls")  if test(?e, "Book1.xls")  # 既存のBook1.xlsを削除
49Exlap.new("Book1.xls") do |wb|
50  wb.macro_add(macro_str)
51  wb.Application.MacroOptions("Macro"=>macro_name1, "ShortcutKey"=>"j")
52  wb.Application.MacroOptions("Macro"=>macro_name2, "ShortcutKey"=>"m")
53  wb.macro_run("WriteData")
54  wb.save
55end

 ほんとは書式やコメントについて解説すべきところですが、別の機会にしたいと思います。

 ここは Clear関連メソッドの効果を見ていただくということで。

目次に戻る


3. win32oleのスクリプト(定義済み定数の読み込み方法を含む)

 前述のマクロと同じ処理を行うwin32oleのスクリプトを掲げます。

 同じといっても全自動一括処理なので、まずは A1:C4 に書式やコメントの付いたデータを書き込み、それをA7:C10の領域にコピーします。

 その上で、A7:C10の各々の行にClear関連メソッドを適用します。

 1# encoding: Windows-31J
 2require "win32ole"
 3
 4def fullpath(filename)
 5    fso = WIN32OLE.new("Scripting.FileSystemObject")
 6    return fso.GetAbsolutePathName(filename)
 7end
 8
 9File.delete("Book1.xls")  if test(?e, "Book1.xls")  # 既存のBook1.xlsを削除
10app = WIN32OLE.new("Excel.Application")
11wb = app.Workbooks.Add()
12ws = wb.Worksheets("Sheet1")
13
14rng = ws.Range("A1:C1")
15    rng.Value = 189, 365, "=SUM(A1:B1)"
16    rng.Interior.ColorIndex = 15
17cell = ws.Range("C1")
18    cell.AddComment "合計欄"
19    cell.Comment.Visible = true
20rng = ws.Range("A2:C2")
21    rng.Value = 4, 5, 6
22    rng.NumberFormatLocal = "000"
23    rng.Font.Size = 20
24    rng.Font.ColorIndex = 5
25cell = ws.Range("A3")
26    cell.Value = "=TODAY()"
27    cell.NumberFormatLocal = "m月d日"
28    cell.AddComment "今日の日付"
29    cell.Comment.Visible = true
30rng = ws.Range("A4:C4")
31    rng.Value = 7, 8, 9
32    rng.Font.ColorIndex = 3
33    rng.Interior.ColorIndex = 15
34
35ws.Range("A1:C4").Copy("destination"=>ws.Range("A7"))
36ws.Range("A7:C7").ClearContents
37    ws.Range("D7").Value = "ClearContents"
38ws.Range("A8:C8").ClearFormats
39    ws.Range("D8").Value = "ClearFormats"
40ws.Range("A9").ClearComments
41    ws.Range("D9").Value = "ClearComments"
42ws.Range("A10:C10").Clear
43    ws.Range("D10").Value = "Clear"
44
45wb.SaveAs(fullpath("Book1"), -4143)
46app.Quit

 セルへの書き込みとClear関連メソッドの実行については、特に補足する必要はないと思います。

 ws.Range("A1:C4").Copy("destination"=>ws.Range("A7")) は、セル範囲をコピーするものです。データ本体だけでなく、書式やコメントも付いた状態でコピーされます。

目次に戻る


4. exlapのスクリプト

 同じ処理を行うexlapのスクリプトを掲げます。

 スクリプトの基本部分は、win32oleのスクリプトと同じです。

 1# encoding: Windows-31J
 2require "./exlap"
 3
 4File.delete("Book1.xls")  if test(?e, "Book1.xls")  # 既存のBook1.xlsを削除
 5Exlap.new("Book1.xls") do |wb|
 6  ws = wb.ss("Sheet1")
 7  rng = ws.Range("A1:C1")
 8      rng.Value = 189, 365, "=SUM(A1:B1)"
 9      rng.Interior.ColorIndex = 15
10  cell = ws.Range("C1")
11      cell.AddComment "合計欄"
12      cell.Comment.Visible = true
13  rng = ws.Range("A2:C2")
14      rng.Value = 4, 5, 6
15      rng.NumberFormatLocal = "000"
16      rng.Font.Size = 20
17      rng.Font.ColorIndex = 5
18  cell = ws.Range("A3")
19      cell.Value = "=TODAY()"
20      cell.NumberFormatLocal = "m月d日"
21      cell.AddComment "今日の日付"
22      cell.Comment.Visible = true
23  rng = ws.Range("A4:C4")
24      rng.Value = 7, 8, 9
25      rng.Font.ColorIndex = 3
26      rng.Interior.ColorIndex = 15
27
28  ws.Range("A1:C4").Copy("destination"=>ws.Range("A7"))
29  ws.Range("A7:C7").ClearContents
30      ws.Range("D7").Value = "ClearContents"
31  ws.Range("A8:C8").ClearFormats
32      ws.Range("D8").Value = "ClearFormats"
33  ws.Range("A9").ClearComments
34      ws.Range("D9").Value = "ClearComments"
35  ws.Range("A10:C10").Clear
36      ws.Range("D10").Value = "Clear"
37    wb.save
38end

前のページ:セルの削除

次のページ:セルの挿入

「ExcelVBAの散策とruby」トップページ