- ベストアンサー
自動削除処理:エクセルVBAで一致する行を削除する方法
- エクセルVBAを使用して、2つのシート間で一致する行を自動で削除する方法について教えてください。
- 具体的なシートの例として、シート1には「入荷待ち」の情報があり、シート2には「入荷履歴」の情報があります。
- シート2に新しい入荷情報が入力された場合、シート1から一致する行を自動で削除したいです。一致するコードが存在しない場合は削除しないようにしたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「何がどうなったらどうしたい」のかは,回答者じゃなく実際に使うあなたが考えることです。 その意味で 元のご相談: >CommandButton1_Click これはつまり,履歴シートに記載のある範囲(を全部)ボタンクリックしたら処理したいという意図と理解されます。 履歴シートに「処理したい履歴」と[処理しなくてイイ履歴」が混在している,つまりマクロ側で何か仕分け・やるやらないの判断をしなきゃならない(それなら何をどうしたいの?),というお話では全くありませんでしたよね? また >最大行数はCells(Rows.Count, 4)で大丈夫ですか? 「いまアナタが」何をどうしたくてこういうご質問になったのか,イミフメイで回答できません。 ヤリタイ事を変更して,「今記入した履歴をその都度削除したい」というのがホントの事なら,マクロは例えば private sub Worksheet_Change(byval Target as excel.range) dim h as range if application.intersect(target, range("D:D")) is nothing then exit sub ’変更した範囲について行う for each h in application.intersect(target, range("D:D")) if h <> "" then ’コードを検索し削除する worksheets("Sheet1").range("A:A").autofilter field:=1, criteria1:=cells(h.row, "B").value worksheets("Sheet1").autofilter.range.offset(1).entirerow.delete shift:=xlshiftup end if next worksheets("Sheet1").autofiltermode = false end sub といった具合にする事になります。 やることは一緒で,「何(どこ)を」の部分だけ変えてるのが判りますね?同様にして,あなたが実際にヤリタイ事に応じて適切に応用してご利用下さい。 あんまり「やっぱこーでした」「イヤイヤ今度はこうしたいんです」と,あーでもないこーでもないと引っ張られても困りますので,お願いします。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
コードだけチェックすることでいいんですね private sub CommandButton1_Click() dim r as long for r = 2 to range("D65536").end(xlup).row if cells(r, "D") <> "" then ’コードを検索し削除する worksheets("Sheet1").range("A:A").autofilter field:=1, criteria1:=cells(r, "B").value worksheets("Sheet1").autofilter.range.offset(1).entirerow.delete shift:=xlshiftup end if next r worksheets("Sheet1").autofiltermode = false end sub
補足
すばやい回答ありがとうございます。処理的にはそういう事なのですが、 問題はコード履歴が残った場合、シート1(入荷待ち)の行がすべて消えてしまうのです。あくまでも新規入力のみに処理する方法があるのでしょうか? CommandButton1_Click()ではなくシートにコードを入れてWorksheet_Changeすればいいのですか? また、最大行数はCells(Rows.Count, 4)で大丈夫ですか?
お礼
VBAを勉強中で理解不足と内容を整理出来ないままで申し訳ありません。