[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『横にコピー(コピー先が変動)していくマクロ』(OMO)
お知恵をお貸しください…
1行目にタイトルがあり、そのタイトルはC列まであったり、時にはF列まであったりと日によって変動します。
そのタイトルの下の行(2行目)にいれてある式を、同じ2行目のC列やF列まで横に式をコピーしたいです。変動する列に対してどのようなマクロを組むとうまくコピーできるのでしょうか?
例)昨日のデータ
A B C D E F
1○社 ○社 ○社 ○社 ○社 ○社
2式→→→→→→→→→→→→→→→
3
例2)今日のデータ
A B C
1○社 ○社 ○社
2式→→→→→→→
3
< 使用 Excel:Excel2010、使用 OS:Windows7 >
ある行の最終列を求める方法はいくつかありますが、その行の最終列のセルから左に、最初に値があるセルを見つけるというのが 定番の1つです。
で、2行目に数式を埋め込む、これを操作でやるということはできますよね。 ・A2を選択してマウスで、最後の列までフィルコピー ・A2をCtrl/Cでコピーして、B2から最後の差列まで選択して Ctrl/v
この2種類の操作をマクロ記録すると
Sub Macro1() ' ' Macro1 Macro '
' Range("A2").Select Selection.AutoFill Destination:=Range("A2:E2"), Type:=xlFillDefault Range("A2:E2").Select End Sub
Sub Macro2() ' ' Macro2 Macro '
' Range("A2").Select Selection.Copy Range("B2:E2").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub
こんなコードが生成されますね。 問題は、この中の Range("A2:E2") であるとか、Range("B2:E2") といった固定でコードになったところを どのように変動する値として与えるかということですね。
以下、ヒントです。 これを元に、挑戦してみてください。 壁にぶつかればSOSを投げかけてください。
Sub Hint() Dim j As Long
j = Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox "A2:E2 にあたるアドレスは " & Range("A2", Cells(2, j)).Address & " です"
MsgBox "B2:E2 にあたるアドレスは " & Range("B2", Cells(2, j)).Address & " です"
End Sub
(β) 2015/05/18(月) 18:53
(OMO) 2015/05/19(火) 12:59
外出してレス遅れました。
j = Cells(1, Columns.Count).End(xlToLeft).Column
これは 1行目のデータ最終列番号を取得しています。 今回の場合は 4 行目のデータ最終列ですから、Cells(1, Columns.Count) のところが Cells(4, Columns.Count)になりますね。
次に、セットすべき領域、Range("A2", Cells(2, j)) ないしは Range("B2", Cells(2, j)) ですけど
Range("A2", Cells(2, j)) これは A2 から j 列 2 行目まで、Range("B2", Cells(2, j)) これは B2 から j 列 2 行目まで。
今回の場合は T5から j 列 5行目まで、ないしは U5 から j列 5行目まで ということになりますね。
ということで、セットすべき領域の記述を変更してみてください。
(β) 2015/05/19(火) 21:59
ご返答有難うございました!!
βさまの助言を参考に作ってみたところうまくいきました。
まだまだマクロを使い始めたばかりで基本的なことを理解できていないので、基礎から頑張って勉強したいと思います。本当にありがとうございました!!
(OMO) 2015/05/20(水) 12:28
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.