• 締切済み

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

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

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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 ---------------------------------------------------------

関連するQ&A

  • VBAを使った、Excelでのシート間データ抽出

    はじめまして。みなさまどうか教えてください。 Sheet1にはA列に250行程、コードが存在します。 Sheet2にはA列(コード)からI列まで、そして1000行程データが存在します。 Sheet1にあるコードは重複はなく、Sheet2のコード内に必ず同じコードがあります。 Sheet2にも重複コードはありません。 そこでSheet1のコードを使い、Sheet2を検索し、同一コードのデータ(A列からI列の行すべて)を全て(250件分)、Sheet1のコード記載順(A1、A2、A3・・・・)で、Sheet3に抽出したいのです。 どうか、よろしくお願いします。

  • 【エクセル】マスターから条件一致の全データ抽出

    質問させていただきます。 バージョンは2003です。 一つのBOOK内に、マスターデータsheet(以下、マスター)が一つあります。2sheet目以降は同じフォーマットで個人毎の区分でsheet分け(以下、個人シート)しており、マスターから個人名にてデータを抽出し、個人シートに一覧表を作成したいと考えております。またレギュレーションとしては、BOOKを開いた時には自動で計算されていることです。 いろいろな関数で試しても構築できずに困っております。 またVBAについては完全に素人ですが、領域的にはVBAであろうと覚悟はしております。 関数でもVBAでも構いません。何卒ご教授くださいませ。 よろしくお願いいたします。 ■マスターデータ  A   B   C    1鈴木 商品1 外注1 2山田 商品2 外注2 3田中 商品3 外注3 4鈴木 商品4 外注1 5鈴木 商品5 外注3 例えば“鈴木用”個人シートであれば、1,4,5行にある3データを個人シート上に一覧表として表示させたいです。 参考までに情報量としては、マスターデータでは29列×3000行。個人シートは100シート程度あります。 よろしくお願いいたします。

  • excel VBA について

    画像のようにexcelファイルのD列に自動で通番を入力させたい。 フォームを利用して新しいデータは最終行に反映するように設定しています。 できれば、フォームの登録を押した時点でD列最終行に画像条件にあう通番を入力させたいのですがどうすればいいかわかりません。 今は、D列セルにCOUNTIFを使って条件を検索して通番を表示させているのですが、日々行が増え続けるためファイルが非常に重たくなってきたのでマクロにチャレンジしました。 マクロの知識はほとんどありません! よろしくお願いします。

  • EXCEL VBA データ抽出について

    ユーザーフォームを利用して、データの管理を行なっております 各データには、コードを設定しており 検出時に利用しています フォームでコードを入力する際には 前半(年・月) 後半(No.)で2か所に分けて入力しており 以下、コード前半⇒ コード1     コード後半⇒ コード2  ・・・としておきます シートへの転記も、コード1はA列・コード2はB列に分けて書き込んでいます 以下は、コードからデータを検出し、その内容をテキストボックスへ表記するように 書いたコードですが、コード1のみでの検索になっております コード2をどのように組み込めばいいのか、わからずとても困っています。 シート名 AllDate コード1 TextBox36    (A列) コード2 TextBox37    (B列) 1行目は項目名になっており、2行目からデータが蓄積されています。 また新規で登録した場合には、空欄最下部へフォームからシートへ転記されるように設定しています   ============================ Worksheets("AllDate").Activate Dim i As Long, kb As String If TextBox36.Text = "" Then MsgBox "検索する番号を入力してください" Exit Sub End If For i = 2 To Range("A1").CurrentRegion.Rows.Count If Cells(i, 1).Text = TextBox36.Text Then kb = TextBox36.Text Exit For End If Next If kb = "" Then MsgBox "指定した番号はありません" Exit Sub Else Call ReadRecord(kb) End If TextBox36.Text = "" TextBox37.Text = "" End Sub Sub ReadRecord(kb As String) Dim rw As Long Set kRange = Range("A1").CurrentRegion.Columns(1).Find(What:=kb, LookAt:=xlWhole) If kRange Is Nothing Then MsgBox "データがありません" Exit Sub End If rw = kRange.Row TextBox1.Text = Cells(rw, 1).Value TextBox2.Text = Cells(rw, 2).Value TextBox3Text = Cells(rw, 3).Value TextBox4.Text = Cells(rw, 4).Value =============================== また自分なりにも何とか模索しており、フィルターを使う方法も考えておりますが 何分まだまだ初心者LVの為、 こちらも難航しております。 フィルタを使用する場合 TextBox36の値で、A列にて抽出 抽出されたデータから、さらに TextBox37の値で、B列にて抽出 重複データは存在しないので、A2行へ常に1件のデータが残り それをセル指定で、テキストボックスへ転記さようと考えています。 また、修正⇒上書き作業も必要なので フィルタで抽出したデータをテキストボックスへ表示させ 修正後、同様にA2行へ書き込み その後、フィルター解除がいいのかな?と思っています。 長々となり恐縮なのですが 方法のオススめ コードのご教授など お力をお貸しいただけないでしょうか? よろしくお願いいたします!!

  • Excelでシート間のデータの抽出方法

    1つのブックに集計用のシートと、A店、B店、C店という各店舗別の売上シートがあります。 Sheet集計用のA1にA店のコード(A店は001、B店は002というようなコード)を入れると、Sheet集計用のB列の上期売上、C列の下期売上にSheetA店のB列の上期売上、C列の下期売上のデータが入るようにすることは可能でしょうか? Sheet集計用のA1のコード変更することによってデータを引っ張ってくるシートが変わる様にしたいということなんですが、Excelでどのようにすればいいかわかりません。 各店舗のシートのA1のセルにも、その店舗のコードが入力されています。

  • エクセル人事データの行の削除・抽出

    莫大な人事データがあります。A列には部門コード10桁 B列には部署名1 C列には部署名2 D列には名前・・・基本給・手当・住所・連絡先等々列だけでも100はあります。行は個人別に並んでおり、名前は重複しませんが、部門コードは重複します。 10005500 財務 10005550 人事 10006000 総務 といった形でデータマスターは完成させました。部署も300ほどあるので、オートフィルタで行を抽出することは困難に近いです。チェックボックスをクリックしまくるのは億劫とミスの元です。 さて、そんなデータがあるなか、シート2に部門コード表を作成し、シート1のマスターのうち部門コードに該当する列だけを抽出したいのです。 難なく使える機能はLOOKUP関数、条件付き書式、フィルタ、条件書式などです。 大量の複数条件を指定して、マスターをいじることはできますか。 よろしくお願いいたします。

  • 【エクセル】リストと一致するデータを抽出し、文字に色をつけることは可能でしょうか?

    エクセルで作成したファイルの【シート1:表】に様々なデータを打ち込んでおり、【シート2:リスト】にはリスト一覧を入れています。 シート1の表で、リストと該当する文字列だけに色をつけることは可能でしょうか。表はこのような感じです。 【表】   A列    B列 1 りんご   apple 2 りんごを食べる eat an apple 3 みかん     orange 4 みかんを買う  get an orange 【リスト】   A列       B列 1 りんご     apple 2 みかん     orange このような表なのですが、例えば、1行目、3行目はリストと同じなので赤い文字で表示し、A2のセルの「りんごを食べる」の「りんご」とB2セルの「eat an apple」の「apple」、またA4セルの「みかんを買う」の「みかん」と「get an orange」の「orange」の文字列だけを赤字にするようなことは可能でしょうか。 少量のデータなら手作業で変更できるのですが、データが大量にあるため手作業では追いつかず困っています。どなたかご存知の方がいらっしゃいましたら、よろしくお願いいたします。

  • エクセルでデータ検索(抽出)ファイルを作成したい

    エクセルでわからない事があり投稿させて頂きました。 各店の在庫データをシート2.シート3.シート4へ貼り、 シート1に商品コードを入力する欄を作り、入力したコードの商品在庫が各店舗ごとに表示されるファイルを作成したいと思ってます。 (検索したコードの商品在庫数量をシート1のC列に表示させわかりやすくしたいです) 在庫データのファイルはC列に商品コード/F列に在庫数量が記載されており、商品コードでひっかかった行のF欄の数値をシート1のC列に出せるようにしたいのですが可能でしょうか? 過去ログは確認してみたもののわからず・・・ 可能かどうか教えて頂けると幸いです。

  • エクセル関数について教えてください

    sheet1にはA列にコード番号が入力されており、B列にグループごとの通し番号、C列にグループ名が表示されています。 そこからsheet2にC列グループ名とB列通し番号から検索し、A列コード番号が抽出されるようにしたいのですが、やり方が解りません。 どなたかご教授お願いします。 Sheet1                   Sheet2    A   B     C                  A      B 1  1898  1  東京           1  グループ名 グループ名 2  1854  2  東京           2  3  1876  3  東京           3   A1の通番1  B1の通番1 4 22354  1  青森           4   A1の通番2  B1の通番2 5 22398  2  青森           5  A1の通番3  B1の通番3 6 22376  3  青森           6  A1の通番4  B1の通番4 7  3898  4  東京           7  A1の通番5  B1の通番5 8 16622  2  群馬            8  A1の通番6  B1の通番6 9 12242  1  大阪           9  A1の通番7  B1の通番7 実際にはもっと複雑なのですが、これだけ解れば応用で何とか変更は出来ると思うので、お願いします。 ただ、出来れば作業用のセルは使用しない方向でお願いします。 他のデータに影響が出てきますので・・・

  • エクセルのデータから一致するデータを出したい

    エクセルの表から一致するデータに対応する指定列のデータを表示させたいのですがどの関数で設定すればよいのか教えて下さい。 A2からDの30までの表(実際には4000列以上) 1行は見出し A列は1~のナンバリング B列は商品コード(同じコードが複数ある)    ・昇順に並べてある C列は日付け    ・2番目に優先で昇順に D列は文字列 探したい商品コードをB1入力、それに対応するD列の文字列の昇順のトップをD1に表示させたい この内容で伝わるでしょうか オートフィルターで選ぶのも考えたのですが、入力した時その列のある列のデータが瞬時に見たいのです。 よろしくお願いします。

専門家に質問してみよう