[[20250905112415]] 『シートのコピーについて』(ファッション) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『シートのコピーについて』(ファッション)

シートのコピーで色が変化します。
旧の(xls)ファイルから
新の(xlsx)ファイルにシートをコピーすると
セルの塗りつぶしの色が変わってしまいました。
同じ色でシートをコピーする方法はありませんか?

また、色だけをコピーするように以下のように
マクロを作成したのですが、
セルの枠線が消えてしまいます。
セルの枠線を消さずに塗りつぶしの色を変更するには
どうすればよいのでしょうか?

CommandButton1が読込で、CommandButton2が書込です。
コピー元のシートを選択してCommandButton1で
色の情報を読み込んで、コピー先のシートを選択して
CommandButton2でコピーします。
VarSheet.Copy の後でブレークポイントを入れた状態で
枠線があるのは確認しています。

 Option Explicit
 Dim varsheet As Variant
 Dim varcolor As Variant
 Private Sub CommandButton1_Click()
     Dim rng As Range
     Dim varwork As Variant
     Set varsheet = ActiveSheet
     Set rng = ActiveSheet.UsedRange
     ReDim varcolor(rng.row + rng.Rows.Count - 1, rng.Column + rng.Columns.Count - 1)
     For Each varwork In rng
         varcolor(varwork.row - 1, varwork.Column - 1) = varwork.Interior.color
     Next
 End Sub

 Private Sub CommandButton2_Click()
     Dim rng As Range
     Dim varwork As Variant
     Call varsheet.Copy(ActiveSheet)
     Set rng = ActiveSheet.Range("A1").Resize(UBound(varcolor, 1), UBound(varcolor, 2))
     For Each varwork In rng
         If IsEmpty(varcolor(varwork.row - 1, varwork.Column - 1)) = False Then
             varwork.Interior.color = varcolor(varwork.row - 1, varwork.Column - 1)
         End If
     Next
 End Sub

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


質問の前半部分は、テーマによるものでは?
以下の記事を参考にしてください
https://excel-meister.com/archives/540?amp
(unknown) 2025/09/05(金) 12:49:25

被りましたが投稿しておきます。

>旧の(xls)ファイルから新の(xlsx)ファイルにシートをコピーするとセルの塗りつぶしの色が変わってしまいました。
違ってたらごめんなさいですが、塗りつぶしの色が変わったんじゃなくて、設定されている「テーマ(の配色)」が違うからそう見えるのではないでしょうか?

なので難しく考えず、シートコピーをした後にセルを巡回して「DisplayFormatプロパティ」で元データのRGB値を取得して設定してしまうのはどうでしょうか?

Sub さんぷる()

    Dim srcSH As Worksheet
    Dim dstWB As Workbook
    Dim MyRNG As Range

    Set srcSH = Workbooks("moto.xls").Worksheets(1)
    Set dstWB = Workbooks("saki.xlsx")

    '▼シートをコピーする
    srcSH.Copy after:=dstWB.Worksheets(dstWB.Worksheets.Count)

    With dstWB.Worksheets(dstWB.Worksheets.Count)
        '▼セルを巡回して塗りつぶし色が設定されていたら元データの表示色(のRGB値)を調べて変更する
        For Each MyRNG In .UsedRange
            If Not MyRNG.Interior.ColorIndex = xlNone Then
                Debug.Print MyRNG.Address(0, 0) & " に塗りつぶし設定あり"
                Stop
                MyRNG.Interior.Color = srcSH.Range(MyRNG.Address).DisplayFormat.Interior.Color
            End If
        Next MyRNG
    End With
End Sub

 ※上記は研究用として提示していますので丸パクリして完成!というのはご遠慮ください。

(もこな2 ) 2025/09/05(金) 12:51:20


>※上記は研究用として提示していますので丸パクリして完成!というのはご遠慮ください。
>(もこな2 )

勝手にルール作るなよ。

(何様) 2025/09/05(金) 14:43:05


 ご自身の回答に関して、ご自身の考え方を書かれたもので、
 他人がどうこう言えるものではなく、その発言自体は自然なことだと思います。 
 これが全体の方針だと宣言しているなら、それはちょっと違う
 という意見があると思いますが、そうした意図があるとは思えません。

(xyz) 2025/09/05(金) 21:38:07


 枠線の消去に関するもこな2さんの指摘はよくわかりました。

 ふたつのプロパティの値を確認すると、
               白を設定したとき  色指定なしのとき
               ----------------  -----------------
 .Color      |  RGB(255,255,255)  RGB(255,255,255)
 .ColorIndex |  =2(設定に依存)    xlNone(= -4172)
 となります。

 Colorだけで判定してしまうと、色指定なしのセルも白で塗ったことになってしまい、
 結果として枠線が消えるのですね。

 ですから、
 .ColorIndex <> xlNone
 のものに限って処理をしないといけない、ということなんですね。

 --------
 前半はよくわかりませんでした。
 いや、事実としては、そういう「テーマの配色」というものが影響しているとは思いますが、
 私自身が「テーマの配色」の詳細がよくわかっていないということです。
 .Colorプロパティは色をRGBで表したもので、それは不変かと思っていましたので。

(xyz) 2025/09/05(金) 21:44:32


■1
コメントいただきましたが、枠線のところは正直意識してなかったです。
単純に、塗りつぶしを設定していないセルまで白で塗りつぶしたら冗長だなとおもって回避するようにしました。
 確かに、白で塗りつぶしたら枠線が消えちゃいますね。

■2
私も詳しくはわからないですが、経験則上「テーマの色」を使って塗りつぶしを設定した場合、テーマの配色を変えた場合追従して見た目の色が変化します。

またマクロの記録で塗りつぶしをコード化してみると、それぞれ以下を設定しているのが記録されます。

 テーマの色・・・・InteriorオブジェクトのThemeColorプロパティ
 標準の色・・・・・・InteriorオブジェクトのColorプロパティ

これらを踏まえると、ThemeColorプロパティで設定されたものは、そのとおりテーマの色なので、テーマの配色を変えると「ThemeColorプロパティ」は変わってないが見た目の色が変わってしまうということかなとおもいます。
ということは、ThemeColorプロパティで設定したものじゃなくなればいいので、Colorプロパティで設定しなおしちゃえばよいというのが私の発想です。

■3
xyzさんのコメントを拝見して、ちょっと説明が不適切だったかなとおもいました。
以下のように読み替えをお願いします。

 誤 〜〜〜塗りつぶし色が設定されていたら元データの表示色(のRGB値)を調べて変更する
 正 〜〜〜塗りつぶし色が設定されていたら、Colorプロパティに元データのColorを設定する

また、「DisplayFormat」も不要だったかもしれません。もし採用されていたら必要に応じて適宜改修してください。

■4
フォロー頂いたのでコメントしますが、著作者としての意思表明をしたものです。
(私は完成品をプレゼントするだけだと、応用が利かなくなる恐れがあって為にならないとおもっているので、そういうのはしないですが、ほかの回答者の行動制限をするつもりはありません。じゃんじゃん完成品提示してあげてください)

>トピ主へ
自分なりに理解して書いててみたら、結果としてほぼ一緒になったという場合は、丸パクリだとは思わないです。
何も考えずにただコピペして終わりというのはやめてくださいという意味です。誤解される方がおられましたので一応補足します。

■5
ここまで書いておいてですが、既にコメントがあるようにテーマの配色をもとのブックと同じものにすれば問題は解決すると思われます。
したがって可能であるなら、テーマの配色をいじるのが一番手っ取り早いと思います。

 テーマが「Office2007-2010」→「Office」になったので、"薄オレンジ"が"薄みどり"になったとかそういうことなんだろうと想像しています。
 その場合は「Office」→「Office2007-2010」に戻せばOKです。
 (ただし、コピー先のブックでテーマの色をつかっていたら、それが変わってしまうので注意)
 (↑テーマが違っても同じ位置に同じような色が配置されているものもあるので一概には言えないが・・・)

(もこな2 ) 2025/09/06(土) 02:47:08


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.