ユーザーがシートにコピペをして書式情報がおかしくなる
エクセルはユーザーが自由に色々と出来てしまう事がメリットであり、デメリットです。
ワークシート内の書式情報をコピペで崩されてしまう経験はないでしょうか。
(例)
・エクセル初心者が書式情報を壊して、表示がおかしくなった!と問い合わせが来た。
→値で貼り付けしてねの回答でOK(この時間も無駄・・・)
・エクセルを少し知っている人や、書式情報が壊れても何も思わない人は問い合わせすらない。
→成果物提出時に書式情報を修正する(無駄な時間・・・)
・エクセル初心者が書式情報を壊して、表示がおかしくなった!と問い合わせが来た。
→値で貼り付けしてねの回答でOK(この時間も無駄・・・)
・エクセルを少し知っている人や、書式情報が壊れても何も思わない人は問い合わせすらない。
→成果物提出時に書式情報を修正する(無駄な時間・・・)
上記を解決するのに書式情報を再作成でもよいのですが、メンテナンスを考えると避けたいです。
その為、複数のデータを一度に更新された場合、値で貼付処理に自動変換してしまうのがスムーズです。
コピペされても強制的に値で貼付処理するサンプルコード
WorkSheet_Change(ワークシートが更新されたら)マクロを実行します。
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next '■更新されたセル数が1なら抜ける If Target.Count = 1 Then Exit Sub Application.EnableEvents = False '■処理内容(ペースト処理)を戻し、値で貼付する Application.Undo Selection.PasteSpecial xlPasteValues Application.EnableEvents = True End Sub
注意点
- Worksheet_Changeイベントのため、標準モジュールでは感知できません。
- 本コードは対象としたいWorkSheet内のシートモジュールに記述をする必要があります。
- 私が管理しているマクロでは上記で十分ですが、面倒な人がいる場合は、クリップボード内にデータがあるかどうか判断する方がよいかもしれません。
ExcelVBAマクロ「指定したキーワードをクリップボードへコピーする」をパーツ化する
関連記事
特定のセル範囲で値が変更された時に処理を実行【ExcelVBA】
特定のシートのみで、OnKeyイベントを取得したい
形式を選択して貼り付ける【PasteSpecialメソッド】
クリップボードの中身を貼り付ける【Pasteメソッド】※PasteSpecialがおすすめ
コメント