• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:値を入力したら一致する別シートの行を自動削除)

自動削除処理:エクセルVBAで一致する行を削除する方法

このQ&Aのポイント
  • エクセルVBAを使用して、2つのシート間で一致する行を自動で削除する方法について教えてください。
  • 具体的なシートの例として、シート1には「入荷待ち」の情報があり、シート2には「入荷履歴」の情報があります。
  • シート2に新しい入荷情報が入力された場合、シート1から一致する行を自動で削除したいです。一致するコードが存在しない場合は削除しないようにしたいです。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.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 といった具合にする事になります。 やることは一緒で,「何(どこ)を」の部分だけ変えてるのが判りますね?同様にして,あなたが実際にヤリタイ事に応じて適切に応用してご利用下さい。 あんまり「やっぱこーでした」「イヤイヤ今度はこうしたいんです」と,あーでもないこーでもないと引っ張られても困りますので,お願いします。

mhide733
質問者

お礼

VBAを勉強中で理解不足と内容を整理出来ないままで申し訳ありません。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

コードだけチェックすることでいいんですね 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

mhide733
質問者

補足

すばやい回答ありがとうございます。処理的にはそういう事なのですが、 問題はコード履歴が残った場合、シート1(入荷待ち)の行がすべて消えてしまうのです。あくまでも新規入力のみに処理する方法があるのでしょうか? CommandButton1_Click()ではなくシートにコードを入れてWorksheet_Changeすればいいのですか? また、最大行数はCells(Rows.Count, 4)で大丈夫ですか?