• ベストアンサー

エクセル 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列にある単価を、とってくる。) というような式を作りたいのです。 なかなか勉強不足なのですが、どうかご伝授下さい。   

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

  • ベストアンサー
  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.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は最終引数でデータタイプがソートデータか否か指定できますからね~

asacchi
質問者

補足

ご回答ありがとうございます! 一応、解決しました。VLOOKUPのみで。 何度も出てくるデータの最新のものをとってくる、というやりかたは やはり先の方がおっしゃるように日付を降順にしたデータにすることで解消しました。 でも、LOOKUPじゃないなら、ソートしなくってもよいのですか? =VLOOKUP(A2,シート2!B:C,2,FALSE) で、解決したんですが・・・ 

その他の回答 (4)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

ユーザ定義関数を使う方法です。 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) といれると最新の値段が取得できます。

asacchi
質問者

お礼

ご回答ありがとうございます! 今やってみたら、できました。 他の方に教えて頂いたVLOOKUPでも解決できましたので、 使い比べて見てサイズなど、都合のよい方を利用しようと思います。 ありがとうございました!

noname#204879
noname#204879
回答No.3

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)} (配列数式)

asacchi
質問者

お礼

配列数式でもできるのですね!ありがとうございます。 このやりかたはまた徐々に勉強していきたいと思います。 ありがとうございました! 試した結果をご報告しないうちにお礼してしまってすみません!

noname#61366
noname#61366
回答No.2

#1の方とのやりとりに補足的にお答えしますと、 vlookupは、検索値(このばあい"りんご")が、検索先の列の一番最初に出てきた行の値を返します。 なので、sheet1のルールを「最新のデータは一番上」としてしまえば、可能だと思います。

  • nomnom32
  • ベストアンサー率42% (6/14)
回答No.1

VLOOKUPは、ソートされた一覧からでないと、データを拾ってくることができません。 質問者様のしたい内容であれば、シート1のB列がソートされていないとダメです。しかしソートしたとしても日付違いで複数ありますし・・VLOOKUPではムリではないでしょうか? マクロを組んだらできるのでは??

asacchi
質問者

補足

さっそくのご回答ありがとうございます。 ソートしないとできないんですか?この場合に限りなのでしょうか? VLOOKUPだけなら使うことがありますが・・・ では、マクロだとどう作るのでしょう?よけいにわかりません・・・

関連するQ&A