プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (7件)

 


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

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

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

外しましたらご容赦願います。
 
 
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/08 21:28

こんばんは。


#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
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/10/08 21:34

エクセルの基本的なことに、コピーはコピー元の値だけでなく、書式もコピーします。

しかし書式の中に行高や列幅は含まれません。
現状の行高や列幅はそのままにして、値や書式が張り付くはずです。
列幅だけは、形式を選択して張り付けがありますので、別途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のご回答はこれか?)。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/08 21:32

こんばんは。


別に、高さが低くなっているわけではありません。
その方法では、行の高さがコピーされないからです。

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/08 21:33

こんにちわ



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

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

違っていたらごめんなさい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/08 21:30

むりやりですが



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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/08 21:29

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



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

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

お礼日時:2007/10/08 21:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています