こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2007-10-07 15:40:23

QNo.3408714

すぐに回答ほしいです

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

 
K列以降に何もなければ、行ごとコピーする。

'----------------------------------------
Sub Test()
  Worksheets("Sheet1").Activate
  Rows("1:24").Copy Range("A25")
End Sub
'----------------------------------------

K列以降にも表があるのなら、コピーした後に不必要な部分を削除する。

外しましたらご容赦願います。
 
 

投稿日時 - 2007-10-07 16:39:17

お礼

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

投稿日時 - 2007-10-08 21:28:37

ANo.2

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.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

投稿日時 - 2007-10-07 22:04:44

お礼

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

投稿日時 - 2007-10-08 21:34:14

ANo.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のご回答はこれか?)。

投稿日時 - 2007-10-07 19:10:56

お礼

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

投稿日時 - 2007-10-08 21:32:04

ANo.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

投稿日時 - 2007-10-07 18:56:21

お礼

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

投稿日時 - 2007-10-08 21:33:26

ANo.4

こんにちわ

こんな事ではダメでしょうか?

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

違っていたらごめんなさい。

投稿日時 - 2007-10-07 17:03:30

お礼

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

投稿日時 - 2007-10-08 21:30:57

ANo.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

投稿日時 - 2007-10-07 16:44:12

お礼

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

投稿日時 - 2007-10-08 21:29:53

ANo.1

>どう直せば、行の高さもコピーできるでしょうか?

エクセルの仕様なので、特別な対策はありません。
必要であれば事後に高さを調整する必要があります。

投稿日時 - 2007-10-07 15:57:57

お礼

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

投稿日時 - 2007-10-08 21:27:54

あなたにオススメの質問