Excelで条件付き書式だけを選択した複数セルにコピーするにはVBA/マクロ便利Tips

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、セルの条件付き書式だけを貼り付けるPasteSpecialメソッドや、選択したセルを表すActiveCell、セルが点滅するCutCopyModeプロパティなどの使い方を解説。

» 2014年07月25日 18時00分 公開
[薬師寺国安PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprise(64ビット)+Excel 2013


 1つのセルに設定した書式(条件付き書式)だけを、他のセルにも適用したい場合がある。そういったときは、「設定しておいた書式をコピーして適用させるマクロ」を書いておくと便利だ。一度マクロを作成しておけば、複数のセルに対して、その都度Excelメニューの[セルの書式設定]を使用しなくて済み、作業の効率化を図れるだろう。

 データを視覚的に分かりやすく表示して、迅速かつ正確な判断を可能にするためにも、VBA/マクロで実現できる、このようなTipsを知っておこう。

セルの条件付き書式だけを貼り付けるPasteSpecialメソッド

 図1のように、各月の売上金額の入力されたセルと「セルの書式コピー(月日)」と「セルの書式コピー(金額)」の2つのボタンが配置されていたとしよう。

 「B2」のセルには、[セルの書式設定]から[表示形式]→「日付」を選択して、書式を設定している。また、「B3」のセルには、[表示形式]→「通貨」を選択して、[記号]と[表示形式]で書式を設定している(図1)。

図1 各月の売上金額の入力されたセルがある

 Excelメニューからの[セルの書式設定]方法は図2のようになる。

図2 [セルの書式設定]から「日付」と「金額」の書式を設定した

 今回は、この「B2」に設定されている書式をコピーして、「C2」から「D2」に貼り付けてみよう。同様に、「B3」に設定されている書式をコピーして「C3」から「D3」に貼り付けてみたい。

 この例では、コピーする書式は「日付」と「通貨」になっているので、図1のように、「月日」と「金額」の書式をコピーするボタンをそれぞれ用意しておく。

 セルの書式のみをコピーするには、PasteSpecialメソッドを使う。

PasteSpecialメソッドの書式(使い方)

{オブジェクト}.PasteSpecial Paste:={表1の値}


 {オブジェクト}には対象範囲となるRangeオブジェクトまたはActiveCellオブジェクトを指定する。{表1の値}には、次の表1の値を指定する。今回のTipsでは、「書式をコピー」の「xlPasteFormats」を使用している。

表1 Pasteに指定する主な値
説明
xlPasteAll 全てのオブジェクトを貼り付ける
xlPasteAllExceptBorders けい線を除く全てのオブジェクトを貼り付ける
xlPasteColumnWidths コピー元のセルの列幅を貼り付け先に適用
xlPasteComments コメントの貼り付け
xlPasteFormats 書式を貼り付け
xlPasteFormulas 数式を貼り付け
xlPasteFormulasAndNumberFormats 数式と数値書式を貼り付け
xlPasteValidation コピー元のセルの入力規則を貼り付け先に適用
xlPasteValues 値のみの貼り付け
xlPasteValuesAndNumberFormats 数値書式のみの貼り付け
参考「XlPasteType 列挙型 (Microsoft.Office.Interop.Excel) - MSDN

日付書式のコピー

 ボタンをクリックして日付書式をコピーするコードはリスト1になる。VBE(Visual Basic Editor)を起動してModule1内にリスト1のコードを記述する。

Option Explicit
Sub 日付書式のコピー()
  Range("B2").Copy
  ActiveCell.PasteSpecial Paste:=xlPasteFormats
  Application.CutCopyMode = False
End Sub
リスト1 書式(日付)をコピーするコード

 3行目ではCopyメソッドで書式が設定されている「B2」のセルをコピーし、4行目のPasteSpecialメソッドで「B2」の“書式だけ”を貼り付けている。

ActiveCellオブジェクトとは

 今回は貼り付け先の指定にActiveCellオブジェクトを使用している。こうすることで、選択したセル(ここでは「C2」から「D2」)にだけメソッドの実行結果が適用されるようになる。

 例えば、「Range(C2:D2)」オブジェクトにPasteSpecialメソッドを指定すると、この範囲に一気に書式が適用されるが、選択したセルにだけ書式を適用させたい場合は、ActiveCellを使うと便利だ。カーソルを該当するセルに置き、「セルの書式コピー(月日)」ボタンをクリックする。すると、そのセルにだけ書式が適用される。

セルが点滅するCutCopyModeプロパティとは

 最後は5行目。「切り取りモード」または「コピーモード」を指定する「CutCopyMode」プロパティにFalseを指定して不可としている。

 Copyメソッドで、あるセル(ここでは例として「B3」)を選択した場合は、通常は図3のように、セルが点滅したような状態になる。

図3 コピーしたセル(B3)が点滅したような状態になる

 セルが点滅した状態では、何度でもそのセルの内容を別のセルに貼り付けることができる。しかし、今回のサンプルでは、マクロを実行する自製のボタンをクリックすることで貼り付けさせているため、セルの点滅は不要だ。

 この点滅状態を解除するために、CutCopyModeプロパティに「False」を指定している。

実行結果

 このマクロを「セルの書式コピー(月日)」ボタンに関連付け、「C2」から「D2」を選択して実行すると図4のように表示される。

図4 「日付」の書式が適用された

通貨書式のコピー

 「通貨」の書式を適用するコードはリスト2のようになる。

Sub 通貨書式のコピー()
  Range("B3").Copy
〜リスト1と同じに付き省略〜
End Sub
リスト2 「通貨」の書式を適用するコード

 リスト1と同じである。コピーするセルが「B3」である点が異なるだけだ。

 ※「日付」と「通貨」の適用セルを間違えると書式はうまく設定されないので注意が必要だ。

 このマクロを「セルの書式コピー(金額)」ボタンに関連付け、「C3」から「D3」を選択して実行すると図5のように表示される。

図5 「通貨」の書式が適用された

著者プロフィール

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

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)。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。