『シートのコピーについて』(ファッション)
シートのコピーで色が変化します。
旧の(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 >
>旧の(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
勝手にルール作るなよ。
(何様) 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
確かに、白で塗りつぶしたら枠線が消えちゃいますね。
■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.