電子書籍の厳選無料作品が豊富!

ExcelVBA2013です。
列の取得でつまづいております。
お手数ですが、ご教授下さい。

下記のコードで選択範囲のコピー貼り付けは出来ていますが、列幅がコピーされていませんでした。
CC3のセルを基準にOffsetとResizeで範囲拡大してコピーしているためだと思います。
CC3の左隣のAX3:CB3はセル結合されています(○月)。(その下の4行目は日付の1~31が入力)
列は、今回はAX3:CC3まで(1月分)取得できればよいです。(可変します)
MaxCol = Range("J5").End(xlToRight).Column  で列取得できます。

行の位置は、MaxRow = Range("I5").End(xlDown).Row  で取得した値です。

それで、列全体を取得しようと、 MaxCol = Columns(MaxCol).Select で最終列は取得できましたが、そこから列選択の拡大ができればと思っています。


現在は、AX3:CC237まで取得コピーして、隣の列に貼り付けで列幅が違う。
希望はAX:CCまでの列を取得選択コピーして貼り付け。


Sub SAMPLE()

Dim MaxRow As Variant, MaxCol As Variant
Dim r As Range, c As Range

MaxRow = Range("I5").End(xlDown).Row '最終行番号
MaxCol = Range("J5").End(xlToRight).Column '最終列番号

Set c = Cells(3, Cells(3, Columns.Count).End(xlToLeft).Column) '表の右上角のセル番地を取得

c.Select
c.Offset(0, -31).Resize(MaxRow - 2, 32).Copy c.Offset(0, 1) '表右上から1月分選択範囲拡大してコピー隣の列より貼りつけ

End Sub

A 回答 (2件)

>列幅がコピーされていませんでした。



ご相談の直接の回答としては

変更前:
c.Offset(0, -31).Resize(MaxRow - 2, 32).Copy c.Offset(0, 1)

変更後:
c.Offset(0, -31).Resize(MaxRow - 2, 32).entirecolumn.Copy destination:=cells(1, c.column + 1)

とかで十分です。
    • good
    • 0
この回答へのお礼

試してみました。
思い通りに出来ていました。
どうもありがとうございました。

お礼日時:2015/01/04 19:21

やりたいことは、


3行目の最終セルが結合してる列の最終セルまでを、結合セルの隣に列幅も含めてコピーする
でいいのかな?

Cells(3, Cells(3, Columns.Count).End(xlToLeft).Column).Select
Range(Selection, Selection.End(xlDown)).Copy
Selection.Offset(, 1).PasteSpecial xlPasteAll
Selection.PasteSpecial Paste:=xlPasteColumnWidths

この回答への補足

関係ないかもしれませんが、1点もれがありました。CC3:CC4は結合しています。

試してみました。
1行目のコードで、CC3を選択していました。
2行目以降で、CC3のみしかコピーされず、隣にはりつけていました。

CC列は合計列で、その左に31列(1か月分)あります。さらに、その左も同じように前月分が存在しています。
合計欄も含め、最右側にある1か月分を列毎コピーしたいと思っています。
AX:CCの列全体選択→コピー→CDに貼り付け。

CCを選択して、そこから、31列さかのぼって、列全体を選択出来ればと思っているのですが、列全体を選択できないでいます。

これで分かりますでしょうか?他に情報が必要でしたら、教えてください。すいません。お手数かけます。

補足日時:2015/01/04 19:02
    • good
    • 0
この回答へのお礼

解決しました。
どうもありがとうございました。

お礼日時:2015/01/11 16:03

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