アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのマクロで検索・抽出したデータを修正及び更新して元データに反映させたい。

Sheet1に元データが行単位で入力されています。。
  A   B    C    D    E F
1 日付顧客名契約料担当回収日回収金額
2
3
|
50

Sheet2で複数条件でフィルタオプションをマクロで実行し結果を表示ています。
  A    B    C   D    E
1 日付~ 日付マデ 顧客名 担当者
2 1/1   2/28     高橋      --------->検索条件
3
4 日付顧客名担当回収日回収金額
5 -------------------------------------->抽出結果
6 -------------------------------------->抽出結果
7 -------------------------------------->抽出結果

マクロは下記の通りです。

Public Sub 検索()
Dim myRow1 As Long, myRow2 As Long
'----Sheet1とSheet2のA列で最終行を捜します。
myRow1 = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
myRow2 = 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

抽出結果の各セルデータを必要に応じて変更・修正(選出結果を直に)をしそれを元データ
に反映(上書き?)させるようなマクロを作成したいです。

どなたかご指導よろしくお願いいたします。

うまく説明できないので画像を添付します。

「エクセルのマクロで検索・抽出したデータを」の質問画像

A 回答 (2件)

質問者のレベルでは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を使えるということです。

以上です。
 
    • good
    • 1
この回答へのお礼

お礼が遅くなり申し訳ございません。
大変参考になりました。

ありがとうございます。

お礼日時:2010/10/21 17:00

シート2の検索結果を表示させる際に元の表の何行目かを同時に表示させるようにします。


シート2で変更した場合にはPrivate Sub Worksheet_Change(ByVal Target As Range) で変更されたデータのある行での元の表の行を求めて元の表のデータを変更するようにすればよいでしょう。

この回答への補足

ご回答ありがとうございます。
なにぶん初心者なので・・・

具体的に検索表示と更新するためのマクロを教えていただけないでしょうか?

よろしくお願いいたします。

補足日時:2010/10/15 14:21
    • good
    • 3
この回答へのお礼

ありがとうございます。

お礼日時:2010/10/15 14:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A