• ベストアンサー

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

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

  • エクセルのマクロと関数について

    お世話になります。 1)マクロの方法で以下のようにしたいのですが可能でしょうか? 1行目にオートフィルタがかかっていればAAの処理をし、もしオートフィルタがかかっていないのであればBBの処理をしなさい。 というようなマクロです。if~then~else をつかってすると思うのですが、どうもうまくいきません。 2)関数もしくは式を使って以下のようにしたいのですが可能でしょうか?(ほかに方法があるのであれば関数、式にこだわりません) エクセルのデータベース(A1:E100のデータとし、A1:E1は項目が入っており、A1:E1にオートフィルタをかける)からオートフィルタをかけて項目を絞るのですが、出てきた結果の1番上、つまりA2:E2にあるB2とD2の結果を別のシートにある結果欄それぞれ2箇所にコピーする。多分別シートにある結果欄に何らかの関数とか式を入れればいいのかなと思いますが・・・ ちなみに上記2つの質問は関連性はありません。 わかりにくい質問で申し訳ありませんが、必要ならば補足いたします。 かなり困ってますのでよろしくお願いします。

  • 検索した文字のセルを基準に範囲指定コピーのマクロ

    表題のマクロを教えてください。 検索範囲 シート1のA1:K100 検索する文字 ” 成績 ” コピーする範囲 見つかったセルの下の行から5行~10列まで全部。 貼り付ける場所 シート2のB1 宜しくお願いします。

  • エクセルの関数のコピー

    エクセルの関数を下のセルにコピーをすると、1つずつ関数の式がずれてくるのですが同じ範囲の関数を同じ様に入力したい場合はどうすればいいですか? 例)=VLOOKUP(F3,Sheet2!A1:E5000,2,0) という関数があったとすると 次の行には=VLOOKUP(F4,Sheet2!A1:E5000,2,0) と検索値のみが1つ変わる感じにしたいのですが・・・ コピーでは無理なのでしょうか。やはり1つ1つ数式を入れてやらないとだめでしょうか。

  • マクロでコピー貼り付けやってみたいのですが。

    マクロの初心者です。Dim で宣言してやりたいと思っています。 既存のExcelの機能で出来ないことはないと思いますが、敢えて、マクロででないか。 やってみたいと思っています。 やりたいこと等について 1 sheet1のE2:J1109の範囲のデータをコピーしての別sheet2のE3:J1110の範囲に貼り付けたい。 2 その時に最終行を取得してコピーをするとしたら、どんなコードが必要なのか 3 最終行の取得のコードの書き方が分からない 4 ネットで下記のような(一部変更)に作ってみたが、これで良いのでしょうか、わからない。 以上のことを答えて頂けませんか。よろしくお願いします。 Sub テスト() Dim range1 As Range Set range1 = Range("E2:J1109") range1.Copy ActiveSheet.Paste Destination:=("sheet1").Range("E2:J1109") ActiveSheet.Paste Destination:=("sheet2").Range("E3:J1110") Application.CutCopyMode = False End Sub

  • エクセル:下にコピーをマクロで(条件付)

    お世話になります。 エクセルでの入力で、「下にコピー」を多用する仕事があります。 以下の例をマクロでやりたいです。 例 まずC列、D列、E列のうちデータが入っている行がもっとも大きい列を判断します。 C10、D12、E13が各列のデータが入っている最大行の場合、E13の13行目が最大になります。このようにE列が最大になる場合、C列はC10の値を13行目まで下にコピー、D列はD12の値を13行目まで下にコピーします。(Ctrl+D) (ここでいう13行目までというのは最大値E13の13を意味します。) また、C12、D15、E11が各列のデータが入っている最大行の場合、D15の15行目が最大になります。D列が最大になる場合は、C列のC12の値を15行目まで下にコピーします。(E列に対してはなにもしない) さらに、C13、D10、E11が各列のデータが入っている最大行の場合、C13の13行目が最大になります。C列が最大になる場合はなにもしない。 C列、D列、E列のうちデータが入っている行がもっとも大きい列が判断できない場合(C14、D14、E12など最大行が同じ場合)の時も何もしません。 これをマクロでやる場合、どうすればよいでしょうか?

  • エクセルの関数 vlookup 関数で式の作り方&コピーの仕方

    vlookup関数で、下のように式を入力しますよね。 =vlookup(検索値,検索範囲,列番号) で、列番号のところはその、検索したい列番号にしなければ、いけないのですが、単純に横方向にコピーすると、列番号は、変化しないのですね・・・横に長いデータを使用しているので、列番号を一つずつ書いていくのが、面倒なのですが、みなさん、そうされているのでしょうか?? また、別件で、このように別のシートからデータを持ってくるように作った式のシートを、コピーして、別のファイルに貼り付けると、その検索先が、式を作った場所のままになってしまいますよね(コピー→貼り付けで、数式のみにしても・・・) この解決方法はないのでしょうか??当方、マクロやVBAはわからいのですが・・・・ どなたか、良い方法がありましたら教えてください。よろしくお願いいたします。

  • エクセルマクロでセルの値を下へコピーするには

    ご教授下さい。 毎日送られてくる項目数の多い表を、必要な項目のみ取り出して表を整理するマクロを組んで使っています。しかし、日によって行数が違う為、ある列に数式を入力して下へコピーする場合、マクロ操作が終わってからオートフィルを使って下へコピーしています。行数が違っても行数分だけ下へコピーできるマクロを教えて下さい。何卒よろしくお願い致します。      A列   B列   C列   D列     E列 1行    豆   10入   2個   100円   (数式CXD)200円 2行   飴   20入  3個   150円   (数式CXD)450円  3行   餅   10入   4個   100円  (数式CXD)400円 4行   麦   15入   2個   200円   ↓ 5行   米   20入   4個   100円   ↓ 上記のような表でE列の数式を下へコピ-するマクロです。 日によって行数に違いがある場合でも行数分だけ 下へコピー出来るマクロを教えて下さい。

  • エクセルのマクロで行いたいのですが。シート1からシート3(ジャンル別の

    エクセルのマクロで行いたいのですが。シート1からシート3(ジャンル別の商品データ)にあるデータを入荷した商品名で検索し、その検索結果の行を入荷した数量分コピーして、シート4(印刷)に上から順に貼り付けます。その結果をバーコードラベルで印刷し、商品に貼り付けていきたのですがどなたか教えてください。現在は、いちいちシート毎で「Ctrl+F」で検索画面を出し、商品名を検索し、なければ別のシートで検索し、該当するものが見つかれば選択して、行をコピーして印刷シートに貼り付けています。とても時間がかかっています。 シート1から3の構成は、ジャンル別で分かれていますが、 A列:商品名、B列:メーカーコード、C列:自社コード、D列:売価、E列:原価、F列:登録日 です。バーコード印刷のマクロは出来てます。 複数のシートから検索し、コピーして、印刷シートに貼り付けるマクロです。 エクセルは2003で、OSはXPのSP3です。

  • ◯ならば、右セルをコピーし、1セルにまとめるマクロ

    エクセルのマクロで、顧客管理情報のシートを作成しています 例えば下のような二列のセルがありまして、(|は、セルの境目を表す) ◯ | A ◯ | B × | C ◯ | D この時、 ◯のついている行の値だけど、つなげたいと思っています。 この場合であれば、得たい値は「A、B、D」という値です。(AとBの間を ”,” などで区切ろうと考えています。 エクセルの関数でいえば「A1&","&A2」といったところでしょうか・・・ そのような操作を、上のテーブルでいえば「◯」のついているセルに対してのみ実行してもらうマクロを組みたいです。 このような場合、どうしたら良いでしょうか? アドバイスを、どうぞよろしくお願いいたします。

  • 数式のコピーのズレを直す方法、マクロ、関数のいずれかの方法を教えてください!!

    数式のコピーのズレを直す方法、マクロ、関数のいずれかの方法を教えてください!! Sheet1には、計算結果が表示されるようにしてあります。 その結果の数式は、 =IF(Sheet2!A1="","",IF(Sheet2!A1<2,"<",ROUND(Sheet2!A1,2))) と、入っています。 計算結果の表示上、「Sheet1 A1とA2」の2行のセルを結合して1行にしてあって、対して「Sheet2はA1」の1行です。 これをつぎの「Sheet1 A2」に数式をコピペしていくと、 =IF(Sheet2!A2="","",IF(Sheet2!A2<2,"<",ROUND(Sheet2!A2,2))) と、していきたいのですが、 =IF(Sheet2!A3="","",IF(Sheet2!A3<2,"<",ROUND(Sheet2!A3,2))) となってズレてしまいます。 これを300行ほど作らなければならないのです。 数式、1行のセルを2行の結合したセルにコピペできる方法、もしくはマクロや他の関数があれば教えていただきたいです。 わかりにくくて申し訳ありませんが、お願いします。