Excelで違うブックの文字列を含む行の抽出方法と価格一括変更について

このQ&Aのポイント
  • 商品の価格を一括で変更する方法と、別のブックの文字列を含む行を抽出する方法について教えてください。
  • ブックAには7000行、ブックBには1000行のデータがあります。関数やマクロを使用して、ブックAの商品価格をブックBの値下げ後価格に一括変更する方法を教えてください。
  • また、ブックBのIDと合致するセルを持つブックAの行を抽出し、別のブックにまとめる方法も教えていただきたいです。
回答を見る
  • ベストアンサー

-excel-違うブックの文字列を含む行の抽出

商品の価格を一括で変更できる方法を探しているのですが見つからず困っています。 全ての商品データが載ってるブックAがあります。価格を変更する商品のIDと値下げ後の値段が載っているブックBがあります。ブックAの商品価格をブックBの値下げ後価格に変更したいのですが、関数か、マクロなど何か良い方法はないでしょうか? 最悪価格は手動で変更するとしてせめてブックBのIDと合致するセルを持つブックAの行を抽出する方法はないでしょうか?抽出した行は別ブックにまとめてくれるとなお助かります。 ちなみにブックAには7000行、ブックBには1000行のデータがあります。 ブックA(商品データ) A列・・・・・・    F列・・・・・・・・ ID         価格 1234        2500 2345        3200 3456        1200 4567        3000 5678        1800 ブックB(価格変更データ) A列        B列 ID         価格 2345        2600 5678        1500 ↓ ブックA(商品データ)もしくは新規ブックC A列・・・・・・    F列・・・・・・・・ ID          価格 1234        2500 2345        2600 3456        1200 4567        3000 5678        1500 といった感じです。どなたかお知恵をお貸しください。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

IDがブックBにあればそれを採用,無ければブックAを採用します 準備: ブックCに完全なIDの一覧を作成する(手順が判らなければ別途ご質問) ブックAのIDがパーフェクトなら,それをコピーしてくるだけです。 手順: ブックA,B,Cを開いて並べておく ブックCのF列に F2: =VLOOKUP(A2,IF(ISERROR(MATCH(A2,[bookB.xls]シート名!A:A,0)),[BookA.xls]シート名!A:F,[BookB.xls]シート名!A:F),6,FALSE) と記入し,リスト下端までコピーして埋める 改めてF列をコピーし,その場で形式を選んで貼り付けの値のみ貼り付けて値化する。 #参考 ご利用のエクセルのバージョンが明記されていませんが,Excel2007以降を使っているなら,IFERROR関数を使ってもう一段簡単な数式に出来ます。計算のリクツは同じなので特に解説しませんが,必要に応じて勉強してみてください。

rei33235
質問者

お礼

お礼が遅れてしまって大変申し訳ありません。keithinさんの方法でやってみたのですが、データが重すぎたのか記述を間違ったのか、ブックの内容が消えてしまいました。保存はしなかったので問題はなかったのですが。結局は商品の値段変更は別の方法ですることになりました。VLOOKUPは今後自分でできるように、勉強していきたいと思います。どうもありがとうございました。

その他の回答 (2)

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

こんな課題はエクセル関数のVLOOKUP関数(エクセルを使う人の常識の関数)のFALSE型で出来るのではないか。 他ブック参照という特徴があるにしても。 エクセルの関数の本も読まず、WEBも照会しておらず、スクールにも通ってないのでしょう。 Googleででも「エクセル VLOOKUP関数」で照会すれば、膨大な数の記事がある。 実例つきのものをさがして、どういう関数かまず勉強すること。 それから「見つからない場合のこと」、「検索表が他ブックにある場合など」を勉強のこと。 VBAでも出来るが、質問者のようでは、コードを回答者に作ってくれと言うに等しい(丸投げ)。 Googleで「エクセル VLOOKUP 他ブック参照」など勉強のこと。

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

こんばんは! VBAでの一例です。 それぞれのデータは各BookのSheet名が「ブックA」の「商品データ」・「ブックB」の「価格変更データ」にあるとします。 「ブックA」を一旦開きます。 Alt+F11キー → VBE画面 → 画面左にある「This Workbook」をダブルクリック → ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim ws1, ws2 As Worksheet Dim i, j As Long Set ws1 = Workbooks("ブックA").Worksheets("商品データ") Set ws2 = Workbooks("ブックB").Worksheets("価格変更データ") For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row If ws1.Cells(i, 1) = ws2.Cells(j, 1) Then ws1.Cells(i, 6) = ws2.Cells(j, 2) End If Next j Next i End Sub 'この行まで 尚、一旦マクロを実行すると元に戻せませんので、 元データを別Sheetにコピーしておきマクロを試してみてください。 参考になれば良いのですが・・・m(_ _)m

関連するQ&A

  • 【エクセル】特定の文字列(番号)の行だけ抽出したい

    現在資料を作っていて、またもや困ったことがあったので教えてください。 特定の文字が含まれる行のデータを抽出するにはどうしたらいいのでしょうか。 具体的にいうと ____|A|B|C|D|E| [01]|F|1|0|3|5| [02]|G|0|2|5|7| [03]|H|0|3|4|8|    中略 [21]|F|0|0|9|6| [22]|G|6|4|5|1| [23]|H|3|3|2|2|    中略 [31]|F|2|2|4|6| [32]|G|5|3|7|9| [33]|H|8|2|6|4|    以下略 *[]の中身は行番号 一番上段のA B C D Eは列の軸 |はセルの区切りを示している のような表でGのBのところ(行番号が10n+2のところのA列)だけのデータを合計したいのです。 つまり上の表でいえば =A2+A22+A32+A42+A52…(=0+6+5+…)ということをしたいのですが 数が600行近くあるので手入力だとかなり面倒くさいのです。 SUM関数を使うのかなとも思いましたが、それでもセルの指定の面倒くささは変わらないし… 何か簡単にできるようにする方法がありましたらご教授お願いします。

  • EXCELのブック間の抽出方法を教えてください。

    Aという集合ブックがあります。B~Eの個人ブックがあります。 今現在は、マクロの自動記録を使って B~EのブックのB6:F25のセルを自動で AのブックのB6以降のセルに順番に貼り付けてくるようにしてますが、 ブックによってはB15の行までしか入力が無いものもあり、 空白の行までコピーしてきて見辛くなってしまってます。 空白行は抽出しないようにしたいのですが 何かいい方法がありましたら教えてほしいです。 宜しくお願い致します。

  • 文字列の抽出について

    A列に 500行位の文字列があり、 その行の中から以下を抽出したいです。 ただ、抽出したい文字列は、0123456で始まり、abcdという文字列まで。 しかも改行されています。 ※抽出したい文字列 【A列 0123456 ~ B列 abcd】という文字列 【F列 0123456 ~ B列 abcd】という文字列 A列 0123456 B列 xxxx abcd C列 1111 D列 2222 E列 3333 F列 0123456 G列 xxxx abcd H列 4444 I列 5555 J列 6666 宜しくお願い致します。

  • ブック間を跨いでのエクセルデータの抽出

    よろしくお願い致します。 妙案があれば、教えて頂きたいです。 ブック1・2それぞれ、A列に複数行のデータがあります。 ----------------- 【ブック1(重複データ無し)】   ABCDEFGH・・・ 【ブック2(重複データ有り)】 ABBCDEFGHH・・・ ----------------- ブック2のデータから、ブック1にあるデータだけ、 新しいシート(ブック3等)に抽出したいと思っています。 現在は、ブック1のデータを一つずつブック2でフィルタをかけ、 フィルタ結果をカット→ブック3にペーストして抽出しています。 データ量が膨大なため、最適な方法があれば教えて頂きたいです。 よろしくお願い致します。

  • エクセルで、データのある行だけを抽出したい。

    エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出したいと思っています。 Sheet2にあらかじめ関数を入れておく方法にしたいため、関数について教えてください。 タイムテーブルで予定を管理するような表で、A~Hまでにデータが入っています。 予定を入れる際にはE列には必ず入力をするため、E列が空白でない行のみを抽出したいです。 A|B|C|D|E|F|G|H 月|日|時間|… 11|22|10:00|… 11|22|10:30|… 時間枠は10:00~17:00の30分刻みで、1日15行使用するので、1年で5475行まで使用します。 1行目はタイトル行なので、データは2行目から入力しています。 フィルタオプションで抽出する方法や、それをマクロで登録しておく方法は分かったのですが、あとから予定を追加することがあるため、マクロを実行する度にデータが置き換わると困ってしまいます。 また、抽出したSheet2のI列以降には備考などを入力したいため、やはり後から列がずれると困るため、A~H列に関数を入れておく方法で実行したいと思います。 よろしくお願いいたします。

  • エクセル2つのブック列の比較 VBAや関数について

    Aと言うブックとBと言うブックがあるとして、 Aのブックは共有ファイルではなく、Zサーバー上にあるエクセルファイルです。 Aのブックに色々な人が行の挿入、商品名の書き換え等をしていて、いつ挿入されたのかが分からないため、VBAや関数を使って調べたいのですが、 Aのブックは10シートあり、サイズ別で行も並べられているため、新しい情報を特定するのが困難です。 BのブックはAと同じシート名を作り、必要箇所だけコピーしているデータです。(オリジナルブック) やりたいことは、Aのブックから探してBのブックに追加されていない情報、一致していない情報があれば、色を付けてわかりやすくするか、Bのブックの新しいシートに結果を出すようなことがしたいのですが、可能でしょうか? AのブックはA列-IC列まであるのですが、必要な部分は全シートB列(商品コード)とE列(商品名)のみです。 Bのブックには同じシート名にして、A列に商品コード、B列に商品名としております。 AのブックのB列、E列を参照して、BのブックのA列、B列になければ、結果を表示したいです。 もし出来る方法があれば、教えてほしいです。 今はシートごとに左右比較して、見ていってるのですが、10シートの中に、行数は2000行くらいあるため、それで半日おわってしまいます。 もし分かるかた、マクロを組める方がいれば教えて頂きたいです。宜しくお願い致します。

  • 別ブック2列がマッチした文字を入力する

    BブックのC列7行目から文字(15ステップ毎文字が入替る)がまたF列8行目からは年月(2017/4~2018/3)、AブックのA列4行目から年月がまたB列4行目からは文字が添付のように連続して入力されています。BブックC列文字とAブックB列文字が一致、BブックF列年月とAブックA列年月が両方一致した行のAブックC列の文字をBブックのE列に順々に入力していきたいのですが。 どなたかVBAコードが解る方ご教授願います。 環境はwindows7 office2013です。

  • エクセル:特定の行のみ抽出

    たくさんデータがあるなかで、 A列にはデータがあるけど、B列にはデータが入っていない行のみを抽出するにはどのような作法でを使えばよいでしょう。

  • エクセルで列を複数行にしたいのですが

    注文表を商品ごとに集計したいのですが、商品名・数が列の入っています。これを縦にして集計しようと思っているのですが、列を行する方法を教えてください。 エクセルの表で列A・Bを共通にして列C・Dを次の行に、そして列E・Fを次の行にとしたいのですが、教えてください。 列A 列B   列C  列D 列E 列F 001 ○○会社 商品A 10  商品F 14 001 ○○会社 商品C 11  商品A 20 005 ××会社 商品D 32  商品C 25 これを 列A 列B   列C  列D 列E 列F 001 ○○会社 商品A 10  001 ○○会社 商品F 14  001 ○○会社 商品C 11  001 ○○会社 商品A 20  005 ××会社 商品D 32  005 ××会社 商品C 25 よろしくお願いいたします。

  • Excel VBAの質問です。

    エクセル2010を使用しています。 Excel VBA で二つのシートを比較して合致するレコードの行を削除する方法 値下げ,まとめのシートがありまして、 値下げ:b列に商品コードのデータ まとめ:a列に商品コードのデータ のようなExcelのデータがあります。 ここから、値下げのシートの商品コードを一つ一つ読み込みながら、まとめの商品コードと比較して、合致した値下げの商品コードの行を削除するプログラムを作りたいです。 商品コードのデータ数は毎回違い、値下げとまとめでも商品コードのデータ数は違います。 どなたかご教示いただけないでしょうか? よろしくお願いいたします。

専門家に質問してみよう