- ベストアンサー
エクセルで一致するデータを抽出したい
教えてください。 連番1 市名 連番2 金額 1 名古屋 1 25 2 静岡 3 30 4 島田 4 40 6 安部川 5 50 の2表あり、連番1と連番2が一致した場合のみ金額を抽出したいのですが、どうして処理したらいいのかわかりません。 連番1 市名 連番2 金額 1 名古屋 1 25(ここにどういう関数を入れるか) 2 静岡 4 島田 4 40 6 安部川 VLOOKUP、LOOKUP、MATCH関数のどれかを使うのでしょうが、わかりません。すみませんがどなかた教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
F G 連番2 金額 1 25 3 30 4 40 5 45 A B C D 連番1 市名 連番2 金額 1 名古屋 C2 D2 2 静岡 4 島田 6 安部川 表が上記のようになっているとします。 最初の表の『連番2』のデータ部分は、F2~F5 最初の表の『金額』のデータ部分は、G2~G5 です。 『市名』がある表の『連番2』部分も算式(下記C2)にできますが、不要な列のような気がします。 『金額』部分は下記D2のように入力し、下にコピーします。 C2 =IF(ISNA(VLOOKUP(A2,$F$2:$G$5,1,FALSE)),"",VLOOKUP(A2,$F$2:$G$5,1,FALSE)) D2 =IF(ISNA(VLOOKUP(A2,$F$2:$G$5,2,FALSE)),"",VLOOKUP(A2,$F$2:$G$5,2,FALSE)) または、 C2 =IF(ISNA(MATCH(A2,$F$2:$F$5,FALSE)),"",INDEX($F$2:$F$5,MATCH(A2,$F$2:$F$5,FALSE))) D2 =IF(ISNA(MATCH(A2,$F$2:$F$5,FALSE)),"",INDEX($G$2:$G$5,MATCH(A2,$F$2:$F$5,FALSE))) 質問にある関数を使ってみました。こんな意味でした?
その他の回答 (5)
- ADEMU
- ベストアンサー率31% (726/2280)
再びADEMUです。 カラムとはデータを収納する場所といいますか、普通に考えてデータを書きこんでいるところです。(余計にわからないですか?) 例えば、SHEET1に A B 連番2 金額 1 25 3 30 4 40 5 50 と入力していきます。 次ぎにSHEET2で A B C D 連番1 市名 連番2 金額 1 名古屋 2 静岡 4 島田 6 安倍川 として 連番2のカラムに =IF(SHEET1!A1=SHEET2!A1,SHEET1,””) 金額のカラムに =IF(SHEET1!A1=SHEET2!A1,SHEET2,””) とおけばよいと思います。
お礼
回答をありがとうございます。 皆さんからたくさんの式をご連絡いただき、考え方を勉強中です。 どれが良い式か検討させていただきますが、まずはお礼まで失礼します。
- imogasi
- ベストアンサー率27% (4737/17069)
VLOOKUP、LOOKUP、MATCH関数を使うと個人的には式が複雑で鬱陶しい。VBAでやれば中身は9行で済みます。いかがですか。但し下記のロジックは判りやすいことを旨としていて稚拙で、データ量が多くなると処理完了が遅くなってしまいますが、Sheet2が1000件ぐらいまでなら大丈夫でしょう。’の行は解説注釈で、なくても実行に関係なし。 '---- Sub test01() 'Sheet1の第1行目は見出しとし、2行目以下にデ@データがあるとする。 'Sheet2も第1行目は見出しとし、2行目以下にデ@ータがあるとする。 'Sheet2のB列に金額が入っているとする。 ' ------Sheet1,Sheet2の最終行の検知 a = Worksheets("Sheet1").Range@("a2").CurrentRegion.Rows.Count-1 b = Worksheets("Sheet2").Range@("a2").CurrentRegion.Rows.Count-1 '-----Sheet1に有る各行の列=Worksheets@("sheet1").Cells(i, 1) '-----について,Sheet2の全行,すなわちb行まで、 '-----Worksheets("sheet2").Cells(j, 1)について同@じ連番がないか '-----比較する=IfからEndIf For i = 1 To a For j = 1 To b If Worksheets("sheet1").Cells(i, 1) =@ Worksheets("sheet2").Cells(j, 1) Then '-----見つかればSheet2のB列金額Worksheets@("sheet2").Cells(j, 2) '----をSheet1のC列にWorksheets("sheet1").Cells@(i, 3)にセットする。 Worksheets("sheet1").Cells(i, 3) = Worksheets@("sheet2").Cells(j, 2) End If Next j Next i End Sub 「@」のところは強制的に不本意に改行されています。 直下行を@の行の右に持ってきて、@をのぞき、半角スペースを入れてください。 VBEの画面に至るまでが判らなければ載せます。
お礼
回答をありがとうございます。 VBAを動かせるようになれればしめたものですが、まだ勉強不足です。 基本から学び、できましたらご連絡させていただきます。 取り急ぎお礼まで、失礼致します。
- ADEMU
- ベストアンサー率31% (726/2280)
#2の方の方法でいいと思います。 但し、金額の数字は別のカラムにしておき、表には出てこないようにしておき、金額の列に =IF(連番1=連番2,金額,””)とすれば良いと思います。
補足
回答をありがとうございます。 少し教えてください。カラムとは何ですか。 =IF(連番1=連番2,金額,””)でやってもうまくいきません。 私の例が悪かったようです。
- k-family
- ベストアンサー率34% (180/523)
う~ん、質問の意味がわからないのですが、 2つの表の関係がわかりません。こういうことではないのですか? A列 B列 C列 D列 1 名古屋 1 25 2 静岡 3 30 4 島田 4 40 6 安部川 5 50 ならば、E1に「=IF(A1=C1,D1,"")」として下へコピーすればE列に結果が出ます。 質問の意味とは違うような気がしますので補足がありましたらお願いします。
お礼
回答をありがとうございました。 質問の仕方が悪かったようです。連番1も連番2も複数あり、抽出したいものは同じ行に必ずしもありません。その場合の式を教えて欲しかったのです。 どうもすみませんでした。
- satoko1228
- ベストアンサー率0% (0/7)
やり方がいろいろあるとは思うのですけど、 A連番1 B市名 C連番2 D金額 Eチェック にして、Eチェックの列に、 「IF(A2=C2,D2,"×")」 って、関数をいれると、 E列に金額か×が表示されると思うので、 それであとでソートをかけたりして、 ×以外をピックアップしたらいかがでしょうか??
お礼
回答をありがとうございました。 質問の仕方が悪かったようです。連番1も連番2も複数あり、抽出したいものは同じ行に必ずしもありません。その場合の式を教えて欲しかったのです。 どうもすみませんでした。
お礼
回答をありがとうございます。 式が複雑で直ぐには理解できません。勉強したいと思います。 まずはお礼まで、失礼いたします。
補足
できました。そういう方法があるなど知らず驚きました。 ありがとうございました。