- ベストアンサー
エクセル WINXP VLOOKUPと COUNTIFを組み合わせる
お世話になります。 自分なりにやってみましたがどこが違うのかわかりません。 まず、シートが二つあり、一つはデータの羅列。内容は、仕入れたものの品名、単価、数量、金額(これは横並びに。)などをどんどん仕入れたたびに下行へ入力していっています。もう一つはこのデータから一番最新のものの単価をあらわすデータを作りたいシートです。 考えているのは、 シート1に・・・ A B C 12/1 りんご @300 12/1 みかん @200 12/2 さとう @320 12/3 なし @100 12/4 りんご @230 シート2に、上記の商品の最新単価を抜き出したいのです。 りんご とA2セルに入れれば、B2にりんごの最新単価230円が入るようにしたいのです。 A B りんご @230 という風に。シート1のデータは何千行もあります。シート2の りんご、にあたるデータは、すでに決まっていて100行分くらいあります。 シート2の、B2のセルに・・・ (A2の「りんご」と同じものを、シート1のA1からA1000(←例えば)までの一番最下段にあるものを選び、その同じ行のC列にある単価を、とってくる。) というような式を作りたいのです。 なかなか勉強不足なのですが、どうかご伝授下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
お勉強目的を除いて 反復性も判断も不要なものに わざわざ関数があるのにマクロなど不要でしょう =VLOOKUP(A2,シート2!B:C,2,0) とか =OFFSET(シート2!$A$1,MATCH(A2,シート2!B:B,0)-1,COLUMN(A1),1,1) とかでいけるのじゃないですかね? どんな時もインデックスにソートが掛かっていないといけないのは VlookupじゃなしにLOOKUPですね VLLOUPは最終引数でデータタイプがソートデータか否か指定できますからね~
その他の回答 (4)
- ham_kamo
- ベストアンサー率55% (659/1197)
ユーザ定義関数を使う方法です。 Alt+F11でVBAの画面を開き、「挿入」>「標準モジュール」を選択し、右側に下のマクロをコピーします。 Function GetPrice(T As Range) As String Dim d As Date Dim r As Range Application.Volatile d = 0 For Each r In Worksheets("Sheet1").Range("A1", Worksheets("Sheet1").Range("A65536").End(xlUp)) If r.Offset(0, 1).Value = T.Value Then If r.Value >= d Then d = r.Value GetPrice = r.Offset(0, 2).Value End If End If Next If d = 0 Then GetPrice = "データなし" End If End Function Excelの画面に戻り、シート2のA1に「りんご」と入れた場合、B1に =GetPrice(A1) といれると最新の値段が取得できます。
お礼
ご回答ありがとうございます! 今やってみたら、できました。 他の方に教えて頂いたVLOOKUPでも解決できましたので、 使い比べて見てサイズなど、都合のよい方を利用しようと思います。 ありがとうございました!
Sheet2!B1: {=INDEX(Sheet1!C$1:C$5000,MATCH(MAX((Sheet1!A$1:A$5000)*(Sheet1!B$1:B$5000=A1))&A1,Sheet1!A$1:A$5000&Sheet1!B$1:B$5000,0),1)} (配列数式)
お礼
配列数式でもできるのですね!ありがとうございます。 このやりかたはまた徐々に勉強していきたいと思います。 ありがとうございました! 試した結果をご報告しないうちにお礼してしまってすみません!
#1の方とのやりとりに補足的にお答えしますと、 vlookupは、検索値(このばあい"りんご")が、検索先の列の一番最初に出てきた行の値を返します。 なので、sheet1のルールを「最新のデータは一番上」としてしまえば、可能だと思います。
- nomnom32
- ベストアンサー率42% (6/14)
VLOOKUPは、ソートされた一覧からでないと、データを拾ってくることができません。 質問者様のしたい内容であれば、シート1のB列がソートされていないとダメです。しかしソートしたとしても日付違いで複数ありますし・・VLOOKUPではムリではないでしょうか? マクロを組んだらできるのでは??
補足
さっそくのご回答ありがとうございます。 ソートしないとできないんですか?この場合に限りなのでしょうか? VLOOKUPだけなら使うことがありますが・・・ では、マクロだとどう作るのでしょう?よけいにわかりません・・・
補足
ご回答ありがとうございます! 一応、解決しました。VLOOKUPのみで。 何度も出てくるデータの最新のものをとってくる、というやりかたは やはり先の方がおっしゃるように日付を降順にしたデータにすることで解消しました。 でも、LOOKUPじゃないなら、ソートしなくってもよいのですか? =VLOOKUP(A2,シート2!B:C,2,FALSE) で、解決したんですが・・・