[[20240718155044]] 『シートのコピー』(じいかっぱ) ページの最後に飛ぶ

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

| 全文検索 | 過去ログ ]

 

『シートのコピー』(じいかっぱ)

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

xyz様、コメントありがとうございました。

載せたマクロ記述に間違いがありました。
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


xyz様
ご教授、本当にありがとうございました。

いただきましたコメントのマクロを試したところ・・・
列幅はきちんと反映されるようになりました。
しかし、途中行までしか貼付されませんでした。

そこで、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.