- ベストアンサー
エクセルVBAでコピーすると行の高さが低くなる
いつもお世話になってます。 エクセル2003のVBAで、セルの範囲を指定してコピーすると行の高さが低くなってしまいます。その他の書式は、変化せずうまくコピーできています。以下がプログラムです。 Sub copy_hyou() Worksheets("sheet1").Activate Range("A1:K24").Copy 'セルA1からK24をコピーします。 Range("A25").Select 'A25からペイストします。 ActiveSheet.Paste End Sub どう直せば、行の高さもコピーできるでしょうか? お休み中すみませんがよろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
K列以降に何もなければ、行ごとコピーする。 '---------------------------------------- Sub Test() Worksheets("Sheet1").Activate Rows("1:24").Copy Range("A25") End Sub '---------------------------------------- K列以降にも表があるのなら、コピーした後に不必要な部分を削除する。 外しましたらご容赦願います。
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 #5 の回答者です。 以下のようなものは、バージョンによってできないかもしれません。 Sub myPaste() With ActiveSheet .Rows("1:24").Copy .Range("A25").PasteSpecial (xlPasteFormats) '-4122 .Range("A1:K24").Copy .Range("A25").PasteSpecial (xlPasteValues) '-4163 .Range("A25").Select End With Application.CutCopyMode = False End Sub
お礼
何度もありがとうございます。勉強になります。ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルの基本的なことに、コピーはコピー元の値だけでなく、書式もコピーします。しかし書式の中に行高や列幅は含まれません。 現状の行高や列幅はそのままにして、値や書式が張り付くはずです。 列幅だけは、形式を選択して張り付けがありますので、別途VBAなどで実行する手があると思います。 列幅も移すのは Sub macro2() Columns("A:E").Select Application.CutCopyMode = False Selection.Copy Columns("I:I").Select ActiveSheet.Paste Range("K5").Select End Sub 行高も移すのは Sub Macro4() Rows("2:13").Select Selection.Copy Range("A17").Select ActiveSheet.Paste Range("B33").Select End Sub のようなのをやります。 ただ コピー先の列や行がコピー元とダブっているとうまくいかない。 これらのことは操作のほうをやってみて、うまくいくか考えてください。 うまくいく操作は、マクロの記録が取れます。 ーー 凝ったことをやるなら、張り付け前に全ての列幅・行高の数値を 読み取り、張り付け後それらに設定しなおす手はあろうが、大げさ です(#3のご回答はこれか?)。
お礼
難しそうですが、1行づつ理解していきたいと思います。ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 別に、高さが低くなっているわけではありません。 その方法では、行の高さがコピーされないからです。 Sub copy_hyou2() Dim r As Range Dim i As Long With Worksheets("Sheet1") Set r = .Range("A1:K24") r.Copy .Range("A25") For i = 1 To r.Rows.Count .Range("A25").Offset(i - 1).RowHeight = r.Cells(i, 1).RowHeight Next i End With Set r = Nothing End Sub
お礼
offsetを使うのですね。フムフム。精進していきます。ありがとうございました。
- choro_jan
- ベストアンサー率25% (1/4)
こんにちわ こんな事ではダメでしょうか? Rows("25:50").AutoFit わたしは良く使う手ですけど・・・ 行数の指定はその都度違うでしょうから、行数を確認させてから範囲を代入すればできると思います。 違っていたらごめんなさい。
お礼
このような方法もあるのですね。また一つ勉強になりました。ありがとうございました。
- misatoanna
- ベストアンサー率58% (528/896)
むりやりですが Sub copy_hyou() Dim R, RH(), i Worksheets("sheet1").Activate Range("A1:K24").Select ReDim RH(Selection.Rows.Count) For Each R In Selection.Rows i = i + 1 RH(i) = R.RowHeight Next Selection.Copy Range("A25").Select ActiveSheet.Paste i = 0 For Each R In Selection.Rows i = i + 1 R.RowHeight = RH(i) Next Application.CutCopyMode = False End Sub
お礼
このような方法もあるのですね。これからもっともっと精進したいと思います。
- hana-hana3
- ベストアンサー率31% (4940/15541)
>どう直せば、行の高さもコピーできるでしょうか? エクセルの仕様なので、特別な対策はありません。 必要であれば事後に高さを調整する必要があります。
お礼
そうなんですか。エクセルでは、行の高さをコピーできないんですか。 勉強になりました。
お礼
やってみたらできました。ありがとうございました。