マクロで新しいデータを別シートに追加する方法

このQ&Aのポイント
  • マクロを使用して、Sheet1のデータをSheet2に追加する方法を教えてください。
  • Sheet1のデータ(範囲:J3:X20)から数式以外のデータをSheet2(範囲:A3:O20)に追加する方法を教えてください。
  • マクロを使用して、変化するSheet1のデータをSheet2に追加する方法を教えてください。
回答を見る
  • ベストアンサー

マクロ 新しいデータを別シートに追加する

Sub Macro1()   ' Macro1 Macro   Sheets("Sheet1").Range("J3:X20").Copy   Sheets("Sheet2").Range("A3:O3").Insert Shift:=xlDown   Application.CutCopyMode = False   Sheets("Sheet2").Select   Sheets("Sheet2").Range("A3:O20").Value = Sheets("Sheet2").Range("A3:O20").Value End Sub 上記のように、マクロを作成しました。  Sheet1(J3:X20)のデータの中で毎月データが変化します。 これをSheet2(A3:O20)に移す場合にSheet1(J3:X20)にデータのあるもののみ(数式以外)だけをSheet2(A3:O20)に既存のデータに追加して行くとき、どのようなコードにしていけばいいのか、教えていただけませんか。

  • rr5se
  • お礼率96% (87/90)

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.1

数式の結果を値にしたいということでしょうか。以下のようにして試してみてください。 Sub Macro1() Sheets("Sheet2").Range("3:20").Insert Sheets("Sheet1").Range("J3:X20").Copy Sheets("Sheet2").Range("A3:O20").PasteSpecial xlPasteValues Application.CutCopyMode = False Sheets("Sheet2").Select End Sub

rr5se
質問者

お礼

ありがとうございました。

rr5se
質問者

補足

これだと、新しいデータだけを追加することにならないのです。sheet1からコピー貼り付けした既存のデータがsheet2にあります。sheet2にある既存のデータに、新しいデータのみを追加することは、できないのでしようか。今のコードだと、sheet1の値をまた同じように追加される。データとして入っていないところまで、追加されるのですが、この説明でわかりますか。説明が下手で申し訳ありません。よろしくお願いいたします。

その他の回答 (4)

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.5

> 同じものを追加すると、この症状が出てしまいます。 > 追加がないと反映しないということでいいのですね。 こちらでは追加されますが…。どのような状況なのかこちらでは分からないのでなんとも言えません。

rr5se
質問者

お礼

ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

回答ではなく、前段階の補足要求的なものだが、 昨日この質問を読んで、詳細の状況がわからず、すでに回答も出ていたので、諦めた。 今日見ると既回答では満足ではないらしい。 ーー 下記の点の確認と補足をしてはどうかな。 (1)月が替わると、Sheet1のJ3:X20は、データは、所定の(多分)本件質問の処理)をされて、 一旦クリアされるのか?(Sheet2のデータは充実していくわけだが。) (2)月中には、Sheet1の3行ー20行の間で、詰めてデータが入力されるのか?    行数が18行しかないが、不思議だが。どういうデータかな。    月が終わって、場合によってはSheet1の3行ー20行で下の方に空白行があり得るのか?    あるいは修正すべき必要行だけ、探して修正データ入力されるのか? (3)Sheet2のA3:O20には、過去にSheet1のJ3:X20に入力されたデータで、重複のないものが入っているのだよね。   なぜA3:O20と18行固定なのか?どんどん増えていく、ようなものと違うのですか? (4)「データのあるもののみ」の判定は、j列からX列までの全部列のデータで行うのか。    全列一致か?この点を明確に書いてないのは、プログラマとして、おかしい。   普通はキー項目といって、1-3列ぐらいで、同じかどうか判定するのかなと思うが。 以上微妙な点なので、小生の言は的外れの惧れはある。その際は後免。 == 私の持論であるが、シートの(模擬)データを示して、人間がもし手作業でやるならの仮定作業ステップにおきかえて、文章説明するのがわかりやすいと思う。 例)探す・比較する・最終行の次に書く、などVBAコードは判らなくても、文章で箇条書きするやり方です。 現実のシートのA-J列などは、A-C列ぐらいで説明して回答をもらえば、コード修正は簡単なので、簡略化してわかりやすく、すべきと思うが。

rr5se
質問者

お礼

なるほどです。これからも勉強します。大事なことと受け止めておきたいと思います。

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.3

行方向は連携させたままだと(最終行までにある空白はコピーする) J3を起点として下方向に行にデータがある行、及び右方向に列にデータがある列までの範囲とします。 CurrentRegionの範囲です。 Sub Macro1() Dim LastRow As Long With Sheets("Sheet1").Range("J3").CurrentRegion LastRow = .Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row End With Sheets("Sheet2").Range("3:" & LastRow).Insert Sheets("Sheet1").Range(Cells(3, "J"), Cells(LastRow, "X")).Copy Sheets("Sheet2").Range("A3:O3").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Sheets("Sheet2").Select End Sub

rr5se
質問者

お礼

ありがとうございました。

rr5se
質問者

補足

Sheets("Sheet1").Range(Cells(3, "J"), Cells(LastRow, "X")).Copy 実行時エラー '1004' アプリケーション定義またはオブジェクト定義のエラーです。 というエラーがでます。同じものを追加すると、この症状が出てしまいます。 追加がないと反映しないということでいいのですね。

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.2

> sheet2にある既存のデータに、新しいデータのみを追加することは、できないのでしようか。 列単位で新しいデータが挿入されていき、行方向は連携しなくてもいい(段違いになる)ということなんですね。 以下の方法で試してみてください。 Sub Macro1() Sheets("Sheet2").Range("3:20").Insert Sheets("Sheet1").Range("J3:X20").Copy Sheets("Sheet2").Range("A3:O20").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Sheets("Sheet2").Range("A3:O20").SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp Sheets("Sheet2").Select End Sub

rr5se
質問者

お礼

ありがとうございました。

関連するQ&A

  • マクロでシート2~6のデータをシート1に転記したい

    マクロでシート2~6のデータをシート1に転記したいです。 シート2~6のデータを シート1に順番に転記したくてマクロの記録を利用して作成しました。 シート2~6は列は同じですが行数は異なります。 また行数は作業の都度異なります。 同じ記述が繰り返されているので もう少し記述が短くできるのではと思うのですが どうすればいいでしょうか? Sub データ更新() 'シート1の前回データをクリア Sheets("シート1").Select Range("A2:Q2").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Range("A2").Select Sheets("シート1").Select Range("A1").Select Sheets("シート2").Select Range("A1").Select 'ヘッダーも合わせて取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート3").Select Range("A2").Select 'データのみ取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート4").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート5").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート6").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select End Sub

  • マクロの記録で作ったのですが、バックヤードで可動するようにできないでしょうか?よろしくお願いします

    下記のマクロを記録で作成したのですが素人のためこれ以上がわかりません。 やりたいことは、バックヤードで可動するようにしたいのと、 (現在はシートが移動したりマウスを動かすと読み込む時間がずれます) 実行間隔を任意で指定したセルから実行間隔を取得したいのですが。 よろしくお願いします。 下記のマクロはデータロガーから信号を定期的に記録でするにしてあります。 Sub Macro2() ' Sheets("表示").Select Range("B10:D10").Select Selection.Copy Sheets("DATA").Select Range("A1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False Selection.Insert Shift:=xlDown If Range("J8").Value = 999 Then Application.Run "ストップ3" Else Application.Run "Macro3" End If End Sub Sub Macro3() Sheets("DATA").Select Range("J8").Select Selection.ClearContents 実行間隔 = Now + TimeValue("00:00:05") Application.OnTime TimeValue(実行間隔), "Macro2" End Sub Sub ストップ3() Sheets("DATA").Select Range("J8").Value = 999 End Sub

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • 複数のシートにまたがり、フィルタオプションの設定から値を抽出するマクロ

    複数のシートにまたがり、フィルタオプションの設定から値を抽出するマクロを組んでおります。 表示したくないシート(data,output)を非表示にしたら、エラーが出てしまいました。 非表示シートの状態で処理することはできませんでしょうか。 Sub Macro7() Application.ScreenUpdating = False Sheets("data").Select Columns("A:J").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ Sheets("マップ").Range("E2:N3"), Unique:=False Columns("A:J").Select Selection.Copy Sheets("output").Select Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.Copy Sheets("マップ").Select Range("E5").Select ActiveSheet.Paste Range("H4").Select Sheets("data").Select Application.CutCopyMode = False ActiveSheet.ShowAllData Sheets("マップ").Select End Sub

  • エクセルでシート名をセル参照するマクロ

    いつもお世話になっております。 ワークシートをコピーする際、 B1セルの値を複製したシート名にするマクロを と思ってやってみましたが、 Sub Macro1() ' ' Macro1 Macro Sheets("0000").Select Application.CutCopyMode = False Sheets("0000").Copy Before:=Sheets(3) Range("B1").Select Selection.Copy Sheets("0000 (2)").Select Sheets("0000 (2)").Name = "0524" Range("B1").Select End Sub 5行目でB1セルをコピーしましたが、 シート名として命名されたのは、 "0524"という固定の値でした。 (そのときのB1セルの値です) このB1セルは日付データなのですが、 マクロを実行する日によって、 翌日だったり、3日後だったりします。 (営業日ベースなので) どのようにしたら、B1セルの値を シート名に使用できるでしょうか よろしくお願いいたします。

  • 行を挿入するマクロがうまくいきません。

    Sheets("りんご").Select Rows("1:1").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown Application.CutCopyMode = False End Sub というマクロは、りんごのシートにある1行をコピーして、 みかんのシートの人と名前定義してある特定の行にコピーする マクロです。この次に下のマクロを実行すると Sheets("りんご").Select Rows("2:3").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown それまでのものが残ってしまい、行がどんどん増えていってしまいます。 いずれかのマクロを実行すればリセットされて行が増えないように コピーするにはどうすればよいでしょうか・・?

  • エクセルで、シートを非表示のままマクロを実行するには?

    エクセル初心者です。 Sheet1で、マクロの実行ボタンがあり、Sheet2で、データを編集して、 Sheet1に結果の一覧を表示させるマクロなのですが、 Sheet2は非表示のままマクロを実行したいのですが、うまくいかず、 Sheet2を表示して、実行するとうまくいくため、 一時的にシートを表示させるようにしてみたのですが、 Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Insert Shift:=xlDown で、アプリケーション定義・オブジェクト定義エラーになります。 どなたかご指南下さい。 Private Sub EDITSLINF() Dim rowCnt As Long Application.ScreenUpdating = False Worksheets("製造記録一覧 (edit1)").Visible = True  Sheets("Sheet2").Range("AB2:AK300").ClearContents '追加レコード抽出&コピー&ペースト Sheets("Sheet2").Range("Q1:Z300").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "AP1:AP2"), CopyToRange:=Sheets("Sheet2").Range("AB1:AK1"), Unique:=False '既存レコードコピー&ペースト rowCnt = Sheets("Sheet2").Range("O1") Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Insert Shift:=xlDown Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Interior.ColorIndex = xlNone Sheets("Sheet2").Range(Cells(2, 2), Cells(rowCnt, 11)).Copy Sheets("Sheet2").Range("AB2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Worksheets("Sheet2").Visible = False 'メインシートへコピー   Application.CutCopyMode = False Sheets("Sheet2").Range("AB2:AJ300").Copy Sheets("Sheet1").Range("K4").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False End Sub

  • エクセルマクロ 繰り返して、別のシートへコピーしたい

    エクセルマクロ 繰り返して、別のシートへコピーしたい マクロ初心者のため、やり方が全くわかりません。 どなたか教えてください。 やりたいことは、 コピーするシートはあらかじめ作成しています。 簡素化の方法がわからないので、 とりあえず自分で作ってみたものが下にあるものです。 繰り返す方法がわからないので、 どなたか教えてください。 よろしくお願いします。 以下、作成したマクロです。 1行目から10行目まで繰り返したくて、 1行目から2行目のセルの移動の差は10行目までかわりません。 '1行目 Sheets("Sheet1").Select Range("B14:C14").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B15:C17").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False '2行目 Sheets("Sheet1").Select Range("B18:C18").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B19:C21").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B2").Select Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False

専門家に質問してみよう