[[20250614000151]] 『関数で抽出』(松村) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『関数で抽出』(松村)

お尋ねします。
以下のような表がありまして、A列は番号、B列は年、C列は月です。
A列の2513には、4月と5月と6月がありますので、3つとも抽出したいのですが、この場合どのような関数にすれば抽出できるでしょうか?
シート2のB1=VLOOKUP($A1,'シート1'!$A:$C,3,FALSE)に設定して、B列からD列に以下のように抽出したいのです。
番号によっては、単月だけの場合もありますし、最大3カ月の場合もあるという想定です。
お力添えをお願いいたします。

シート1
___A____B_______C__D__E__F
1__2513 2025 4
2__2513 2025 5
3__2513 2025 5
4__2513 2025 6
5__2513 2025 6
6__2513 2025 6
7__2514 2025 6
7__2514 2025 6
8__2514 2025 6
9__2515 2025 6
10_2515 2025 6
11_2515 2025 6
12_2515 2025 6
13_2515 2025 6
14_2515 2025 6

シート2
___A____B__C__D
1__2513_4__5__6
2__2514_6
3__2515_6



< 使用 Excel:Excel2019、使用 OS:Windows10 >


 作業列としてシート1のD1に
=COUNTIFS(A$1:A1,A1,B$1:B1,B1,C$1:C1,C1)
↓コピペ
シート2のB1に
=IFERROR(INDEX(シート1!$C$1:$C$14,AGGREGATE(15,6,ROW($1:$14)/((シート1!$A$1:$A$14=$A1)*(シート1!$D$1:$D$14=1)),COLUMN(A1))),"")
→↓コピペ
(はてな) 2025/06/14(土) 01:27:07

 似たようなことですが、作業列は使いません。

 Sheet2のB列には、提示されたVLOOKUPの式が入っているものとします。

 Sheet2のC1セル
 =IFERROR(AGGREGATE(15,6,Sheet1!$C$1:$C$100/((Sheet1!$A$1:$A$100=$A1)*(COUNTIF($B1:B1,Sheet1!$C$1:$C$100)=0)),1),"")
 右と下にコピーです

 ・シート名や範囲はそちらで調整のこと
 ・範囲をVLOOKUPの式のように「列全体」にするのは避けてください(処理が重くなる)
    
(TI) 2025/06/14(土) 02:41:09

 作業列を使ってもよければ

 Sheet1のD1セル(作業列)
 =IF(COUNTIFS($A$1:A1,A1,$C$1:C1,C1)=1,A1,"")
 下にコピー

 Sheet2のB1セル
 =IFERROR(AGGREGATE(15,6,Sheet1!$C$1:$C$100/(Sheet1!$D$1:$D$100=$A1),COLUMN(A1)),"")
 右と下にコピー

 実際のセル位置がサンプル表と違っていても、COLUMN(A1)はそのままにしておくこと
 
(TI) 2025/06/14(土) 02:43:44

はてなさん、TIさん、ありがとうございます。
シート1に作業列は作りたくないため、TIさんの最初の方について、お尋ねと補足をさせていただきます。
まず、説明として分りやすいように、どちらもA1セルからで説明しておりましたが、実際には以下のセルとなります。TIさんがおっしゃるように、シート2のB列にはVLOOKUPの式が入っています。
よろしくお願いいたします。

シート1
___A_____B_____C
3__2513__2025__4
4__2513__2025__5
5__2513__2025__5
6__2513__2025__6



シート2
___AF____AL_AM_AN_AO
7__2513__4__4__5__6
8__2514__6
9__2515__6



(松村) 2025/06/14(土) 09:22:08


 >シート2
 >___AF____AL_AM_AN_AO
 >7__2513__4__4__5__6

 ・4が2個あるのは間違い
 ・AF列の次がAL列まで飛んでいるのは正しい
 ・AL列にVLOOKUPの式が入っている

 AM7セル
=IFERROR(AGGREGATE(15,6,Sheet1!$C$3:$C$100/((Sheet1!$A$3:$A$100=$AF7)*(COUNTIF($AL7:AL7,Sheet1!$C$3:$C$100)=0)),1),"")
 右と下にコピー
 Sheet1の範囲は実際より少しだけ広めにする。

 データ量がそんなに多くなければ、VLOOKUPをやめ、
 AL列からこの式を入れてもいいでしょう。

 ただし、AK列に「1〜12」の数字は入らないものとします。

 AL7セル
=IFERROR(AGGREGATE(15,6,Sheet1!$C$3:$C$100/((Sheet1!$A$3:$A$100=$AF7)*(COUNTIF($AK7:AK7,Sheet1!$C$3:$C$100)=0)),1),"")
  
(TI) 2025/06/14(土) 13:09:42

TIさん、ありがとうございます。
・4が2個あるのは間違い→ご指摘のとおりです。すみません。
・AF列の次がAL列まで飛んでいるのは正しい→はい。
・AL列にVLOOKUPの式が入っている→はい。
シート1の範囲ですが、無制限にはできないでしょうか?つまり、「Sheet1!$C:$C」みたいに。始まりは3行目からなんですが。。。「Sheet1!$C3:$C」にしてみましたが、エラーになりました。
よろしくお願いいたします。
(松村) 2025/06/14(土) 19:06:35

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.