表に適用した書式を一括で削除してみよう。書式を削除するにはClearFomatsメソッドを使用するだけだ。マクロはリスト8のようになる。
Sub 表書式のクリア()
Range("B3", Range("B3").End(xlDown).End(xlToRight)).ClearFormats
End Sub
前回の「Endプロパティで、あるセルを基準に末端まで選択」を参考に、「B3セル」の終端行(xlDown)、終端列(xlToRight)を選択し、ClearFormatsメソッドで全書式を削除する。図は省略する。
次にExcelメニューの[貼り付け]→[形式を選択して貼り付け]のマクロを記述してみよう。図11を見ると分かるように、[形式を選択して貼り付け]には「全て」「数式」「値」「書式」などといった形式で貼り付けることが可能だ。
「形式を選択して貼り付け」にはPasteSpecialメソッドを使用する。書式は下記の通りだ。
Rangeオブジェクト.PasteSpecial({Paste},{Operation},{SkipBlanks},{Transpose})
Pasteには表8の値のいずれかを指定する。Operationには表9の値のいずれかを指定する。
SkipBlanksには、空白セルを無視するかどうかをTrueとFalseで指定する。Trueの場合は、空白は無視、Falseか省略した場合は空白も貼り付けられる。
Transposeには、行列の入れ替えをTrueかFalseで指定する。Trueの場合は、行列が入れ替わって貼り付けられる。Falseか省略した場合は、行列の入れ替えは行われない。
| 定数 | 内容 |
|---|---|
| xlPasteAll | 全て(規定値) |
| xlPasteFormulas | 数式 |
| xlPasteValues | 値 |
| xlPasteFormats | 書式 |
| xlPasteComments | コメント |
| xlPasteValidation | 入力規則 |
| xlPasteAllExceptBorders | けい線を除く全て |
| xlPasteColumnWidths | 列幅 |
| xlPasteFormulasAndNumberFormats | 数式と数値の書式 |
| xlPasteValuesAndNumberFormats | 値と数式の書式 |
| 参考「XlPasteType 列挙型 (Microsoft.Office.Interop.Excel) - MSDN」 | |
| 定数 | 演算 |
|---|---|
| xlPasteSpecialOperationNone | しない(規定値) |
| xlPasteSpecialOperationAdd | 加算 |
| xlPasteSpecialOperationSubtract | 減算 |
| xlPasteSpecialOperationMultiply | 乗算 |
| xlPasteSpecialOperationDivide | 除算 |
| 参考「XlPasteSpecialOperation 列挙型 (Microsoft.Office.Interop.Excel) - MSDN」 | |
セルにデータを貼り付ける場合は、計算式も一緒に貼り付ける必要があったり、逆に値だけが欲しい場合があったりと、いろいろな条件でデータを貼り付けたい場合がある。
この「形式を選択して貼り付け」をマクロ化しておくと、いちいち手数を踏んで、メニューから操作する必要がなくなる。ボタンを配置してボタンにマクロを登録すると、ボタンクリックのみで希望したデータが貼り付けられる。大変、効率的だ。
では、図12の表を書式(xlPasteFormats)のみを指定して、E3のセルにコピーしてみよう。C8のセルにはSum関数の計算式が入っている。
マクロはリスト9のようになる。B3〜C8のセルの内容をコピーし、E3のセルに書式だけを貼り付けている。
Option Explicit
Sub 書式の貼り付け()
Range("B3:C8").Copy
Range("E3").PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End Sub
「Application.CutCopyMode = False」でコピーモードをオフにしている。この記述はなくてもいいが、書いていない場合は、B3〜C8のセルの範囲が点線で点滅したままの状態になる。この点滅を解除するために、この一文を追加している。
結果は図13のようになります。
次は、けい線なし(xlLineStyleNone(表6))で、値(xlPasteValues(表8))と書式(xlPasteFormats(表8))だけをコピーしてみよう。
リスト10のように記述する。
Sub けい線なしの貼り付け()
Range("B3:C8").Copy
Range("E3").PasteSpecial xlPasteFormats
Range("E3").PasteSpecial xlPasteValues
Range("E3:F8").Borders.LineStyle = xlLineStyleNone
Application.CutCopyMode = False
End Sub
実行すると図14のようにけい線なしでコピーされる。
以上で、「セルの操作」についての解説は一応終了する。まだまだ紹介したいことがあるが、またの機会にでも紹介できればと思う。
次回は、プログミングの「条件分岐」「繰り返し処理」などについて解説する予定だ。具体的にイメージしづらい話かもしれないが、次々回解説するデータ操作やグラフなど、Excelの肝といえる部分を扱う上で欠かせないノウハウなので、頑張って着いて来てほしい。
【2016/8/4】Windows 10、Excel 2016に対応しました。
PROJECT KySS 薬師寺 国安(やくしじ くにやす)
1950年生まれ。フリーVBプログラマ。高級婦人服メーカーの事務職に在職中、趣味でVBやActiveXに取り組み、記事を執筆。2003年よりフリー。.NETやRIAに関する執筆多数。Windowsストアアプリも多数公開中(約270本)。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
PROJECT KySSは、1997年に薬師寺聖と結成したコラボレーション・ユニット
ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する
どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとはCopyright © ITmedia, Inc. All Rights Reserved.