- ベストアンサー
Excelの条件付き書式のコピー
Excel2007で条件付き書式でセルの色と罫線を設定しているセルがあります。 このセルをコピーして別シートに貼りつける際に、条件付き書式に合致して設定されている書式を条件なしで、そのままコピー出来ないでしょうか。 拙い説明で分かりにくいですが、イメージとしては計算式で数値が表示されているセルがある時に、計算式がいらない場合は、セルをコピーして値の貼付を行って数値だけを持っていくのと同じような事が条件付き書式でも出来ないか、と言う事です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
マクロの場合、標準モジュールに下記コードを置きます。 '------------------------------------------------- '標準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ファイルを開いてデータ範囲をコピー。 ・目的シートに書式のみ貼り付け。 ..のような感じです。
その他の回答 (3)
- end-u
- ベストアンサー率79% (496/625)
一応、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ファイルは手動で削除してください。 (カレントフォルダに保存されています)
- keithin
- ベストアンサー率66% (5278/7941)
出来る出来ない?だけ判ればよいのでしたら。 条件付き書式の「結果として現れた書式」は,コピーすることも取り出すことも出来ません。マクロを使っても出来ません。 現実的な対処としては,コピー先でも正しい条件付き書式となるように条件付き書式の細工をよく考えて工夫し,条件付き書式ごとコピーして貼り付け先でも同じ結果が現れるように仕込んでおきます。 #まぁ,一応できるといえば 元のセルをコピー 貼り付け先でホームタブの「貼り付け▼」から図を右に開いてリンク貼り付け といった手で見せることは可能と言えば可能です。 どんな条件付き書式を設定していて,コピーすると上手く行かないのか不明ですが,もしかすると「数式」を使わない条件付き書式にしておくことで,対応が簡単になることも考えられます。逆に条件付き書式を数式でゴリゴリ設定しないとやっぱりダメかも?知れません。 具体的にどんなことをやっているのか,アナタのお手許のエクセルで実際のデータの例と実際の条件付き書式の具体的な設定の様子を挙げて,何か工夫の余地があるか,「新しいご相談」として改めて投稿して皆さんのヘルプを仰いでみてはいかがでしょう。
- mu2011
- ベストアンサー率38% (1910/4994)
>条件付き書式に合致して設定されている書式を条件なしで、そのままコピー出来ないでしょうか。 ⇒条件で成立している書式につき、条件なしでは出来ません。
お礼
[Webページとして発行]機能を使うなんて発想が、私には全くありませんでした。 ありがとうございました。助かりました。