• 締切済み

【excelマクロVBA】表の集計・転記マクロの改造点について

以前、こちらのカテゴリーで重複をチェックしてその行を削除し表を整頓するマクロとしてプログラムを教えて頂きました。    (資材受け入れシート)  →   (Sheet2) 受入日 品名  Lot  数量   受入日 品名  Lot  数量   7/7   A  BNR32  10    7/8   A  BNR32  15   7/8   A  BNR32  5    7/10   B  SW200  14   7/10   B  SW200  2 →  7/7   B  AE860  4   7/7   B  AE860  4    7/9   C  GD300  11   7/8   B  SW200  12    7/7   C  DC200  7   7/9   C  GD300  10   7/7   C  GD300  1   7/7   C  DC200  7 プログラムの内容は、 Sub test()   Dim strSql As String   Dim cnXL As Object   Dim rsXL As Object   Const adOpenForwardOnly = 0        Sheets("資材受け入れシート").Range("A1:D1").Copy   Sheets("資材受け入れシート").Paste Destination:=Worksheets("Sheet2").Range("A1:D1")   Application.CutCopyMode = False      Set cnXL = CreateObject("ADODB.Connection")   Set rsXL = CreateObject("ADODB.Recordset")   With cnXL     .Provider = "MSDASQL"     .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _     "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;"     .Open   End With   strSql = "select max(受入日) as 日付,品名,Lot,sum(数量) as 合計" _         & " from [資材受け入れシート$]" _         & " group by 品名,Lot order by max(受入日),品名,Lot"      Debug.Print strSql   rsXL.Open strSql, cnXL, adOpenForwardOnly   Worksheets("sheet2").Cells(2, 1).CopyFromRecordset rsXL   Worksheets("sheet2").Columns("A:A").NumberFormatLocal = "m/d"      rsXL.Close: Set rsXL = Nothing   cnXL.Close: Set cnXL = Nothing   MsgBox "Sheet2に出力しました" End Sub と記述されており、正常に動作いたしました。 ところが、会社から受入日,品名,Lot,数量だけでなく、納入業者,賞味期限,担当者の項目(列)を追加し転記できるように欲しいと命じられました。業務の都合上、列の順番は受入日,<納入業者>,品名,Lot,<賞味期限>,数量,<担当者>の順番で挿入し、追加した3項目については計算させる必要は無く、転記だけさせたいと考えています。上のプログラムを元に改造を試みたのですが、転記が上手くできません。どこの部分にどのように記述・変更したら良いのかが分りません。どなたかご存知の方、お教え願えませんでしょうか?表の作成までにもう少しというところで躓いてしまい頭を悩ませております。初歩的な質問かもしれませんが、宜しくお願い致します。

みんなの回答

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.4

(#2補足へのレスです) >ピボットテーブルも試させていただきましたが、無事動きました。 あら♪良かったです。結構便利ですよ^ ^ データ量が増えても、ピボット右クリック[データの更新]で対応できますし。 >しかし、ピボットテーブル上では行削除できないのと... おっしゃるとおりです。 ですので 『そこから別シートにでもコピーして体裁を整えれば良いかと。』と書いたわけです。 以下コードは、できたピボットテーブルがあるシートをアクティブにして実行してください。 Sub sample2()   '例のピボットがあるシートを選択して実行   If ActiveSheet.PivotTables.Count > 0 Then     With ActiveSheet.PivotTables(1).TableRange1       Intersect(.Cells, .Offset(1)).Copy     End With     Sheets.Add     Range("A1").PasteSpecial xlPasteValues     Application.CutCopyMode = False     With Selection.Columns("A:B").Resize(Selection.Rows.Count - 1)       .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"       .Value = .Value     End With     Selection.Columns("E:F").NumberFormat = "yy/mm/dd"   Else     MsgBox "no table"   End If End Sub 新規シートにピボットデータを値で貼り付けて、項目の空白を埋めます。 これでできたデータは自由に加工できます。 もうひとつ。 >表の1行と3行の間の空白行は削除すること(項目とデータを詰める)はできないのでしょうか? 推測ですが、"資材受け入れシート"のデータがない範囲にゴミがあるのかも。 [Ctrl]キー+[End]キー同時押しでどこが選択されますか? データ最終行の次から、その行選択して、行削除してみてください。

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

SQLのことが勉強できて無い方に、SQL回答がでて、質問者が採用したのも問題があると思うが、いまさら頭を混乱させてもすまない、と思うが、参考までにエクセルのシートだけで処理するVBAを載せます。私の好きなソート法です。 コメントを詳しく入れたので、どういう理屈になっているか、分かれば、判りやすい方法と、手前味噌をつけておきます。 Sheet1が原データシート名、結果はSheet2に出ます。第1行目の 見出しは貼り付けてください(手抜き)。A列は日付書式に設定してください(手抜き)。 項目が増えたら、j=1 to 5の5を(2箇所)とソートの範囲を増やしてください。E列は連番を手作業で振りました。元の順に戻すためです。 ーー VBEの標準モジュールに Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") '-- d = sh1.Range("A65536").End(xlUp).Row sh1.Range("A2", sh1.Cells(d, "E")).Sort key1:=sh1.Range("C2"), order1:=xlAscending '--開始前処理 m = sh1.Cells(2, "C") t = sh1.Cells(2, "D") k = 2 '第2行から書き出し '--最初行書き出し For j = 1 To 5 'A-E行について sh2.Cells(k, j) = sh1.Cells(2, j) '各列書き出し Next j '-- For i = 3 To d If sh1.Cells(i, "C") = m Then '合計に加算だけ t = t + sh1.Cells(i, "D") 'D列を足しこみ Else '--書き出し sh2.Cells(k, "D") = t '合計を書き出し '--行を進めて、本件を書き出し(D列は取り合えず仮に) k = k + 1 '書き出し次行をポイント For j = 1 To 5 'A-E行について sh2.Cells(k, j) = sh1.Cells(i, j) '本件各列書き出し Next j t = 0 '小計ご破算 t = t + sh1.Cells(i, "D") '本件足しこみ m = sh1.Cells(i, "C") '本件をキーに設定 End If Next i '--終了 sh2.Cells(k, "D") = t '合計を書き出し '--元の順に並べ替え sh1.Range("A2", sh1.Cells(d, "E")).Sort key1:=sh1.Range("E1") sh2.Range("A2", sh2.Cells(k - 1, "E")).Sort key1:=sh2.Range("E1") End Sub

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.2

あら?^ ^; 順番間違ってましたね。失礼orz strSql = "select max(受入日) as 日付,納入業者,品名,Lot," _     & "max(賞味期限) as 日付2,sum(数量) as 合計,担当者" _     & " from [資材受け入れシート$]" _     & " group by 納入業者,品名,Lot,担当者 order by max(受入日),品名,Lot" もし現状のコードをお使いになられるなら、データ量にもよりますが、 繰り返し処理する場合のメモリエラーに気をつけるようにしてください。 BUG: Memory leak occurs when you query an open Excel worksheet by using ActiveX Data Objects (ADO) http://support.microsoft.com/kb/319998/ja 開いているxlsBookに対して処理する時の現象なので、 元データは別Bookにして閉じておいたほうが良いかもしれません。 また、今後の理解のためには、ADO や SQL をキーワードに検索して調べられると良いと思います。 VBAからの扱いは、下記が参考になると思います。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130.html

MC28SP
質問者

補足

お忙しいところ、ご回答ありがとうございました。 pauNed様のANo.1を元に無い頭を使っていろいろ試したのですが、結局できませんでした。ピボットテーブルも試させていただきましたが、無事動きました。しかし、ピボットテーブル上では行削除できないのと、ピボットテーブルのコピペ(値)をした時に空白セル(項目が集約された部分)ができてしまうのでこれでは・・・と悩んでいたところでした。在庫表を作成する上で「数量」項目部分で0(その品名がもう存在しない場合)が転記された場合、その行を削除しようと考えています。ANo.2でお答え頂いたコードで無事転記できました。ありがとうございます。質問とは関係無いのですがこのプログラムで転記された表の1行と3行の間の空白行は削除すること(項目とデータを詰める)はできないのでしょうか?もしご存知でしたらお教え願います。

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.1

こんにちは。 >strSql = "select max(受入日) as 日付,品名,Lot,sum(数量) as 合計" _ >    & " from [資材受け入れシート$]" _ >    & " group by 品名,Lot order by max(受入日),品名,Lot" ここを strSql = "select max(受入日) as 日付,品名,納入業者,Lot," _     & "max(賞味期限) as 日付2,sum(数量) as 合計,担当者" _     & " from [資材受け入れシート$]" _     & " group by 品名,納入業者,Lot,担当者 order by max(受入日),品名,Lot" >Worksheets("sheet2").Columns("A:A").NumberFormatLocal = "m/d" ここを Worksheets("sheet2").Range("A:A,E:E").NumberFormatLocal = "m/d" ...などと変えたらできるかもしれません。 ただ、現状のシート状態と集計条件が今ひとつ不明確なためよくわかりません。 それにしても、メンテナンスできないと意味がないのではないでしょうか? 業務に使うのであれば、集計結果には自信を持って提出しないと? 自分で理解しておかないと不安じゃないですか? データの集計条件によっては、今できている集計結果に、 作業列を使ってでも、VLOOKUP関数で追加項目をひっぱってきて、 列並び替えで対応できそうですけど。 そこぐらいは手作業でもできませんか? あと、一般機能の[名前定義]と[ピボットテーブル]をうまく使って 集計できそうな気もします。 以下『一例』(項目名称によってはうまくいかない場合もあります) Sub sample1()   Dim v, vi      v = Array("納入業者", "品名", "Lot", "担当者")   With ActiveWorkbook     .Names.Add Name:="database", _           RefersTo:="=offset(資材受け入れシート!$A$1,0,0,counta(資材受け入れシート!$A:$A),7)"     With .PivotCaches.Add(SourceType:=xlDatabase, _                SourceData:="database") _                .CreatePivotTable(TableDestination:="")       .AddFields RowFields:=v, ColumnFields:="データ"       For Each vi In v         .PivotFields(vi).Subtotals(1) = False       Next vi       For Each vi In Array("受入日", "賞味期限")         With .PivotFields(vi)           .Orientation = xlDataField           .Caption = vi & "_"           .Function = xlMax           .NumberFormat = "yy/mm/dd"         End With       Next vi       With .PivotFields("数量")         .Orientation = xlDataField         .Caption = "数量_"         .NumberFormat = "#,##0"       End With     End With   End With End Sub 手作業でできる事をコード化したものです。 これでうまくいくようなら、ピボットテーブルができますから、 そこから別シートにでもコピーして体裁を整えれば良いかと。 (データが増えても[更新]だけで集計し直せるテーブルです)

関連するQ&A

  • 【excelマクロ】重複データをチェックしてその行を削除・表を集計して整頓するマクロ

    MC28SP 会社で資材の在庫管理表を作成しているのですが、大変困っております。 マクロ初心者で技術不足なのでどうかご教授願います。 「資材受け入れシート」として、下の表があります。    1   2   3  4  受入日 品名  Lot  数量   7/7   A  BNR32  10   7/8   A  BNR32  5   7/10   B  SW200  2   7/7   B  AE860  4   7/8   B  SW200  12   7/9   C  GD300  10   7/7   C  GD300  1   7/7   C  DC200  7 これを2列目「品名」をキーとして「Lot」を確認し、同じ(つまり同じ物)であればその行を削除して、数量を加算して1行にまとめるマクロを作りたいのです。ポイントは(1)2列目「品名」の重複確認のみで行削除ではなく、3列目「Lot」も確認する必要があることと、(2)削除してからその「品名」がある行に削除した「数量」分加算しなくてはいけないことだと考えているのですが・・・。   1   2   3  4  受入日 品名  Lot  数量   7/8   A  BNR32  15   7/10   B  SW200  14   7/7   B  AE860  4   7/9   C  GD300  11   7/7   C  DC200  7 「受入日」の所はできれば最終日になれば良いかなと思っています。 会社で期限を決められているのですが、手こずってしまい前へ進みません。説明が分かりづらいかもしれませんが、どうか宜しくお願い致します。

  • 【excelマクロ】重複をチェックしてその行を削除・表を整頓するマクロ

    会社で資材の在庫表を作成しているのですが、大変困っております。 マクロ初心者で技術不足なのでどうかご教授願います。 「資材受け入れシート」として、下の表があります。    1   2   3  4  受入日 品名  Lot  数量   7/7   A  BNR32  10   7/8   A  BNR32  5   7/10   B  SW200  2   7/7   B  AE860  4   7/8   B  SW200  12   7/9   C  GD300  10   7/7   C  GD300  1   7/7   C  DC200  7 これを2列目「品名」をキーとして「Lot」を確認し、同じ(つまり同じ物)であればその行を削除して、数量を加算して1行にまとめるマクロを作りたいのです。ポイントは2列目「品名」の重複確認のみで行削除ではなく、3列目「Lot」も確認する必要があることと、削除してからその「品名」がある行に削除した「数量」分加算しなくてはいけないことだと考えております。   1   2   3  4  受入日 品名  Lot  数量   7/8   A  BNR32  15   7/10   B  SW200  14   7/7   B  AE860  4   7/9   C  GD300  11   7/7   C  DC200  7 「受入日」の所はできれば最終日になれば良いかなと思っています。 会社で期限を決められているのですが、手こずってしまい前へ進みません。説明が分かりづらいかもしれませんが、どうか宜しくお願いいたします。

  • エクセル VBA SQL 開始行の指定

    namatyu MC285Pさんの質問からの解答を利用させていただいて、会社の履歴表を作成しましたが、訳あって、(資材受け入れシート)側の開始行をA1からA2に変えた所、「パラメータがすくなすぎます。14を指定してください」と出てしまいます。 Sheets("資材受け入れシート").Range("A1:D1").Copyを Sheets("資材受け入れシート").Range("A2:D2").Copyに変えても解決しません… SQL文が勉強不足で、変更場所が分かりません   1   2   3  4  受入日 品名  Lot  数量   7/7   A  BNR32  10   7/8   A  BNR32  5   7/10   B  SW200  2   7/7   B  AE860  4   7/8   B  SW200  12   7/9   C  GD300  10   7/7   C  GD300  1   7/7   C  DC200  7 Sub test()   Dim strSql As String   Dim cnXL As Object   Dim rsXL As Object   Const adOpenForwardOnly = 0         Sheets("資材受け入れシート").Range("A1:D1").Copy   Sheets("資材受け入れシート").Paste Destination:=Worksheets("Sheet2").Range("A1:D1")   Application.CutCopyMode = False      Set cnXL = CreateObject("ADODB.Connection")   Set rsXL = CreateObject("ADODB.Recordset")   With cnXL     .Provider = "MSDASQL"     .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _     "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;"     .Open   End With   strSql = "select max(受入日) as 日付,品名,Lot,sum(数量) as 合計" _         & " from [資材受け入れシート$]" _         & " group by 品名,Lot order by max(受入日),品名,Lot"      Debug.Print strSql   rsXL.Open strSql, cnXL, adOpenForwardOnly   Worksheets("sheet2").Cells(2, 1).CopyFromRecordset rsXL   Worksheets("sheet2").Columns("A:A").NumberFormatLocal = "m/d"      rsXL.Close: Set rsXL = Nothing   cnXL.Close: Set cnXL = Nothing   MsgBox "Sheet2に出力しました" End Sub 色々、試したのですが、分かりません… すいませんが、どたたか教えてください、お願いします。

  • Excel マクロ 値の転記

    Excel マクロ 値の転記 Sheet2をSheet1に転記したいのですが、A列だけは3回同じ値を転記 するのには、※をどのように変えたらいいのでしょうか? 宜しくお願い致します。 〔Sheet1〕転記先 A  B あ  10 あ  20 あ  30 い  40 い  50 〔Sheet2〕転記元 A  B あ  10 い  20 う  30 え  40 お  50 Sub テスト() Dim i As Long For i = 1 To 30    '↓※ココをどう書いて良いのかが分かりません Worksheets("Sheet1").Cells(i, "A") = Worksheets("Sheet2").Cells(i, "A") Worksheets("Sheet1").Cells(i, "B") = Worksheets("Sheet2").Cells(i, "B") Next i End Sub

  • VBA マクロ シート 転記

    はじめまして。VBA初心者です。今シート1のA列1行目セルにA社、A列2行目にB社、A列3行目にC社と・・ざっと1000行程あり、それぞれB列には値があります。この値をシート2のB列に転記したいと思っています。ただ、毎月シートを追加していきますので、左隣のシートから転記しなければなりません。シート2の項目は同じA列とB列で構成されています。A列の値が多少前後するので、FINDを使って以下のようなプログラムを作りました。ただ、左隣のシートから転記とう内容をどうやって追加したら良いのかがわかりません。Previous をどこかに使えばできるのかなとも思うのですが、その方法がわかりません。 Sub 転記() Dim ws As Worksheet, ws1 As Worksheet, r As Range, r1 As Range Dim LastRow As Long, i As Long, er As Long, wkey As String Set ws = Worksheets("Sheet1") Set ws1 = Worksheets("Sheet2") LastRow = ws.Range("A1").End(xlDown).Row er = ws1.Range("A1").End(xlDown).Row Set r = ws.Range("A1:A" & LastRow) For i = 1 To er wkey = ws1.Range("A" & i) Set r1 = r.Find(What:=wkey, LookIn:=xlValues, LookAt:=xlWhole) If Not r1 Is Nothing Then ws1.Range("B" & i) = r1.Offset(, 1) End If Next Set r1 = Nothing Set r = Nothing Set ws = Nothing Set ws1 = Nothing End Sub どなたか詳しいお方いらっしゃいましたら、初心者の私に教えて頂けませんでしょうか?宜しくお願いします。

  • Excel2007 VBA 転記について

    ご指導のほどお願いします。 見積書からボタン300をクリックするとFAX送付状(テンプレート).xlsに下記内容が転記するように書いたのですが、質問させてください。 ("見積書").Range("c6")→("Sheet1").Range("e14")に貼り付けはうまく行きますが 本当は("見積書").Range("c6")&("見積書").Range("c8")=&"の件"を("Sheet1").Range("e14")に貼り付けしたいのです。 C6セル「○○○工場」 C8セル「○○○作業」 の件 ↑をE14セルに「○○○工場 ○○○作業の件」 として貼り付けたいです。 Sub ボタン300_Click() Workbooks.Open "\FAX送付状\FAX送付状(テンプレート).xls" ThisWorkbook.Worksheets("見積書").Range("a4").Copy Workbooks("FAX送付状(テンプレート).xls").Worksheets("Sheet1").Range("f6").PasteSpecial Paste:=xlPasteValues ThisWorkbook.Worksheets("見積書").Range("i8").Copy Workbooks("FAX送付状(テンプレート).xls").Worksheets("Sheet1").Range("AD9").PasteSpecial Paste:=xlPasteValues ThisWorkbook.Worksheets("見積書").Range("c6").Copy Workbooks("FAX送付状(テンプレート).xls").Worksheets("Sheet1").Range("e14").PasteSpecial Paste:=xlPasteValues  ActiveSheet.Range("F9").Value = Date End Sub ご指導のほどお願いします。

  • VBA転記について教えて下さい

    200件位のデータがあるとします。顧客情報AB・商品C~AY 氏名 性  青森りんご 長野りんご みかん バナナ 送料 AA  男   1             2      100 BB  女          1            100 CC  男                   3     0 このデータを別シートAにはりんごと送料 別シートBにはそれ以外のデータに分けたいのです。 シートA 氏名 性  青森りんご 長野りんご  送料 AA  男   1           100 BB  女        1    100 CC  男 シートB 氏名 性  みかん バナナ AA  男    2 BB  女 CC  男       3 こんな感じです。 色々参考にして作成しましたがうまくいきませんでしたので 教えて欲しいです。 よろしくお願いします。 エクセルは2002です。 1、項目名の転記でデータは200位ですが変動があるので最終行で作成したら うまくいきませんでした。 2、データ域の転記が動きません。 Sub サンプル() Dim i As Long Dim lastRow As Long Dim lastcolumns As Long Dim S1 As Worksheet, S2 As Worksheet, S3 As Worksheet Dim myColumns As Long Dim myKey As String Set S1 = Worksheets("データ") Set S2 = Worksheets("りんご") Set S3 = Worksheets("その他") ' Sheet1の最終行を取得 lastRow = S1.Range("A" & Rows.Count).End(xlUp).Row ' Sheet1の最終列を取得 lastcolumns = S1.Cells(1, Columns.Count).End(xlToLeft).Column ' 項目名の転記 S2.Range("A1:B200").Value = _ S1.Range("A1:B200").Value S3.Range("A1:B200").Value = _ S1.Range("A1:B200").Value 'データ域の転記 For i = 2 To lastcolumns myKey = S1.Cells(1 & i).Value If myKey <> "" Then myColumns = Worksheets(myKey).Cells(1, Columns.Count).End(xlUp).Columns + 1 S1.Range(S1.Cells(1, i), S1.Cells(lastRow, i)).Copy _ Worksheets(myKey).Range(Cells(1, myColumns), Cells(lastRow, myColumns)) End If Next i End Sub

  • 2つのBook間で共通のキーワードを使いデータを転記するには?

    下記のようなデータがある場合、Book1/sheet1のD列へ Book2/sheet1 C列のデータを転記したい。キーワードは 各Book B列のロットNO.です。どのようなマクロを 組めばいいのでしょうか? Book1/sheet1    A    B    C    D 1  品名 ロットNO. 数量 2  A   A123   25   50(転記) 3  A   A234   20   75(転記) 4  A   A345   22   60(転記) ・ Book2/sheet1    A    B    C    D 1  品名 ロットNO. 時間(HR) 2  A   A123    50 3  A   A234    75 4  A   A345    60 ・

  • マクロ 値の転記 再度

    マクロ 値の転記 再度 昨日はkyboさんに解答を頂き大変助かりました。 ありがとうございました。 教えて頂いたコードを別のマクロでも活用しよう思ったのですが どのように改変していけばいいのかまた悩んでいます。 度々で申し訳ありませんが、どなたか宜しくお願い致します。 やりたいこと 転記元のBに0以外の数字が入っている場合、転記先のA列に 同じ値を常に5回転記させたい。 "あ"を5回転記→1行あける→"う"を5回転記→(続く・・・) ★Sheet1 転記先(7行目から転記したい)   A ------------------- 7 あ 8 あ 9 あ 10 あ 11 あ -------------------- 12 空行 -------------------- 13 う 14 う 15 う 16 う 17 う -------------------- 18 空行 -------------------- 19 以下 5つの纏まりの枠が300行位まで続く ★Sheet2 転記元(5行目からデータがある)   A    B -------------------- 5 あ 6 あ 7 あ計  100 -------------------- 8 空行 -------------------- 9 い 10 い 11 い 12 い計  0 -------------------- 13 空行 -------------------- 14 う 15 う 16 う 17 う計  500 -------------------- 18 空行 19 (以下、続く) Sub テスト() Dim i As Long '転記元のデータ開始行は5行目 For i = 5 To 300  '転記元のB列が0以外  If Worksheets("転記元").Cells(i, "B") <> 0 Then    Worksheets("転記先").Cells((i - 1) * 5 + 1, "A").Resize(5) _ = Worksheets("転記元").Cells(i, "A")  End If Next i End Sub

  • エクセルVBA データの転記に関して質問です

    在庫管理の為に以下の通りに作成をしています。 (1)シート1からシート2へデータを転記したい。 (2)シート1からシート2へデータを転記した時シート2にはデータが蓄積されていきます (3)シート1のコピー範囲には空白のセルが含まれています。 (4)シート1の空欄の一部は数式による空白があります。 シート1 C8入庫年月日 C9伝票番号 C10品名 C11品番 C12単位 C13数量 C14単価 C15金額 C16入荷先 C17備考 シート2 C4入庫年月日 C5伝票番号 C6品名 C7品番 C8単位 C9入庫数量 C10単価 C11金額 C12入荷先 *C17は転記しません。 以下のとおりに記述しました。 Dim ab As Long Dim cd As Long Range("C9:k18").Copy Sheets("1").Select Cells(Rows.Count, 3).End(xlUp).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=True, Transpose:=False ab = Range("H" & Rows.Count).End(xlUp).Row For cd = ab To ab + 10 Step 1 If ActiveSheet.Cells(cd, 8) = "" Then Rows(cd).Delete shift:=xlUp End If Next cd Sheets("2").Select Application.CutCopyMode = False Range("e6").Select End Sub この記述で実行すると、1度目の転記はうまくいくのですが2回目の転記をしたときに空白行が入り、空白行の下に2回目の転記が行われてしまいます。 どうしたら空白行を無視して2回目の転記がうまくいくでしょうか? VBA初心者です。よろしくお願いします。

専門家に質問してみよう