こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excelの条件付き書式のコピー

Excel2007で条件付き書式でセルの色と罫線を設定しているセルがあります。
このセルをコピーして別シートに貼りつける際に、条件付き書式に合致して設定されている書式を条件なしで、そのままコピー出来ないでしょうか。
拙い説明で分かりにくいですが、イメージとしては計算式で数値が表示されているセルがある時に、計算式がいらない場合は、セルをコピーして値の貼付を行って数値だけを持っていくのと同じような事が条件付き書式でも出来ないか、と言う事です。

投稿日時 - 2011-11-17 11:55:48

QNo.7138211

困ってます

質問者が選んだベストアンサー

マクロの場合、標準モジュールに下記コードを置きます。

'-------------------------------------------------
'標準Module
'参照設定:【Microsoft Forms 2.0 Object Library】
Option Explicit

Private Declare Function CloseClipboard Lib "user32.dll" () As Long

Private Declare Function OpenClipboard Lib "user32.dll" ( _
                    ByVal hwnd As Long) As Long

Private Declare Function GetClipboardData Lib "user32.dll" ( _
                     ByVal wFormat As Long) As Long

Private Declare Function RegisterClipboardFormatA Lib "user32.dll" ( _
                         ByVal lpszFormat As String) As Long

Private Declare Function GlobalSize Lib "kernel32.dll" ( _
                  ByVal hMem As Long) As Long

Private Declare Function GlobalLock Lib "kernel32.dll" ( _
                  ByVal hMem As Long) As Long

Private Declare Function GlobalUnlock Lib "kernel32.dll" ( _
                   ByVal hMem As Long) As Long

Private Declare Sub RtlMoveMemory Lib "kernel32.dll" ( _
                 ByVal hpvDest As Any, _
                 ByVal hpvSource As Any, _
                 ByVal cbCopy As Long)
'-------------------------------------------------
Sub try()
  Dim buf As String
  Dim mem As Long
  Dim sz As Long
  Dim lk As Long

  On Error Resume Next
  If TypeName(Selection) <> "Range" Then Exit Sub
  Selection.Copy
  OpenClipboard 0&
  mem = GetClipboardData(RegisterClipboardFormatA("HTML Format"))
  CloseClipboard
  If mem = 0 Then Exit Sub
  sz = GlobalSize(mem)
  lk = GlobalLock(mem)
  buf = String(sz + 1, vbNullChar)
  RtlMoveMemory buf, lk, sz
  GlobalUnlock mem
  buf = Left$(buf, InStr(buf, vbNullChar) - 1)
  buf = Replace$(buf, "mso-ignore:style;", "") '■2007,2010では無くてもOK
  With New DataObject
    .Clear
    .SetText buf
    .PutInClipboard
  End With
  MsgBox "書式を固定しました。"
End Sub
'-------------------------------------------------

VBEメニュー[ツール]-[参照設定]の「参照可能なライブラリファイル」に
Microsoft Forms 2.0 Object Library
をチェックして追加します。

コピーしたいセル範囲を選択して、Sub try を実行。
書式固定でコピーされます。(値、計算式も)
その後、貼り付け先を選択して[Ctrl]+[v]で貼り付けてください。



マクロが難解な為、この方法で運用したくない場合は
手作業で[Webページとして発行]機能を使います。
・目的のシートを単一ファイルWebページとして保存。
・発行したhtmファイルを開いてデータ範囲をコピー。
・目的シートに書式のみ貼り付け。

..のような感じです。

投稿日時 - 2011-11-17 13:01:12

お礼

[Webページとして発行]機能を使うなんて発想が、私には全くありませんでした。
ありがとうございました。助かりました。

投稿日時 - 2011-11-17 13:59:18

ANo.3

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

一応、Win32APIを使わない簡易版もあります。
'-----------------------------------------------------------
Option Explicit
Sub try2() '条件付き書式があるシートをActiveにして実行。
  Dim ws As Worksheet
  Dim tmp As String
  Dim buf As String
  Dim n  As Long
 
  Application.ScreenUpdating = False
  '作業用mhtファイル名を設定。 _
   同名既存ファイルがあれば上書きするので注意。
  tmp = Application.DefaultFilePath & "\temp.mht"
  Set ws = ActiveSheet
  ActiveWorkbook.PublishObjects.Add( _
      xlSourceSheet, tmp, _
      ws.Name, "", _
      xlHtmlStatic).Publish True
 
  '作業用mhtファイルOpen。
  n = FreeFile
  Open tmp For Input As #n
  buf = StrConv(InputB(LOF(n), #n), vbUnicode)
  Close #n

  '---置換作業---
  '途中改行があれば削除。
  buf = Replace$(buf, "=" & vbCrLf, "")
  'とにかく"ignore:"を消せばいいかな。
  buf = Replace$(buf, "mso-ignore:", "")
  '--------------
 
  '作業ファイル書き込み直してOpen。
  n = FreeFile
  Open tmp For Output As #n
  Print #n, buf
  Close #n
 
  Workbooks.Open tmp
  Set ws = Nothing
  Application.ScreenUpdating = True
End Sub
'-----------------------------------------------------------
[Webページとして発行]した後に開き直すだけですけど。
(2003以前のバージョンは書式固定の為に置換してます)
マクロ実行後、mhtファイルが開きますから必要なセル範囲をコピーしてください。
処理済んだらmhtファイルは手動で削除してください。
(カレントフォルダに保存されています)

投稿日時 - 2011-11-17 13:23:41

ANo.2

出来る出来ない?だけ判ればよいのでしたら。
条件付き書式の「結果として現れた書式」は,コピーすることも取り出すことも出来ません。マクロを使っても出来ません。

現実的な対処としては,コピー先でも正しい条件付き書式となるように条件付き書式の細工をよく考えて工夫し,条件付き書式ごとコピーして貼り付け先でも同じ結果が現れるように仕込んでおきます。

#まぁ,一応できるといえば
元のセルをコピー
貼り付け先でホームタブの「貼り付け▼」から図を右に開いてリンク貼り付け
といった手で見せることは可能と言えば可能です。



どんな条件付き書式を設定していて,コピーすると上手く行かないのか不明ですが,もしかすると「数式」を使わない条件付き書式にしておくことで,対応が簡単になることも考えられます。逆に条件付き書式を数式でゴリゴリ設定しないとやっぱりダメかも?知れません。
具体的にどんなことをやっているのか,アナタのお手許のエクセルで実際のデータの例と実際の条件付き書式の具体的な設定の様子を挙げて,何か工夫の余地があるか,「新しいご相談」として改めて投稿して皆さんのヘルプを仰いでみてはいかがでしょう。

投稿日時 - 2011-11-17 12:37:39

ANo.1

>条件付き書式に合致して設定されている書式を条件なしで、そのままコピー出来ないでしょうか。
 ⇒条件で成立している書式につき、条件なしでは出来ません。

投稿日時 - 2011-11-17 12:27:31

あなたにオススメの質問