質問: sheets("sheet2").range("a" & rows.count).end(xlup).row '----sheet2のa5以下が入力されていたらクリアします。 if myrow2 >= 5 then sheets("sheet2").range("a5:p" & myrow2).clearcontents end if '----フィルタオプションの設定で抽出します。 '----元データはsheet1、抽出条件はsheet2のa1:d2、抽出先はsheet2のa4:e4です。 sheets("sheet1").range("a1:f" & myrow1).advancedfilter _ action:=xlfiltercopy, _ criteriarange:=sheets("sheet2").range("a1:d2"), _ copytorange:=sheets("sheet2").range("a4:e4"), _ unique:=false end sub 抽出結果の各セルデータを必要に応じて変更・修正(選出結果を直に)をしそれを元データ に反映(上書き?)させるようなマクロを作成したいです。 どなたかご指導よろしくお願いいたします。 うまく説明できないので画像を添付します。
回答: 質問者のレベルではchangeイベントはちょと難しいかも。。(^^;;; で、sheet2に抽出後、修正データを入れ、 それが正しいかどうか確認した後に、sheet1へ転記する方がいいかも。 '------------------------------------------------ sub 更新() dim r1 as long dim r2 as long for r2 = 5 to sheets("sheet2").cells(rows.count, "a").end(xlup).row for r1 = 2 to sheets("sheet1").cells(rows.count, "a").end(xlup).row if sheets("sheet1").cells(r1, "a") = sheets("sheet2").cells(r2, "a") and _ sheets("sheet1").cells(r1, "b") = sheets("sheet2").cells(r2, "b") and _ sheets("sheet1").cells(r1, "d") = sheets("sheet2").cells(r2, "c") then sheets("sheet1").cells(r1, "e") = sheets("sheet2").cells(r2, "d") sheets("sheet1").cells(r1, "f") = sheets("sheet2").cells(r2, "e") exit for end if next r1 next r2 end sub '------------------------------------------- 一行のコードが長くなるのでrangeのvalueプロパティは省いてあります。 それから処理の流れには関係ないことですが、 シートを扱うために変数を使うとコードが短くすっきりなります。 dim ws1 as worksheets set ws1 = worksheets("sheet1") 最初でこのようしておくと、 以後、worksheets("sheet1")の代わりにws1を使えるということです。 以上です。