• ベストアンサー

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

下記コードのように、 「 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

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんな意味でしょうか? 関数を入れたセルを選択して実行します。(例の通りだと セル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

oshietecho-dai
質問者

お礼

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

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

oshietecho-dai
質問者

お礼

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

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.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 質問の意図と違う場合は無視してください。

oshietecho-dai
質問者

お礼

ご回答、誠に有難うございました。 おっしゃられる通りでした。 質問内容の実例が間違っておりました。大変申し訳ありませんでした。 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

関連するQ&A