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

解決済みの質問

一度に、任意の列全体へ、関数をコピーするマクロは?

下記コードのように、 「 E 列 」 だけに実行するのではなく、

「 実行前 」 に、手動にて、好みの任意のセル1つに  「 関数 」 を貼り付けます。
そしてマクロを実行し、 下記 「 実行後 」 のようにするには、どのようなコードになりますでしょうか?
下記のような変数を組み入れるのだと思いますが、うまく出来ません。
ただ、先頭の 「 行番号 ( 変動しますが、例では60 ) 」 は、 手動にて貼り付けますので事前に解かっているとします。
また、 「 オートフィルタ 」 後に、使用する予定です。

何卒、よろしくお願い致します。
------------------
Sub test()
Range("E60").Select
ActiveCell.FormulaR1C1 = "=RC[2]"
Selection.AutoFill Destination:=Range("E60", Range("C65536").End(xlUp).Offset(0, 2)), Type:=xlFillDefault
End Sub
------------------
Dim r As Range, base As Range
Dim x, y
Dim i
Set r = Selection
Set base = Selection.Cells(1, 1)
x = r.Columns.Count
y = r.Rows.Count

---実行前(オートフィルタ後)------------------
C列            E列 
・              ・ 
・              ・
2007/10/13       =G60   
2007/10/13
2007/10/13
2007/10/13
2007/10/13
2007/10/14
2007/10/14

--実行後-------------------
C列            E列 
・              ・ 
・              ・
2007/10/13       =G60   
2007/10/13       =G60
2007/10/13       =G60
2007/10/13       =G60
2007/10/13       =G60
2007/10/14       =G60
2007/10/14       =G60

投稿日時 - 2007-10-15 02:14:24

QNo.3430310

すぐに回答ほしいです

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

こんな意味でしょうか?

関数を入れたセルを選択して実行します。(例の通りだと セルE60)
Sub Test()
Dim r As Range
Set r = ActiveCell
With ActiveSheet
  .Range(r, .Cells(.Cells(65536, 3).End(xlUp).Row, r.Column)).Formula = r.Formula
End With
End Sub

投稿日時 - 2007-10-15 08:01:03

お礼

早速のご回答、誠に有難うございました。
不精な、文面をご理解して頂いて、有難うございました。
バッチリでございました。

投稿日時 - 2007-10-15 22:27:24

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

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

回答(3)

ANo.3

こんにちは。

ご質問者さんは、難しく考えすぎなのだと思います。ご質問の内容からすると、単に、こういうように直せばよいと思います。質問内容からすると、列も任意の場合も含めるようですから、一応、相対位置を取らないといけませんね。Take it easy!

Sub TestR()
Dim Col As Integer
Col = ActiveCell.Column - 3 'C列に対して
ActiveCell.AutoFill Destination:= _
Range(ActiveCell, Range("C65536").End(xlUp).Offset(0, Col)), Type:=xlFillDefault
End Sub

投稿日時 - 2007-10-15 10:15:02

お礼

こんばんは、
ご回答、誠に有難うございました。
質問内容の実例は、「絶対参照」で、私が間違っておりましたが、
実行結果は、希望通りでした。

投稿日時 - 2007-10-15 22:34:01

ANo.2

質問文が長々と書いてあるが、「D3(例えば)に入れた数式を、データ最下行まで、複写したい(VBAで)」ということではないの?
普通は実例を挙げることが判りやすさにつながるが、文章の方が意図が伝わりやすい例もある。
ーー
複雑なコードが書いてあるが、下記のように簡単で良いのでは。
番地を変化させないなら(質問例はこれらしい)
Sub test01()
d = ActiveSheet.Range("A65536").End(xlUp).Row
For i = 3 To d
ActiveSheet.Cells(i, "B").Formula = ActiveSheet.Cells(3, "B").Formula
Next i
End Sub
ーー
下方向の複写なら(番地の行番号は変化)(マクロの記録が使える例)
Sub test02()
d = ActiveSheet.Range("A65536").End(xlUp).Row
Range("B3").AutoFill Destination:=Range("B3:B" & d), Type:=xlFillDefault
End Sub
質問の意図と違う場合は無視してください。

投稿日時 - 2007-10-15 09:27:53

お礼

ご回答、誠に有難うございました。
おっしゃられる通りでした。
質問内容の実例が間違っておりました。大変申し訳ありませんでした。
2007/10/13       =G60   
2007/10/13       =G61
2007/10/13       =G72
2007/10/13       =G63
2007/10/13       =G64
2007/10/14       =G85
2007/10/14       =G86

投稿日時 - 2007-10-15 22:28:59

あなたにオススメの質問