• 締切済み

EXCEL VBA 一致しないデータの抽出及びデータ更新

マスタシートには、各店舗の累積データが入っており、日々データが追加されております。 毎日の作業として、 1.マスタシートを、各店舗別シートにコピーをする。(シート名は店舗コード)*マクロで自動化済 2.各店舗別シートの、特記事項を修正。*手作業 3.修正した行を、マスタシートの対象行に上書き。*手作業 4.修正した行のみ、修正データシートへ貼り付け。*手作業 3と4の手作業を自動化しようと、データの通番(A列)と、特記事項(P列)をキーにして、 Dictionaryを使い、一致しないデータを抽出しようとやってみましたが、 うまくいかず悩んでおります。 データには、通番・店舗コード・店舗名・特記事項などがあります。 何か良い方法があったら、教えて下さい。宜しくお願いします。

みんなの回答

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

こういう仕事関係の(単一課題でない)問題の質問は、簡単な実例でも挙げて説明してもらわないと、回答者が時間をかけて推測して、理解せねばならない。画面も見られず、今始めて考えさせられる事項なんだから。質問する側はその辺考えてほしい。 ーーー まず(本件考えている)シートは2つあります (A)マスターシート(名前は?質問では仮にでもつけること) (B)店舗別シート(シート名は店舗コード) (A)から(B)を点別に振り分けて作成(この作業はVBAで済み) ーー 特記事項という文字情報を、店舗別シートのある列に入力。(どの列?質問では仮にでもつけること)。ここは自動化しようが無い。 ーー 店舗別シートに入れた情報を、マスタに反映させたい。 全店舗入力済み後まとめて転記でいいのですね(バッチ作業) ただマスタには1店舗情報は1行なのか?(この点当然ではない。質問に書くべき) 1行(ユニーク)なら、 シート名(ほかにも店舗コードはシート名内のセルにあるのでは。書くべき。普通はデータはセル値から採る) ーー>マスタの店舗コード行を検索ーー>所定の列・セル(列がどこか?質問には書いてない)に特記事項を代入 で良いのかな ーー >修正した行のみ、修正データシートへ貼り付け 突然>修正データシートというシートが出てきているが、どういうものか。私の当初2シートと思ったのは誤りか。 初めに3シートを問題にしますと書くこと。 ーー >Dictionaryを使い、一 VBScpitなんか勉強したのかな。その点進んでいるのですね。 であれば 店舗シートで決まる店舗コードでFindメソッドでマスタの該当行を(ユニークとして)探せば済むだけの話ではないの。 ーーーー ただ少し長期的に見た場合、 店舗の増加 第2、第3・・の特記事項の追加があったときどう見つけるのかな。 現状の直前状態の店舗シートの状態データでマスタ特記事項部は全部置き換えするのか。 ーー 仕事関連のまとまった1作業を質問を他人に判らせるということが文章では大変だということを再認識のこと。 ====== 色々言ったが 店舗シートで決まる店舗コードで、マスタの店舗コード列を、Findメソッドで、該当行を(ユニークとして)探せば特記事項を転記すべき行がわかるのでは。 実情と私の理解が違う点も含めてコメントください。 例データ 店舗コード 112321 112322 112325 ーー Sub test01() Dim r As Range Set r = Worksheets("Sheet1").Range("A2:A50").Find(112322) MsgBox r.Row r.Offset(0, 2) = "社長ワンマン、優良先" End Sub

ukemochi
質問者

補足

解りづらい質問の仕方をしてしまい、大変に申し訳ありませんでした。 また様々な指摘有難うございます。 詳しく説明させて頂きます。(更にわかりづらくなってしまったらスミマセン) 1.シートは[マスタ]シート、[店舗別]シート、[修正データ]シートの3種類があります。但し、[店舗別]シートというのは店舗数分存在します。 店舗は日々増加している為、[店舗別]シートの数は日々変わります。シート名は、店舗コード(数字6桁)を使用しています。 2.[マスタ]シートの項目は、通番・店舗コード・店舗名・TEL・PCNO・処理結果・特記事項などがあります。 日々実施されている、各店舗のパソコンへのアップデートの処理結果の累積表になっているため、1店舗情報は数行(日数分)存在します。 3.特記事項には、店舗への確認情報を記入しております。 4.店舗数が数十件あるため、[マスタ]シートから、店舗コードごとに抽出をして、店舗コードごとにシートを作り、内容を修正しています。 この後、修正した行のみを、通番(A列)と特記事項(P列)をキーにして、[マスタ]シートの同じ通番に上書きすると共に、[修正データ]シートに修正した行をコピーしたいと思っております。 同じシート内で、A,B列とC,D列を比較し、一致しないデータを抽出し、E,F列に表示するという以下の方法を、ネットでみつけました。 これを応用し、[マスタ]シートのA列(通番)とP列(特記事項)をキーにして、各店舗別シートを1つのシートに纏め、A列(通番)とP列(特記事項)を比較し、一致しないデータの抽出をしようと試みましたが、うまくいかず何か他に良い方法はないかと思い、質問させてもらいました。 説明が長くなってしまい、申し訳ありません。 何か良い方法がありましたら、ご教授願います。 --------------------------------------------------------- Dim v,w,ky,i&,ss$ Dim dic As Object v=Range("A2",Range("A1").End(xlDown)).Resize(,2).Value w=Range("C2",Range("C1").End(xlDown)).Resize(,2).Value Set dic=CreateObject("Scripting.Dictionary") For i=1 To UBound(v) ss=v(i,1) & "|" & v(i,2) dic(ss)=Empty Next For i=1 To Ubound(w) ss=w(i,1) & "|" & w(i,2) If dic.Exists(ss) Then dic.Remove ss End If Next ReDim v(1 To dic.Count,1 To 2) i=0 For Each ky In dic.Keys i=i+1 w=Split(ky,"|") v(i,1)=w(0) v(i,1)=w(1) Next Range("E2").Resize(dic.Count,2).Value=v Set dic=Nothing ---------------------------------------------------------