VBA新データ行のみ元のデータシートにコピーする方法

このQ&Aのポイント
  • VBAを使用して、追加データシートから新しいデータ行のみを元のデータシートにコピーする方法について教えてください。
  • 元データシートと追加データシートがあり、追加データ行のみを元データシートにコピーしたいです。どのようにすれば良いですか?
  • マクロを使用して、追加データシートから新しいデータ行だけを元のデータシートにコピーする方法について教えてください。
回答を見る
  • ベストアンサー

VBA 新データ行のみ元のデータシートにコピーする

OSは、XP Excelは、2003 を使用しています。 シート1には元のデータ、シート2には追加データと元データが混じってあります。 元データシートに、追加データシートから追加データ行のみをコピペしたく、 マクロを組んでいます。 下記、 C列の売上番号を見比べて、C列のみ追記するまでは出来たのですが、 1行にデータはA列~X列まであるので、そのデータも一緒にコピペするには どの様にすれば良いのか教えて下さい。 よろしくお願いします。 ****************** Sub 追加データ追記マクロ() Dim motows As Worksheet '元データシート名を格納 Dim tsuikaws As Worksheet '追加データシート名を格納 Dim tsuikamax As Long '追加データの最終行 Dim motomax As Long '元データの最終行 Dim tsuikaNum As Range '追加売上番号 Dim motoNum As Variant '元売上番号 Dim i As Long     '書き込み行 Set motows = Worksheets(1).Name '元シート名を格納 Set tsuikaws = Worksheets(2).Name    '追加シート名を格納 tsuikamax = tsuikaws.Cells(Rows.Count, 1).End(xlUp).Row  '追加データの最終行を格納 motomax = motows.Cells(Rows.Count, 1).End(xlUp).Row '元データの最終行を格納 i = motomax + 1       '書き込み行は元データ最終行+1 For Each tsuikaNum In tsuikaws.Range("C1:C" & tsuikamax)        '追加データ売上番号格納 Set motoNum = motows.Range("C:C").Find(tsuikaNum, lookat:=xlWhole) '元データ売上番号格納 If motoNum Is Nothing Then '元データになかったら With motows .Cells(i, 3) = tsuikaNum i = i + 1 End With End If Next tsuikaNum End Sub

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>「0001」などが「1」になったりするので、 >A~J 及び U~X 列 を 文字としてコピーしたいです。 > .Cells(i, 1).Resize(, 24).Value = tsuikaws.Cells(tsuikaNum.Row, 1).Resize(, 24).Value ↓ 値だけコピー tsuikaws.Cells(tsuikaNum.Row, 1).Resize(, 24).Copy .Cells(i, 1).PasteSpecial Paste:=xlPasteValues もしくは、コピー tsuikaws.Cells(tsuikaNum.Row, 1).Resize(, 24).Copy .Cells(i, 1) て、如何でしょうか

6338-tm
質問者

お礼

再度、ご回答頂きありがとうございます! どちらも、文字としてコピー出来ました。 これで完成させる事が出来ます。 ご親切に感謝致します。

その他の回答 (2)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。  .Cells(i, 3) = tsuikaNum   ↓  Cells(tsuikaNum.Row, 1).Resize(1,24).copy .Cells(i, 1)

6338-tm
質問者

お礼

ご回答ありがとうございます。 試してみたのですが、重複している行がコピーされてしまいます。 しかも、行によっては1~3回コピーされてしまうのです....

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>C列のみ追記するまでは出来たのですが、 それなら > .Cells(i, 3) = tsuikaNum     ↓  .Cells(i, 1).Resize(, 24).Value = tsuikaws.Cells(tsuikaNum.Row, 1).Resize(, 24).Value

6338-tm
質問者

お礼

ご回答ありがとうございます。 思い通りに出来ました! もし、お時間ありましたら、下記もご教授頂けましたら、 有り難いです。 「0001」などが「1」になったりするので、 A~J 及び U~X 列 を 文字としてコピーしたいです。

関連するQ&A

  • 【Excel VBA】データの最終行について

    Excel2003を使用しています。 ある一覧表形式のデータSheet1をSheet2に値のみコピーして、このSheet2を“印刷用”として、ページ設定等をして、印刷のみに使用しようと思っています。 Sheet2のI列、J列、K列には数値が入力されていて、I列、J列、K列のデータの最終行の1行下に、それぞれ6行目からデータ最終行までの合計の数式が入力されるよう、コードを追加したのですが、数式は入力されるものの、入力したい行に数式が入力されません。 マクロを実行して、数式が入力された行を見てみると、301行目に入力されていました。 Sheet1は別のシートのデータを数式により表示していて、数式が300行まで入力されているので、Sheet2の元になっているSheet1の影響(?)なのかな~?と…。こういう場合、どうすればいいでしょうか? コードは下記のようになっています。 よろしくお願いします。 ---------------------------------------- Sub 印刷用作成() Dim i As Integer Dim j As Long Sheets("Sheet1").Activate Range("B6:L6", Range("L6").End(xlDown)).Select Selection.Copy Sheets("Sheet2").Select Range("B6").PasteSpecial xlPasteValues Application.CutCopyMode = False For i = 9 To 11 j = Application.Max(j, Cells(65536, i).End(xlUp).Row + 1) Next For i = 9 To 11 Cells(j, i).FormulaR1C1 = "=SUM(R2C[0]:R[-1]C[0])" Next i End Sub

  • 対象のシートが3行目からになった修正について

    対象のシートが3行目からになってしまったのですが、修正したいのですが、どこを修正したらよいかが分からず、困っています。お教え頂けませんか。よろしくお願いします。初心者で申し訳ありません。 Sub 統合() Dim J As Long Dim r As Long Dim s As Long Dim Sh As Worksheet Dim MaxRow As Long Dim MaxCol As Long Dim MyArray As Variant Dim JoinSh As Worksheet Set JoinSh = Worksheets("統合") '統合シートを変数に格納 JoinSh.Cells.Delete 'すでに統合シートが存在する場合は一旦セルを削除 s = 1 '最大行を超えた場合次の統合シートを作成するための番号 For i = s + 1 To Worksheets.Count 'シートを統合シートの次~末尾までループ With Worksheets(i) '各月シート If J = 1 Then r = 1 '最初だけ項目も取得 Else r = 1 '最初以外は2行目から取得 End If MaxRow = .Cells(Rows.Count, 10).End(xlUp).Row '9列目で最終行を取得 MaxCol = .Cells(1, Columns.Count).End(xlToLeft).Column '1行目で最終列を取得 MyArray = Range(.Cells(r, 10), .Cells(MaxRow, MaxCol)) 'A1~データ末尾まで配列に格納 End With With JoinSh '統合シート MaxRow = .Cells(Rows.Count, 10).End(xlUp).Row '統合シートの9列目で最終行取得 If MaxRow + UBound(MyArray) > Rows.Count Then '最大行を超える場合の処理 s = s + 1 '統合シートの番号を加算 Worksheets.Add Before:=Worksheets(s) '新規に統合シートを追加 ActiveSheet.Name = "統合" & s '名前が同じにならないように番号を追加 Set JoinSh = ActiveSheet '統合シートを変数に格納 MaxRow = JoinSh.Cells(Rows.Count, 10).End(xlUp).Row '統合シートの9列目で最終行取得 End If If .Cells(1, 1) = "" Then '最初だけ1行目から貼り付け Range(.Cells(1, 1), .Cells(UBound(MyArray), MaxCol)) = MyArray Else '最初以外は最終行の次に貼り付け Range(.Cells(MaxRow + 1, 1), .Cells(MaxRow + UBound(MyArray), MaxCol)) = MyArray End If End With Next i End Sub

  • VBA 100行ごとに列を変更してコピーする。

    Winは7、Excelは2013を使用しています。 A列とB列のデータを100行毎に列を変えてコピーしたいと思っています。 (画像参照願います。) それで、別シートにコピペするサンプルコードを見つけたのですが、 同シート内でする様に変更する知識がなく、苦戦しています。 申し訳ありませんが、ご教示願います。 別シートにコピペするサンプルコード Sub データを100行ごとに分割する() Dim シート As Worksheet, 元 As Worksheet '元は元データのあるシート Dim 総行数 As Long, 回数 As Long, i As Long, 開始行 As Long Const コピー行 = 100 Set 元 = ActiveSheet '変数の元をActiveSheetにセットする 総行数 = 元.UsedRange.Rows.Count 回数 = Int(総行数 / コピー行) + IIf(総行数 Mod コピー行 > 0, 1, 0) 開始行 = 1 For i = 1 To 回数 Set シート = Sheets.Add シート.Name = 開始行 & "~" & 開始行 + コピー行 - 1 元.Rows(開始行 & ":" & 開始行 + コピー行 - 1).Copy シート.Range("A1") Columns("A:F").AutoFit 開始行 = 開始行 + コピー行 Next i End Sub

  • VBA シート間の単一セルから結合セルへのコピー

    マクロについてご教授をお願いします。 ◆実現したい事 2枚のシート(XとY)が存在します。 コピー元:Xシート          コピー先:Yシート    B列                    B列 1行 商品1   コピペ→     1~3行結合 商品1  2行 商品2   コピペ→     4~5行結合 商品2 3行 商品3   コピペ→     6~8行結合 商品3   ・                    ・   ・                    ・   ・                    ・  最終行                  最終行 XシートのB列に1行ずつ、商品名が羅列されています。 YシートのB列には、3行結合(B1:B3)、(B4:B6)、(B7:B9)・・・空白セルがあります。 Xシートの商品名をYシートの結合セルにマクロを使って処理したいです。 ◆試した事 (1)結合を解除し、XからYへ範囲コピーしたが、YのB列に再び、商品毎に2行追加し、結合  2行追加する方法がわからず断念 (2).valueでXシートB1 = YシートB1を試みるができない ◆ここで詰まってます>< Dim X As Worksheet Dim Y As Worksheet Dim 最終行1 As Long Dim 最終行2 As Long Dim cp1 As Long・・・・Yシート行変数 Dim cp2 As Long・・・・Xシート行変数 Set X = Worksheets(1) Set Y = Worksheets(2) 最終行1 = Cells(Rows.Count, 2).End(xlDown).row 最終行2 = Cells(Rows.Count, 2).End(xlDown).row For cp1 = 1 To 最終行1 For cp2 = 1 To 最終行2 Step 3 sh1.Cells(cp1, 2).Copy Destination:= sh2.Cells(cp2, 2) Next Next みたいな感じにできればと、Copyを.valueなどにしてみたりと試してみましたが、 なかなかうまくいかず、3日くらい悩んでいます。 シンプルにやりたいのですが、なにか良い方法などあれば、 ご教授のほどお願い致します><

  • 【VBA】Ifで他シートから検索しコピーする

    Excel vbaについて教えてください。 自分で作成したコードが、うまく動かず悩んでいます。 ●作りたいもの Sheet3のA列にある数字を検索値とし、 Sheet1のA列を検索し、合致する行のB列~最終列までコピーし、 Sheet3のB列から貼付する。 ※Sheet1にある列数(項目数)は不定です ●作成したマクロ Sub test() Dim sh1 As WorkSheet Dim sh2 As WorkSheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet3") d = sh2.Range("A1").End(xlDown).Row 'Sheet3検索値のA列のデータの最終行 g = sh1.Range("B1").End(xlToRight).Column 'Sheet1の最終列 k = 2 For i = 2 To d    'Sheet3最終行まで If sh1.Cells( i & "A") = sh2.Cells( 1,"A") Then '条件)Sheet1とSheet3のA列が合致 For j = 2 To g                      'Sheet1の最終列まで sh2.Cells( k , j ) = sh1.Cells( i , j ) 'Sheet1のB行から最終列をコピーしSheet3へ貼付 Next j End If Next End Sub いろいろ直していたのですが、Set sh2 = Worksheets("Sheet3")で「インデックスが有効範囲にありません」(同じブック内に同名シートがあるのに?)とエラーが出たり、 また、B行から最終列までコピーする際の範囲指定についてもよくわからず、 もっと他に良い方法が無いものかとお手上げ状態です。 どうぞ宜しくお願いいたします。

  • シート1のC列の最終行をコピーして同じ行に値貼り付けしたい

    シート1のC列の最終行を取得して その行を丸々値貼り付けするマクロを作りたいと思います。 シート3のB18の値をシート1のC列の最終行の1つ下のセルに値貼り付け すると、その行のA、B列に日付が入力される関数が入っています。(下まで) 関数が入ったままだと、うまくいかない時があるので最終行をコピーして値貼り付けしたいのですが、マクロの作り方を教えてください。 シート1の最終行に貼り付け Sheets("Sheet3").Select Range("B18").Select Selection.Copy Sheets("Sheet1").Select Range("C65536").End(xlUp).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub 最終行をコピーして値貼り付け Dim 最終行 As Integer 最終行 = Range("C65536").End(xlUp).Row Range("A6:C" & 最終行).Select Selection.Copy Sheets("Sheet1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub このマクロだと、A6からC列の最終行まで全てコピーされてしまうので、C列の最終行のAからC列まで1行だけコピーできないでしょうか?

  • VBA 最終行を選んだシートにコピーする。

    VBAど初心者です。どうしても最終行のデータを選んだシートにコピーできません。 LastRow.Selectのところで、止まってしまいます。どのように行を設定していいのかさっぱりわかりません。どなたか、ご指導のほどよろしくお願いします。 Sub copy_last_line() Dim LastRow As Long Sheets("Sheet1").Select LastRow = Cells(Rows.Count, 1).End(xlUp).Row LastRow.Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("A1").Select End Sub

  • VBAでsheetのコピー

    ご回答有難う御座いました。補足説明を致します。動作するとこまでは、出来たのですが、一点変更しました。:=のコピーの所でデバッグすると、エラーになるので、=だけにしました。すると動作するのですが、新しいsheetの名前が、コピー元のsheet名になります。そして、MsgBoxを入れると、エラーになります。また、1sheetだけがコピーされます。大変恐縮ですが、もう一度ご教授願います。補足説明なりますが、やりたい事は、拡張子がxlsmの中に名前のついた10個のsheetがあります。この10個のsheetを拡張子がxlsxのBookにコピーしたいのですが、このBook1のsheetをVBAから新に作成しBook2のsheet1に纏めたいのですが、纏め方は、Book2のsheet1の下から上に10sheetをコピーして、条件としてBook2のsheet1の名前は、固定で構いません。Book1の一番初めのsheetにコピーする時だけ3行目にある見出しだけは、Book2のsheet1に付けたく。それ以外のBook1のsheetは、デターだ4行目以降をコピーしたいのですが、また、コピーしたいsheetの範囲に列は、A1~AFで列は3~62までです。マクロはご教授頂いた、下記通りです。 Sub macro1() Dim i As Long Dim w0 As Workbook Dim s As Worksheet Set w0 = ActiveWorkbook '1枚目シートから貼り付け先のブックを作る w0.Worksheets(1).Copy Set s = ActiveSheet '2枚目以降のデータをコピーする For i = 2 To w0.Worksheets.count With w0.Worksheets(i) .Range("A4:AF" & .Range("A65536").End(xlUp).Row).Copy Destination = s.Range("A65536").End(xlUp).Offset(1) End With Next i End Sub これを先ほど書きました、マクロを教えて頂けませんでしょうか?何せ、マクロ初心者なので、msm相談箱がたよりです。何卒マクロを教えて頂きたく宜しくお願い申し上げます。

  • 他のシートの任意の列に1行おきに表示する

    よろしくお願いします。 下の構文ですと Worksheets("入力")の3列目5行目以降のデーターが Sheet2の同じ列(3列目)5行目以降に1行おきに表示されます。 これを Worksheets("入力")の3列目5行目以降のデーターを Sheet2の7列目5行目以降に1行おきに表示したいのですが どのように書き直せばよいでしょうか。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim i As Long, j As Long j = 5 With Worksheets("入力") For i = 5 To .Cells(Rows.Count, 3).End(xlUp).Row .Rows(i).Copy Worksheets("Sheet2").Cells(j, 1) j = j + 2 Next i End With End Sub

  • エクセル2007 VBA シート内のデータを項目名で検索し、その列を新

    エクセル2007 VBA シート内のデータを項目名で検索し、その列を新規シートにコピーする方法についてです。 VBAについては初心者で、グーグルで調べながら作ったのですが、コピー後のペーストが上手く出来ません。どうすれば最後まで処理できるのかを教えて下さい。 それと、全体的に書き方がおかしいところがありましたら指摘・改善方法を教えて下さい。 よろしくお願いします。 Sub 配列並べ替え() Dim myArray As Variant '1項目名希望順配列格納 Dim strArray As Variant '2検索用1の配列格納 Dim LastCol1 As Long '3最終列数格納 Dim LastCol2 As Long '4新規シートの最終列数格納 Dim DefSheetname As Variant '5初期のシート名取得 Dim i As Long Dim j As Long '初期シート名を取得。 DefSheetname = ActiveSheet.Name '初期シートの最終列数取得。 LastCol1 = Worksheets(DefSheetname).Range("A1").End(xlToRight).Column 'シート名:レポートの新規シート追加。 Worksheets.Add.Name = "レポート" '初期シートを選択。 Worksheets(DefSheetname).Select '項目名希望順配列格納。 myArray = Array("得意先C", "取引先名1", "製番", "相手管理NO", "品目C", _ "製品名1", "受注数", "受注残数", "納期", "受注単価", _ "受注金額", "出荷数", "出荷金額", "出荷先名1", "郵便番号", "住所1", "TEL", "FAX") '配列要素数分繰り返し処理。 For i = LBound(myArray) To UBound(myArray) '検索用の配列(項目名)格納。 strArray = myArray(i) 'A1:LastCol1範囲で配列(項目名)検索し、番号で返す。 j = WorksheetFunction.Match(strArray, Worksheets(DefSheetname).Range(Cells(1, 1), Cells(1, LastCol1)), 0) 'シート名:レポートに変数jの列数目の値を入力。 Columns(j).Copy 'シート名:レポートの最終列数取得。 LastCol2 = Worksheets("レポート").Range("A1").End(xlToRight).Column 'シート名:レポートを選択。 Worksheets("レポート").Select Range(Cells(1, 1), Cells(1, "LastCol2")).Past Next i End Sub

専門家に質問してみよう