• ベストアンサー

マクロでセルのコピーをする方法

E2に関数の結果が入っています。(D2に検索値、範囲は別シート) E2をD2にデータが入っている行まで下にコピーするようなマクロを作りたいのですが、どのような式を書けばよいのでしょうか。 宜しくお願い致します。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

こういうことですか? 例えば、 D2~D30まで値が入力されていたら E2の式をE30までコピーしたい D2~D99まで値が入力されていたら E2の式をE99までコピーしたい なら、次のようにします。 ●シートactiveがアクティブになってない場合  即ち他のシートがアクティブな状態で実行する場合は With Sheets("active")  .Range("E2").Copy .Range("E2", .Cells(Rows.Count, "D").End(xlUp).Offset(0, 1)) End With ●シートactiveがアクティブな状態で実行する場合は Range("E2").Copy Range("E2", Cells(Rows.Count, "D").End(xlUp).Offset(0, 1)) シート名がactiveなんて説明がしにくいなぁ。。。(^^;;; それから、 >E2に >IFERROR(VLOOKUP($D2,AAA!F:H,3,FALSE),"") >という関数があります。 これ実際の式をコピペしたものではないですよ。 式の態をなしてないので。 以上です。  

berry2009
質問者

お礼

ありがとうございます! 希望通りの処理ができました。

その他の回答 (2)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

再度の登場、myRangeです。 >「Rangeメソッドは失敗しました:'_Global'オブジェクト」 これは、D2に値が入っていないからです。 D2に値が入っているか確認してください。 ------------------------------------------------ D2に値が入っているにも拘わらず、エラーがでるというのであれば 下記のことを補足願います。 最初の質問 >E2に関数の結果が入っています。(D2に検索値、範囲は別シート) >E2をD2にデータが入っている行まで下にコピーするようなマクロ この「範囲は別シート」の文言で、当方は、 E2とD2は別シートにある、と受け取りました。 ところが、補足では、 >D2、E2は"active"という名前のシートにあります とのこと。 これでは、最初の質問の「範囲は別シート」は意味不明です。 式をどのシートのどのセルにコピーするのか分かりません。 そから辺りをシート名、セル番地など具体的に提示してくさい。 以上です。

berry2009
質問者

補足

わかりづらくてすみませんでした。 D2,E2はシート"active"にあります。 E2に IFERROR(VLOOKUP($D2,AAA!F:H,3,FALSE),"") という関数があります。 VLOOKUPの検索範囲でシート"AAA"をみています。 どうか宜しくお願い致します。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

セルD2は、Sheet2として。 (1)式も書式もコピーする場合 Range("E2").Copy Range("E3:E" & Sheets("Sheet2").Range("D2").Value) (2)式のみコピーする場合 Range("E3:E" & Sheets("Sheet2").Range("D2").Value) = Range("E2").Formula 但し、上記は式のあるシートがアクティブの場合です。 他のシートアクティブなときに実行するのであれば Range("E3:~)、Range("E2")の前にシート名付けてやるか   Sheets("Sheet1").Range("E3~ 最初に、式のあるシートをアクティブにしてやります。   Sheets("Sheet1").Select 以上です。

berry2009
質問者

補足

myRangeさんありがとうございます。 早速(1)の方法で実行してみました。 D2、E2は"active"という名前のシートにあります。 Sub copy() ' ' copy Macro ' ' Range("E2").copy Range("E3:E" & Sheets("active").Range("D2").Value) End Sub しかし、 「Rangeメソッドは失敗しました:'_Global'オブジェクト」 と表示されてしまいます。 シート名を変えただけなのですが。。

関連するQ&A

専門家に質問してみよう