業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、セルの条件付き書式だけを貼り付けるPasteSpecialメソッドや、選択したセルを表すActiveCell、セルが点滅するCutCopyModeプロパティなどの使い方を解説。
1つのセルに設定した書式(条件付き書式)だけを、他のセルにも適用したい場合がある。そういったときは、「設定しておいた書式をコピーして適用させるマクロ」を書いておくと便利だ。一度マクロを作成しておけば、複数のセルに対して、その都度Excelメニューの[セルの書式設定]を使用しなくて済み、作業の効率化を図れるだろう。
データを視覚的に分かりやすく表示して、迅速かつ正確な判断を可能にするためにも、VBA/マクロで実現できる、このようなTipsを知っておこう。
図1のように、各月の売上金額の入力されたセルと「セルの書式コピー(月日)」と「セルの書式コピー(金額)」の2つのボタンが配置されていたとしよう。
「B2」のセルには、[セルの書式設定]から[表示形式]→「日付」を選択して、書式を設定している。また、「B3」のセルには、[表示形式]→「通貨」を選択して、[記号]と[表示形式]で書式を設定している(図1)。
Excelメニューからの[セルの書式設定]方法は図2のようになる。
今回は、この「B2」に設定されている書式をコピーして、「C2」から「D2」に貼り付けてみよう。同様に、「B3」に設定されている書式をコピーして「C3」から「D3」に貼り付けてみたい。
この例では、コピーする書式は「日付」と「通貨」になっているので、図1のように、「月日」と「金額」の書式をコピーするボタンをそれぞれ用意しておく。
セルの書式のみをコピーするには、PasteSpecialメソッドを使う。
{オブジェクト}.PasteSpecial Paste:={表1の値}
{オブジェクト}には対象範囲となるRangeオブジェクトまたはActiveCellオブジェクトを指定する。{表1の値}には、次の表1の値を指定する。今回のTipsでは、「書式をコピー」の「xlPasteFormats」を使用している。
値 | 説明 |
---|---|
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
3行目ではCopyメソッドで書式が設定されている「B2」のセルをコピーし、4行目のPasteSpecialメソッドで「B2」の“書式だけ”を貼り付けている。
今回は貼り付け先の指定にActiveCellオブジェクトを使用している。こうすることで、選択したセル(ここでは「C2」から「D2」)にだけメソッドの実行結果が適用されるようになる。
例えば、「Range(C2:D2)」オブジェクトにPasteSpecialメソッドを指定すると、この範囲に一気に書式が適用されるが、選択したセルにだけ書式を適用させたい場合は、ActiveCellを使うと便利だ。カーソルを該当するセルに置き、「セルの書式コピー(月日)」ボタンをクリックする。すると、そのセルにだけ書式が適用される。
最後は5行目。「切り取りモード」または「コピーモード」を指定する「CutCopyMode」プロパティにFalseを指定して不可としている。
Copyメソッドで、あるセル(ここでは例として「B3」)を選択した場合は、通常は図3のように、セルが点滅したような状態になる。
セルが点滅した状態では、何度でもそのセルの内容を別のセルに貼り付けることができる。しかし、今回のサンプルでは、マクロを実行する自製のボタンをクリックすることで貼り付けさせているため、セルの点滅は不要だ。
この点滅状態を解除するために、CutCopyModeプロパティに「False」を指定している。
このマクロを「セルの書式コピー(月日)」ボタンに関連付け、「C2」から「D2」を選択して実行すると図4のように表示される。
「通貨」の書式を適用するコードはリスト2のようになる。
Sub 通貨書式のコピー() Range("B3").Copy 〜リスト1と同じに付き省略〜 End Sub
リスト1と同じである。コピーするセルが「B3」である点が異なるだけだ。
※「日付」と「通貨」の適用セルを間違えると書式はうまく設定されないので注意が必要だ。
このマクロを「セルの書式コピー(金額)」ボタンに関連付け、「C3」から「D3」を選択して実行すると図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.