『シートのコピー』(じいかっぱ)
Sub Macro1()
Sheets("Sheet1").Select Range("A1:J54").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False End Sub
1行目から205行目(データはA1:G205の範囲に入力)までのSheet1で38行から204行までを非表示にした後、
このSheet1からSheet2へ対象の全てのセルのデータを値の形式にしつつ、
書式(列幅、行高、罫線)を変えずにコピー貼り付けをするマクロを考えています。
マクロの記録などを活用して、上記のようなマクロなどを組んで、実行してみましたが・・・
希望通りの結果は得られませんでした。
どなたか、希望する結果が得られるマクロをご教授くださいませんでしょうか。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
> 希望通りの結果は得られませんでした。 希望とおりにならない部分を列挙して説明してもらうと されたいことがさらに明確になり、回答がつきやすいと思います。 (xyz) 2024/07/18(木) 18:03:12
載せたマクロ記述に間違いがありました。
Range("A1:J54").Select→Range("A1:G54").Select J54ではなくG54でした。
Sheets("Sheet2").Selectの後のRange("A1").Selectが抜けていました。
正しくは以下の通りです。
Sub Macro1()
Sheets("Sheet1").Select Range("A1:G54").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False End Sub
実行した結果
期待通りではなかったことは
?@非表示にされているにもかかわらず再表示された形で54行までが貼付される。
?A列幅がシート1とは違ってしまっている。(全て同じ幅に)つまり、列幅が反映されていない。
期待通りであったことは
?@罫線が正しく反映されている。
?Aセルのデータが全て値で表示されている。
ご教授お願いいたします。
(じいかっぱ) 2024/07/18(木) 20:47:46
期待通りではなかったこと
A)非表示にされているにもかかわらず再表示された形で54行までが貼付される。
B)列幅がシート1とは違ってしまっている。(全て同じ幅に)つまり、列幅が反映されていない。
期待通りであったことは
A)罫線が正しく反映されている。
B)セルのデータが全て値で表示されている。
です。
(じいかっぱ) 2024/07/18(木) 21:00:32
## あれ、コメントなかったですか。
拝見しました。 マジックナンバーだらけで恐縮ですが、試して貰えますか?
Sub test2() Dim k As Long With Worksheets("Sheet2") Worksheets("Sheet1").Rows("1:54").Copy .[A1] .[A1:G54].Value = .[A1:G54].Value For k = 1 To 7 .Columns(k).ColumnWidth = Worksheets("Sheet1").Columns(k).ColumnWidth Next End With End Sub
(xyz) 2024/07/18(木) 23:50:56
いただきましたコメントのマクロを試したところ・・・
列幅はきちんと反映されるようになりました。
しかし、途中行までしか貼付されませんでした。
そこで、Rows("1:54")をRows("1:205")に、2カ所ある[A1:G54].Valueを[A1:G205].Valueにしたところ・・・
期待通りの結果を得ることができました。
(じいかっぱ) 2024/07/19(金) 05:23:46
| しかし、途中行までしか貼付されませんでした。 ⇒ コードも、説明も、Range("A1:G54")がコピー対象のセル範囲と書いていたのでは?(なんだか適当ですな。) 「途中まで」というのは、38行目以降は値はあっても、非表示になっているだけじゃないんですか? 仕様どおりになっているはずですけどね。
まあ、できたということならそれで結構でしょう。
【追記1】 With Worksheets("Sheet2") Worksheets("Sheet1").Columns("A:G").Copy .[A1] Worksheets("Sheet1").Rows("1:54").Copy .[A1] .[A1:G54].Value = .[A1:G54].Value .Rows("55:205").Delete End With とすれば、各列の幅を調整する必要はないですね。列コピーに伴って自動で調整されますから。 【追記2】 シートを丸ごとコピーをすれば、行高も列幅も保存されるので、 その後に、不要な箇所を削除するという方法もあるでしょう。 今後のために頭の片隅に置いておいてください。
私は以上で "完" としますww。
(xyz) 2024/07/19(金) 06:24:18
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.