• ベストアンサー

エクセルVBAでコピーすると行の高さが低くなる

いつもお世話になってます。 エクセル2003のVBAで、セルの範囲を指定してコピーすると行の高さが低くなってしまいます。その他の書式は、変化せずうまくコピーできています。以下がプログラムです。 Sub copy_hyou() Worksheets("sheet1").Activate Range("A1:K24").Copy 'セルA1からK24をコピーします。 Range("A25").Select 'A25からペイストします。 ActiveSheet.Paste End Sub どう直せば、行の高さもコピーできるでしょうか? お休み中すみませんがよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

  K列以降に何もなければ、行ごとコピーする。 '---------------------------------------- Sub Test()   Worksheets("Sheet1").Activate   Rows("1:24").Copy Range("A25") End Sub '---------------------------------------- K列以降にも表があるのなら、コピーした後に不必要な部分を削除する。 外しましたらご容赦願います。    

goldengolds
質問者

お礼

やってみたらできました。ありがとうございました。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんばんは。 #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

goldengolds
質問者

お礼

何度もありがとうございます。勉強になります。ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

エクセルの基本的なことに、コピーはコピー元の値だけでなく、書式もコピーします。しかし書式の中に行高や列幅は含まれません。 現状の行高や列幅はそのままにして、値や書式が張り付くはずです。 列幅だけは、形式を選択して張り付けがありますので、別途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のご回答はこれか?)。

goldengolds
質問者

お礼

難しそうですが、1行づつ理解していきたいと思います。ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 別に、高さが低くなっているわけではありません。 その方法では、行の高さがコピーされないからです。 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

goldengolds
質問者

お礼

offsetを使うのですね。フムフム。精進していきます。ありがとうございました。

回答No.4

こんにちわ こんな事ではダメでしょうか? Rows("25:50").AutoFit わたしは良く使う手ですけど・・・ 行数の指定はその都度違うでしょうから、行数を確認させてから範囲を代入すればできると思います。 違っていたらごめんなさい。

goldengolds
質問者

お礼

このような方法もあるのですね。また一つ勉強になりました。ありがとうございました。

回答No.3

むりやりですが 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

goldengolds
質問者

お礼

このような方法もあるのですね。これからもっともっと精進したいと思います。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>どう直せば、行の高さもコピーできるでしょうか? エクセルの仕様なので、特別な対策はありません。 必要であれば事後に高さを調整する必要があります。

goldengolds
質問者

お礼

そうなんですか。エクセルでは、行の高さをコピーできないんですか。 勉強になりました。

関連するQ&A