[[20220228114015]] 『別シートのデータ表から最新日付を取得したい』(wada) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別シートのデータ表から最新日付を取得したい』(wada)

別シートのデータ表から、ある項目の最新日付を取得したいです。

  a b c d
1 x x x x
2 x   x x
3   x
4 x   x

上記のような表の1234が日付で、
abcdが各項目
x が数字(空白もあり)

各abcdごとに空白を除いた一番下の数字の日付を取得したいです。
(aだと4、bは3、cは4、dは2のように)

表を作り直せば良いかもしれませんが、
動き始めてしまい難しい状況です。

よろしくお願いいたします。

< 使用 アプリ:、使用 OS:Windows10 >


最新日付は、Max関数で求められますが・・・。
(アレく) 2022/02/28(月) 12:11

 ・表には必ず「行列番号」を付けてください
 ・結果をどのセル(範囲)に表示するのか、明確にしてください
 ・Excelのバージョンは?

 とりあえず・・・

 ■Sheet1
	A	B	C	D	E
1		a	b	c	d
2	1	3	7	6	2
3	2	1		9	8
4	3		2		
5	4	4		1	

 ■Sheet2
	A	B	C	D
1	a	b	c	d
2	4	3	4	2

 Sheet2のA2
 =LOOKUP(10^9,Sheet1!B2:B5,Sheet1!$A$2:$A$5)
 または
 =MAX(INDEX((Sheet1!B2:B5<>"")*Sheet1!$A$2:$A$5,0))  ← Excel2016以前の場合
 右コピー

 2019以降なら MAXIFS 関数が使えるでしょう。
 それとも、Excelじゃないんですかね?

 以上
(笑) 2022/02/28(月) 12:19 表の訂正 12:27

ややこしくて申し訳ありません。
バージョンはExcel2016です。

名前aの最新日付aをSheet1の表に、Sheet2の表から取得して表示したいです。
シートを増やしたりも可能です。

◆Sheet1
  A   B  
1 氏名  日程
2 名前a 日付a
3 名前b 日付b
4 名前c 日付c
5 名前d 日付d
6 名前e 日付e

◆Sheet2
  A   B   C   D   E   F
 氏名  名前a 名前b 名前c 名前d 名前e
1 日程  日付a 日付 日付 日付 日付
2 日程 日付 日付b 日付 日付
3 日程 日付 日付 日付 日付i 日付
4 日程 日付 日付 日付e
5 日程 日付 日付 日付c 日付d

(wada) 2022/02/28(月) 12:52


 質問が変わったんですか?

 最初の質問は、Sheet2のA列の日付を返すことだと思いますけど
 なんで名前aは「日付a」、名前bは「日付b」になるんですか?

 そもそも「日付a」って何ですか? 
 アルファベットのない「日付」との違いは?

 具体的な日付データを入れて説明してください。
 まさか企業秘密なんてことないですよね?

 以上
(笑) 2022/02/28(月) 13:46

最初の質問のabcdと1234を行列と意識せずに質問してしまい、
意味不明な質問となってしまっておりました。
申し訳ありません。

◆Sheet1
氏名 最新日付
和田 3月25日
山田 2月21日
山本 3月9日
金田 3月15日

◆Sheet2
氏名  和田 山田 山本 金田
2月11日 1   7   3   3
2月21日 4   9   1   1
2月22日 2      8
3月25日 10        2
3月 9日 3      4
3月15日          6

例えば、Sheet2の和田だと一番下は3月9日ですが、
数字が入っていて最新の日付が3月25日なので、
Sheet1の和田の欄に3月25日が表示されるようにしたいです。

自分の理解が足りず申し訳ありません。
よろしくお願いいたします。

(wada) 2022/02/28(月) 16:00


 表には必ず「行列番号」を付けてください。
 金田さんの最新日付が「3月15日」になってますけど、「3月25日」ですよね?

 ◆Sheet2
	A	B	C	D	E
1	氏名	和田	山田	山本	金田
2	2/11	1	7	3	3
3	2/21	4	9	1	1
4	2/22	2		8	
5	3/25	10			2
6	3/9	3		4	
7	3/15				6
8					

 ◆Sheet1
	A	B
1	氏名	最新日付
2	和田	3月25日
3	山田	2月21日
4	山本	3月9日
5	金田	3月25日

 ・Sheet2のA列を数式で空白にしていない
 ・2つのシートの氏名の並び順は同じ

 B2 =MAX(INDEX((INDEX(Sheet2!$B$2:$E$50,0,ROW(A1))<>"")*Sheet2!$A$2:$A$50,0))
 表示形式「日付」で下コピー
 ※範囲は実際の表に合わせる
 ※ROW(A1) はA1セルの値を参照しているわけではありません
  実際の表の位置がどうなっていようと変更しないように

 Sheet2にひとつも数字が入らない人もあるのなら
 表示形式〜ユーザー定義 m"月"d"日";; ← 日付書式の後にセミコロン「;」を2つ付ける

 ■一応言っておくと・・・
 Sheet2のA列を数式で空白にしている場合

 B2 =MAX(IF(INDEX(Sheet2!$B$2:$E$50,0,ROW(A1))<>"",Sheet2!$A$2:$A$50))
 Ctrl+Shift+Enter で確定し、下コピー

 くり返しますが、2019以降にバージョンアップすれば MAXIFS 関数が使えます。 

 以上
(笑) 2022/02/28(月) 17:26

 ↓ でもいいかも

 B2 =IFERROR(AGGREGATE(14,6,Sheet2!$A$2:$A$50/(INDEX(Sheet2!$B$2:$E$50,0,ROW(A1))<>""),1),"")
 普通に Enter だけで確定
 表示形式「日付」で下コピー

 ・Sheet2のA列を数式で空白にしていてもオッケー
 ・数字が一つもない人があっても、表示形式でセミコロンを付ける必要なし

 ところで・・・
 最初の質問は
 >空白を除いた一番下の数字の日付を取得したい
 ということでしたけど、質問が変わったということですよね?

 以上
(笑) 2022/02/28(月) 18:09

返信ありがとうございます。

認識が間違っており、正しく伝えられておりませんでした。
一番下の日付が最新だと思っていましたが、そうではない事案があったのを見落としておりました。
質問が変わって申し訳ありません。

=MAX(INDEX((INDEX(Sheet2!$B$2:$E$50,0,ROW(A1))<>"")*Sheet2!$A$2:$A$50,0)) 上記の数式を試してみましたが、範囲を変更してもエラーが出てしまい取得できませんでした。

=MAX(IF(INDEX(Sheet2!$B$2:$E$50,0,ROW(A1))<>"",Sheet2!$A$2:$A$50)) こちらの数式は氏名に関係なくリストにある最新の日程を取得してしまっております。

申し訳ありませんが、何か良い手はないでしょうか?

※エクセルのバージョンアップは現在のPCでは今すぐは難しいので、
 一旦スプレッドシートに移してMAXIFS関数を使えるようにしました。
(wada) 2022/03/02(水) 11:33


 >2つのシートの氏名の並び順は同じ
  ↑ が大前提なんですけど、そうなってますか?(回答した3つの式すべて)

 なってるのなら、こちらでは3つとも 「2022/02/28(月) 17:26」の表通りの結果になっています。
 ※1つ目の式は「Sheet2のA列を数式で空白にしていない」ことも条件

 >=MAX(INDEX((INDEX(Sheet2!$B$2:$E$50,0,ROW(A1))<>"")*Sheet2!$A$2:$A$50,0))
 >上記の数式を試してみましたが、範囲を変更してもエラーが出てしまい取得できませんでした。
 ・何というエラーですか? 
 ・Sheet2のA列を数式で空白にしていませんか?

 >=MAX(IF(INDEX(Sheet2!$B$2:$E$50,0,ROW(A1))<>"",Sheet2!$A$2:$A$50)) 
 >こちらの数式は氏名に関係なくリストにある最新の日程を取得してしまっております。
  Ctrl+Shift+Enter で確定しましたか?
  ※CtrlキーとShiftキーを押しながら Enter で確定

 >=IFERROR(AGGREGATE(14,6,Sheet2!$A$2:$A$50/(INDEX(Sheet2!$B$2:$E$50,0,ROW(A1))<>""),1),"")  
  この式はどうなったんですか?
  試してないんですか?

 それと、回答の式をコピーするのではなく
 実際に入力した式をコピーして提示してください。

 以上
(笑) 2022/03/02(水) 12:07

>2つのシートの氏名の並び順は同じ
  ↑ が大前提なんですけど、そうなってますか?(回答した3つの式すべて)
並びは同じになってます。

?@
>=MAX(INDEX((INDEX(Sheet2!$B$2:$E$50,0,ROW(A1))<>"")*Sheet2!$A$2:$A$50,0))
スプレッドシートで試したところ、エラーはでませんでしたが、下にコピーしても全て同じ結果が返ってきます。(数字が入力されていた最新の日付)
下記が変更して入力した数式になります。
=ArrayFormula(MAX(IF(INDEX('入力欄'!$H$7:$AU$300,0,ROW(A1))<>"",'入力欄'!$E$7:$E$300)))

?A
>=MAX(IF(INDEX(Sheet2!$B$2:$E$50,0,ROW(A1))<>"",Sheet2!$A$2:$A$50))
こちらも上と同じく全て同じ結果が返ってきます。
=ArrayFormula(MAX(IF(INDEX('入力欄'!$H$7:$AU$300,0,ROW(A1))<>"",'入力欄'!$E$7:$E$300)))

?B
>=IFERROR(AGGREGATE(14,6,Sheet2!$A$2:$A$50/(INDEX(Sheet2!$B$2:$E$50,0,ROW(A1))<>""),1),"")  
こちらは結果が全て空白でした。
=IFERROR(AGGREGATE(14,6,'入力欄'!$E$7:$E$300/(INDEX('入力欄'!$H$7:$AU$300,0,ROW(A1))<>""),1),"")  

という結果になりました。
何度もわかりづらくて申し訳ありません。
(wada) 2022/03/02(水) 13:20


 >スプレッドシートで試したところ
 Googleスプレッドシートのこと?(Excelもスプレッドシートです)
 だとしたら、 Excel2016で試してください。
 
 Googleスプレッドシートなら MAXIFS で解決したんじゃないんですか?

 以上
(笑) 2022/03/02(水) 15:00

コメント返信:

[ 一覧(最新更新順) ]


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