• ベストアンサー

VLOOKUPで表の範囲の中に期間がある場合

下記の表を作ったのですが、別のシートにカレンダーがあり、10/1(B2)~10/20(C2)は、A(A2)、10/21~10/31がB(表は、3月末でございます。)と反映するようにしたいのですが、どうすればいいでしょうか?   開始日  終了日  I  II  計 A  10/1     10/20  3  4  7 B  10/21    10/30  2  1  3 VLOOKUPを使わない方がいいでしょうか? ご教示お願いいたします。       

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

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

>ほしい答えは、…という”A”、”B”、”C”等のアルファベットです。 では,シート1のA列に10/1から3/20までの開始日,F列にAからJまでが記入してあるとします。 #重要な注意 シート1のA2に10/1と記入すると,「今年の」2012/10/1になります。 一方,来年の1月以降のセルについて,そのまま1/1とか3/20と記入すると,これも「今年の」日付になってしまいます。 来年の1月以降のセルについては,必ず「来年の日付」である事を忘れずに「2013/1/1」「2013/1/21」…「2013/3/21」のように記入します。 数式は,先に回答した計算式でも出来ますが,コピーして写すしかご自分じゃ数式を書けないようでしたら B2に希望の日付を記入する事にして,数式は Excel2007以降を使っているなら =IFERROR(VLOOKUP(B2,Sheet1!$A:$F,6),"") もしあなたがExcel2003以前を使っているなら =IF(B2<Sheet1!$A$2,"",VLOOKUP(B2,Sheet1!$A:$F,6)) と記入します。 #あなたが普段使うソフトのバージョンによっても,使える関数とかやり方が変わります。ご相談投稿では,ご利用のソフト名は元より,バージョンもキチンと明記することを憶えてください。

その他の回答 (3)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

VLOOKUP関数はある日付の行における何列目のデータなどを取り出すためには便利に使うことができますがある範囲のデータを集計するなどに使うことはできません。 ご質問の意味をよく理解できないままに答えるのですがシート2のA2セルから下方に4月1日からの日付が翌年の3月31日まで入力されており、それに対していくつかの項目名がB1セルから右横の列に入力されているとして、その列の項目の中にはIやIIの項目が有るとします。 ご質問の表がシート1に有るとしてA2セルにA、A3せるにB,B1セルには開始日、C1セルには終了日、D1セルには項目のIが、E1セルには項目のIIが、F1セルには計がそれぞれ入力されているとします。 そこでB2セルには10/1,C2セルには10/20,B3セルには10/21,C3セルには10/31の日付を入力したとします。 そこでそれらの期間における項目IおよびIIの集計を求めるとしたらD2セルには次の式を入力したのちにE2セルまでドラッグコピーしたのちに下の行にもドラッグコピーします。 =SUM(INDEX(Sheet2!$A:$XX,MATCH($B2,Sheet2!$A:$A,0),MATCH(D$1,Sheet2!$1:$1,0)):INDEX(Sheet2!$A:$XX,MATCH($C2,Sheet2!$A:$A,0),MATCH(D$1,Sheet2!$1:$1,0))) 最後にF2セルには次の式を入力してF3セルまでドラッグコピーします。 =SUM(D2:E2) 計算後のセルの表示は日付表示になっていることでしょうからそれらの範囲を選択して右クリックし「セルの書式設定」の「表示形式」で「標準」を選んでOKすればよいでしょう。

rokyjean
質問者

補足

有難うございます。 説明が分かりにくくてすみません。D1セル~F1セルを記載したのがややこしかったですね。 D1セル~F1セルは、無視でお願いします。 ほしい答えは、10/1~10/20までは”A”、10/21~10/31までは”B”11/1~11/12までは”B”、11/13~11/30までは”C”・・・・(別シートのカレンダーは、3/31まであり、アルファベットもJまであります。)という”A”、”B”、”C”等のアルファベットです。 この場合は、いかがでしょうか?

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

ご質問の直接の回答: シート1に10月のAとBがA2:A3セルに記入してあり,それぞれの開始日付がB2に10/1,B3に10/21のように記入してあるとすると =INDEX(Sheet1!A2:A3,MATCH(C2,Sheet1!B2:B3,1)) のように計算します #以下,あなたの説明不足に対する補足です まず。 VLOOKU関数は「表の左にあるデータから右にあるデータを参照してくる関数」ですから,コタエとしてAまたはBが欲しければ シート1:  A列 … F列  10/1 … A  10/21 … B のように配置して,左側にある日付から右にあるAやBを取ってくるといった配置で表を作ってやらないといけません。通常はこちらの方が数式も簡単なので,このように作成します。 もし,あなたの都合でどうしても「右に置いた日付から左側にあるAやBを参照したい」のでしたら シート2: A列 B列 …  A 10/1 …  B 10/21 … VLOOKUP関数は使えないので,最初に回答したように他の関数を工夫して使います。 次に。 例えばいま,ご相談に掲示されたサンプルの表はBの終了日が10月30日となっていて,10月31日は「AでもBでもない」事になっています。 この状況説明が実は間違いで,10月は1日からのAと21日以降のBの,必ず絶対にどちらかに振り分けられるというお話をしているのであれば,VLOOKUP関数等で出来ます。 丁寧に補足すると,AとBの間もきちんと連続していて,たとえば途中の10月20日が実はAでもBでもないなんて事はゼッタイにありませんね,という事を念押ししています。 またこの点を延長して,今あなたは10月をAとBに分けるお話をされていますが,じゃぁ今計算したい日付として9月や11月の日付が入ってきたら,いったいどうしたいのですか。という部分も説明がヌケてます。

rokyjean
質問者

補足

説明不足ですみません! 補足します。 表は、以下の通り変更しました。 ・表は、10/1~3/31迄で、コタエとしてほしいものは、A~Jです。(もしかすると、今後K以降も増えるかもしれません。)  A列    B列   C列   D列   E列    F列 1 開始日 終了日    I     II     計 2 10/1  10/20      3    4      7     A 3 10/21  10/31     2     1      3     B 4 11/1  11/12      8     3     11     B 5 11/13  11/30     5     2       7      C 6 12/1  12/15      4     6      10     D   ↓       ↓    ↓   ↓     ↓    ↓ (省略してます。) 20 3/20    3/31   5    6     11     J

回答No.1

データのマスタのシート名は「マスタ」! 日付はA列、集計すべきデータ数値がB列以降にある。 データは2~999行にある。 例えば、B列の数値を期間で集計するには、 「I」の所については、 D2: =SUMPRODUCT((マスタ!$A$2:$A$999>=$B2)*(マスタ!$A$2:$A$999<=$C2)*(マスタ!B$2:B$999)) 他の集計データについては、データのある列に変更する。(ここ→「B$2:B$999」) 以下、適当にコピー、データ列が連続していれば横にもコピーできる。