• 締切済み

EXCEL - マクロ・シート間の照合・修正

EXCEL - マクロ・シート間の照合・修正 すみません、どなたか教えてください。 「シートA」と「シートB」とで、商品リストのデータを照合し、価格を書き変えたいです。 「シートA」を元に、「シートA」データより大量データの商品リストに価格に変更をかけたものが「シートB」になります。 【例】 ■シートA 商品番号  価格(円)  001    30  003    50  005    60 ■シートB 商品番号  価格(円)  001    25  002    55  003    55  004    40  005    60 チェックする点は、シートAにある商品番号をシートBの商品番号と照合し、同じ番号があれば、シートBの価格をシートAの価格に上書きするようにしたいです。価格が変更してなくても上書きしてもかまいません。 現在商品番号を検索して1つ1つ確認して、価格変更しています。 データが膨大にあるので、自動化・効率化を図りたいです。 どなたかよい方法を教えてください。よろしくお願いします。 できれば、ボタンを押してマクロ実行、というのが理想なのですが…。

みんなの回答

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

エクセルには有名なVLOOKUP関数が在る。これと同じものがVBAでも使える。 そういうのを知らないのかな。エクセルの関数でVBAでは使えないものもあるが。 手軽なので勉強のこと。 例データ Sheet2 A1:B3 価格表の部分 A列   B列 1 a 2 b 3 c ーー Sheet1 A列   B列 (実行結果) 1 a 3 c 2 b ーー 標準モジュールに Sub test01() Dim sh1, sh2 Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") d = sh1.Range("A65536").End(xlUp).Row For i = 1 To d sh1.Cells(i, "B") = Application.WorksheetFunction. _ VLookup(sh1.Cells(i, "A"), sh2.Range("A1:B100"), 2, False) Next i End Sub こんなに短くて済むよ。 ただし新?価格表の行数で上記を変えること。 新?価格表に商品番号が見つからない場合はエラーになるので、その対処を入れること。 On Eroor Goto 文など。 ーー ほかにも多数の処理ロジックはある。 Find法 総なめ法・ソートして2分法 ソートしてマッチング法 MATC関数利用  SQL利用法 など

tokyomall
質問者

お礼

ありがとうございます。 勉強不足ですみません。 いろいろと方法があるようなので、調べてみます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! 一例です。 ↓のコードを標準モジュールに貼り付けてマクロを実行してみてください。 Sub test() Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("SheetA") Set ws2 = Worksheets("SheetB") For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row j = ws2.Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(ws2.Range("A2:B" & j), ws1.Cells(i, 1)) Then ws1.Cells(i, 2) = WorksheetFunction.VLookup(ws1.Cells(i, 1), ws2.Range("A2:B" & j), 2, False) End If Next i End Sub こんな感じで良いのですかね? 的外れならごめんなさいね。m(__)m

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

#1です。 #1の回答で書き忘れましたが、 シートAとシートBのシート名は、提示どおり「シートA」「シートB」(全角文字)、 商品番号が列A、価格が列B、項目名が1行目で、データは2行目以降、 データの間に空行は無い、 各シート内に、同じ商品番号は無い、 という前提です。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

Sub test() Dim c1 As Range, c2 As Range Dim ShA As Worksheet, ShB As Worksheet Set ShA = Worksheets("シートA") Set ShB = Worksheets("シートB") Set c1 = ShA.Cells(2, 1) Do Until c1.Value = "" Set c2 = ShB.Columns(1).Find(c1.Value, , , xlWhole) If Not c2 Is Nothing Then c2.Offset(, 1).Value = c1.Offset(, 1).Value Set c1 = c1.Offset(1) Loop End Sub このマクロを、ボタンに登録してください。

tokyomall
質問者

お礼

ありがとうございました。 補足で追加要望を致しましたが、 教えていただいた内容で、なんとかできそうです!! かなりの時間短縮に感動です!!

tokyomall
質問者

補足

ありがとうございます。 無事できました!! 私の文章の書き方が間違っていました。 シートBを基準にシートAの価格を修正する内容でした。 シート名の入れ替えで思ったような結果が得られました。ありがとうございます。 追加で、変更箇所が複数個所の場合はもう少し複雑になるのですか?列がB列ではなく離れたE列になった場合も教えていただけると嬉しいです。

関連するQ&A

  • EXCEL - マクロ・シート間の照合

    すみません、どなたか教えてください。 「シートA」と「シートB」とで、商品リストのデータを照合したいのです。 「シートA」を元に、ある一部の商品リストに変更をかけたものが「シートB」になります。 【例】 商品番号  商品名  001     Orange ABC  002     Orange BBB  003     Apple Big  004     Banana 5 チェックする点は、入力されている文字列、大文字、小文字、スーペース等が変更になったかどうかチェックします。 変更は何度も入るため「シートB」を元に「シートC」をチェックする→「シートC」を元に「シートD」をチェックする、という流れになっていきます。 今までは以下の関数を使ってチェックしていましたが、この関数だと毎回書き変える上に、A3以降のセルにコピーする作業が発生するので手間がかかってなりません。 ●照合用のシートZ!A2=IF('シートA'!A2&'シートB'!A2="","",EXACT('シートA'!A2,'シートB'!A2)) どなたかよい方法を教えてください。よろしくお願いします。 できれば、ボタンを押してマクロ実行、というのが理想なのですが…。

  • エクセルマクロ シート間の照合_上書き

    マクロ初心者です。(エクセル2003使用) Sheet2の管理番号をSheet1の管理番号と照合し、同じであれば、数量など3項目を上書きするマクロを作ろうとしています。 (Sheet1:日々更新される元データ)全データ数約500件くらい A列   ,B,  C,  D,   ・・・ 1行 管理番号,品名,注文数量,出荷数量,・・・ (Sheet2:上書きさせたいシート)全データ数約80件くらい G列   ,H,  I   J      9行 管理番号,品名,注文数量,出荷数量 ↑シート2にある管理番号をもとに数量などを照合&上書きをしたいのです。 ■シート1も2も行数は日々変動します。 ■シート1で、まれに同じ管理番号が2つ存在することがありますが、取り出したい数量などのデータは、常に1番目に照合する管理番号です。 Sub シート間照合と上書き() Dim i As Integer a = Worksheets("sheet1").Range("a65536").End(xlUp).Row For i = 2 To a If Worksheets("sheet1").Range("A2") = Worksheets("sheet2").Range("G9") Then Worksheets("sheet1").Cells(1, i) = Worksheets("sheet2").Range("G9") Worksheets("sheet1").Cells(2, i) = Worksheets("sheet2").Range("H9") Worksheets("sheet1").Cells(3, i) = Worksheets("sheet2").Range("I9") While Cells(1, i) <> "" i = i + 1 Wend End If Next End Sub ■上記 模索しながらマクロを作ってみたのですが、エラーにはならないのですが(F8)、まったく動きませんでした。 すみませんが、お力をかしてください。 よろしくお願いいたします。

  • EXCELの2つのシートの照合処理マクロについて

    マクロが得意でなく下記の処理が可能かご教授いただければと お願いします。 ・シートAに自社の発注済みデータ ・シートBに発注先から送られてきた受注データがあります。 シートAの発注番号コードとシートBの受注番号コードが一致するので これを基にそれぞれのシートにある数量、単価、金額を照合し 一致しないレコードのみシートCにコピーさせる。 という流れなのですが、 ・それぞれのシートのコード、数量、単価、金額は別々の列にあります。 現在関数とオートフィルターで処理しているのですが効率が悪いため 改善するよう指示されて困っております。 よろしくお願いします。

  • エクセルシート間の照合について

    エクセルシート間で照合をしたいと思っています。 照合する項目は2つ。2つともあえばそのA列のデータを表示するというものです。 データは シート1(前年) A  B  C  D 1  田中 123 東京都・・ 5  佐藤 124 千葉県・・ 3  山本 128 埼玉県・・ シート2(今年) A  B  C  D   山本 128 埼玉県・・   佐藤 124 北海道・・   田中 123 東京都・・ C列とD列を照合し2つともあえばシート2のA列にシート1のA列のデータを入力する。なければ「なし」と入力できるようにしたいのです。 上の場合は山本のA列に「3」佐藤には「なし」田中には「1」と入るのうになればと思います。 入力されている列は同じですが順番はばらばらです。データ数は1万件を超えています。 どなたかアドバイスいただければと思います。よろしくお願いします。     

  • Excel シート間のデータの照合

    Excelで、シート間のお客様データ(だいたい各1万件)を照合します。下記は現在の照合方法ですが、これでは時間がかかるうえ手作業が多く発生しミスにつながります。頻繁に行う作業なので、関数でも、マクロでも、とにかくもう少し簡単にできる方法がありましたら、どうぞご教授ください。よろしくお願いします!! 【目的】 シート「sheet2008」には2008年度のデータ。シート「sheet2007」には「sheet2008」と同じ形式の2007年度のデータが入っています。シート「sheet2008」に、そのお客様の2007年度の担当営業マンを表示させたいのです。 【例】 列A(電話番号): 011-231-1112 列B(名前):佐藤 一郎 列C(住所):北海道札幌市中央区北1-1-1 列D(担当営業マン):鈴木 新規の列(2007年度の担当営業マン):鈴木  ・「sheet2008」「sheet2007」はほぼ同じデータですが、一部のお客様は名前が変わっていたり、住所が変わっていたりします。  ・「sheet2007」にないお客様が「sheet2008」にあったり、その逆があったりして、各シートのデータ件数は一致しません。  ・名前が同じでも住所が違うデータ、電話番号が同じでも担当営業マンが違うデータは別者として扱います。  ・「顧客ID」のような“必ずユニークな情報”は存在しません。 【現在の照合方法】 (1)「sheet2008」の各列の前に空白列を挿入する。  (データの1行目はタイトル行…B1:電話番号/D1:名前/F:住所/H:担当営業マン)  (データの2行目以降はデータ)     列A(空白行):     列B(空白行): 011-231-1112     列C(空白行):     列D(名前):佐藤 一郎     列E(空白行):     列F(住所):北海道札幌市中央区北1-1-1     列G(空白行):     列H(担当営業マン):鈴木 (2)「sheet2007」を列Aの電話番号で昇順に並べ替える。 (3)「sheet2008」の電話番号が「sheet2007」にあるかを調べる。     A2:「=IF(B2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,1,0)),"○","▲")」 (4)(3)で調べた「sheet2008」の電話番号と同じ行にある名前/住所が「sheet2007」にあるかを調べる。     C2:「=IF(D2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,2,0)),"○","▲")」     E2:「=IF(F2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,3,0)),"○","▲")」 (5)電話番号/名前/住所がすべて一致するデータについて、「sheet2007」にある担当営業マンの値を列Gに表示させる。     G2:「=IF((AND(A2="○",C2="○",E2="○"))=TRUE,(VLOOKUP($B2,Sheet2007!$A:$D,4,0)),"▲") (6)"▲"やエラー値で表示される計算結果について、目視で確認する。 (終了)

  • EXCELのシート間の照合

    質問が重なっていたら申し訳ありません。 SHEET1にデータA、データB、データC SHEET2にデータA,データD、データE があるとします。 2つのシートはデータがごちゃまぜに入っていて、あるデータとないデータがあったりします。 これらを1つのシートにまとめたいのですが、どのようにすればいいでしょうか? マクロは分かりませんので、メニューなどから出来る方法があればと思っています。

  • エクセルデータ照合

    エクセルのデータ照合によりデータの統合をしたいです。 Sheet1 A校 50% B校 30% C校 40% D校 30% E校 20% Sheet2 B校 C校 E校 F校 Sheet1 とSheet2 の学校を照合して共通校のみを抽出しSheet3として B校 30% C校 40% E校 20% データ数は約1万件です。 宜しくお願いいたします。

  • エクセルのシート別データを引っ張る方法

    エクセルで2つのシートがあります。 1つは大量に色んなデータが記載されている、元データ【シートB】 。 もう一方はリスト【シートA】になっています。 照合できる対象として「電話番号」があります。 【シートA】 電話番号  【シートB】 電話番号 ●●情報  ▲▲情報 この【シートA】の横に、●●情報  ▲▲情報 のデータを引っ張ってきたいのですが どのような数式を入れたらよいのでしょうか?? ちなみに【シートB】は大量にデータが記載されているものになります。 検索をしてもなかなか理解できるような解説が見つからず・・・ お手数ですがどなたかご伝授いただけると助かります><!

  • エクセルファイル同士の照合

    よろしくお願いします AとBのふたつのエクセルファイルがあります。 二つのファイルには商品名と単価が並んでいます。 Aは全ての商品についての単価がのっており Bはその一部だけがのっています。 そこでBとAを照合したいのですが 数が膨大で検索や、並び替えでは対応しきれません。 良い知恵、又はテクニックを教えてもらえませんか?

  • EXCELマクロ セルの内容を置き換えたい

    マクロ初心者です。ご教授よろしくお願いいたします。 sheet1に 番号 A-111111 A-111112 A-111113 このようなデータが1000件ほど入ってます。 (連番ではありません。また、一列に並んでいるのではなく、 あちらこちらに点在している状態です) sheet2には 番号    品名 A-111111 あああ A-111112 いいい A-111113 ううう このようなデータが並んでます。 sheet1.番号 と sheet2.番号 をマッチングさせて、 同一データであれば、sheet1.番号のセルに sheet2.品名を上書き(置換え?)したいのです。 このようなマクロを作成するのは可能でしょうか? 説明が稚拙で申し訳ありません。よろしくお願いします。

専門家に質問してみよう