2016/03/26
参考サイト: Excel VBA 入門講座 セルのクリア
セルをクリアするには Clear関連メソッドを使います。
Clear関連メソッドには次のものがあります。
書式にはいろいろなものがあります。たとえば、数値の表示形式(小数点以下何桁まで表示するかとか、001のようなゼロを前置するかなど)、フォントの種類や大きさ・色、セルの背景色等々。
コメントは、たとえば、「この欄には年齢を入力して下さい」のような説明書きのことです。セルに付加することができます。
アウトラインは、セル範囲のグループ化に関連するものですが、小さなサンプルでは扱いにくいのでここでは取り上げません。
単2 Clear とすれば、データ本体、書式、コメントのすべてがクリアされます。
マクロとして、書式やコメントの付いた書き込みをするマクロ 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関連メソッドの効果を見ていただくということで。
前述のマクロと同じ処理を行う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"))
は、セル範囲をコピーするものです。データ本体だけでなく、書式やコメントも付いた状態でコピーされます。
同じ処理を行う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