[[20230710100921]] 『対象者の前回受講日、何日ぶりの受講だったかをそ』(クック) ページの最後に飛ぶ

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

 

『対象者の前回受講日、何日ぶりの受講だったかをそれぞれ抽出したい』(クック)

  A      B        C               D
1  開催年月日 受講者	前回受講日	何日ぶりの受講か
2  2023/03/01 鈴木	-	        -
3  2023/03/02 高橋	-               -
4  2023/03/03 鈴木	2023/03/01	2
5  2023/03/04 鈴木	2023/03/04	1
6  2023/03/05 佐藤	-	        -
7  2023/03/06  高橋	2023/03/02	4
8  2023/03/07 高橋	2023/03/06	1
9  2023/03/08 佐藤	2023/03/05	3
10 2023/03/09 佐藤	2023/03/08	1
11 2023/03/10 鈴木	2023/03/04	7
12 2023/03/11 佐藤	2023/03/09	2
13 2023/03/12 佐藤	2023/03/11	1       

A列,B列が既に入力済みの状態でこのような表を作りたい際には、C列,D列にはどのような関数の組み合わせを入力すればよいのでしょうか。ご教示お願い致します。

< 使用 Excel:unknown、使用 OS:unknown >


 Excelのバージョンは何ですか?
 MAXIFS 関数が使えるのなら、それでできるでしょう。

 ところで例示の表ですけど・・・
 C5セル 「2023/03/04」になってますが、「2023/03/03」では?
 D11セル「7」になってますが、「6」では?

 とりあえず以上です
(笑) 2023/07/10(月) 10:54:03

コメントありがとうございます。
例示のご指摘ですが、いただいた内容が正しいものです(´;ω;`)

バージョンはわかりませんが、MAXIF関数は使用できることを確認できました。
具体的にはどのような関数を組めばよいのか教えていただけますと幸いです。
(クック) 2023/07/10(月) 11:04:56


D11は「6」の間違いとして、つぎの式でどうでしょう。
(笑)さんの書き込みを見ましたが、そのまま書き込みます。

C2: =IF(A2="","",IF(COUNTIF($B$2:B2,B2)=1,"-",INDEX($A$2:A2,AGGREGATE(14,6,ROW($A$1:A1)/($B$2:B2=B2),2))))

D2: =IF(C2="","",IF(C2="-",C2,A2-C2))
(メジロ) 2023/07/10(月) 11:16:29


 >MAXIF関数は使用できることを確認できました。
 MAXIFS 関数のことなら

 C2 =MAXIFS($A$2:A2,$A$2:A2,"<"&A2,$B$2:B2,B2)
 表示形式〜ユーザー定義 yyyy/mm/dd;;"−"
 下コピー

 D2 =IF(C2=0,"−",A2-C2)
 表示形式「標準」で下コピー

 以上
(笑) 2023/07/10(月) 11:24:14

メジロさん
(笑)さん

コメントありがとうございます。
今回例示に出したのは実際に使うものではなく回答いただきやすいように作成した簡易的なもので実際に入力するシートは1000件近くデータがある膨大なものになっていますため、申し訳ないのですがどの関数がどの値を返すために必要なのかお手数ですが解説お願いできますでしょうか…
(クック) 2023/07/10(月) 11:37:36


C列も入力済みではないのですか。
C列の値は何処から持ってきているのですか。
C列に入力済みなら単純に「開催開催年月日-前回受講日=何日ぶりの受講か」でいいと思うけど。
(わからん) 2023/07/10(月) 11:52:54

 >C2 =MAXIFS($A$2:A2,$A$2:A2,"<"&A2,$B$2:B2,B2)
 >表示形式〜ユーザー定義 yyyy/mm/dd;;"−"

 これを試した結果はどうなったんですか?
 うまくいかなかったのなら、どうなってしまったのか
 具体的に説明してください。

 1000行でも回答は変わりませんよ?
 重くなるかどうかは知りませんけど・・・

 以上
(笑) 2023/07/10(月) 12:00:15

わからんさん

コメントありがとうございます。
C列,D列は空欄の状態を想定しています。
例示に出しているのはこういうものが理想です、といった完成形を想定したものになります
A列,B列のみ入力されている状態からC列,D列を導き出すための関数を教えていただきたいです。
(クック) 2023/07/10(月) 12:04:44


(笑)さん

申し訳ございません。
試そうにもどの関数がどの値を出すために必要なのかわからないため試しようがない状態です。
どの関数がどの値を返すために必要なのかお手数ですが解説いただけますと幸いです。
(クック) 2023/07/10(月) 12:31:04


 >試しようがない状態です。
 なんで試しようがないのか全くもって意味不明

 C2セルに提示した式をそのまま入れるだけ。
 変更するところは何もありません。

 それとも実際の表と例示はセル位置が違うとか?
 だったら、実際のセル位置を提示してください。

 一応、質問に答えておくと・・・
 >どの関数がどの値を返すために必要なのか
 MAXIFS が前回受講日を返す。
 C列はそれ以外の関数は使ってません。

 以上
(笑) 2023/07/10(月) 13:04:24

>C列,D列にはどのような関数の組み合わせを入力すればよいのでしょうか
とのご質問に対して

C2: =IF(A2="","",IF(COUNTIF($B$2:B2,B2)=1,"-",INDEX($A$2:A2,AGGREGATE(14,6,ROW($A$1:A1)/($B$2:B2=B2),2))))

D2: =IF(C2="","",IF(C2="-",C2,A2-C2))

との式を書き込んだわけですから、この式を実際の表にコピーして入力し
下にコピーするだけです。

(メジロ) 2023/07/10(月) 13:30:54


 AGGREGATE なら
 C2 =IFERROR(AGGREGATE(14,6,$A$2:A2/($B$2:B2=B2),2),"−")

 たぶん ↓ でもできる
 C2 =IFERROR(LOOKUP(1,0/($B$1:B1=B2),$A$1:A1),"−")
 表示形式「日付」

 D2 =IF(COUNT(C2),A2-C2,"−")

 以上
(笑) 2023/07/10(月) 13:43:36

メジロさん

コメントありがとうございます。
申し訳ございません、Excelでは値が出たのですが当方提出用シートがGoogleスプレッドシートで管理されておりますため、AGGREGATE関数でエラーが発生してしまいました…
多少複雑でも構いませんので、AGGREGATE関数を使用せずに値を出せる関数があれば教えていただきたいです。

先行してお伝えしておけばよかったのですが、コメントを頂いてからになってしまい申し訳ございません。お手数おかけしますがよろしくお願いいたします。
(クック) 2023/07/10(月) 14:16:23


(わからん) 2023/07/10(月) 11:52:54
勘違いしていました。失礼しました。
(わからん) 2023/07/10(月) 14:44:18

 >AGGREGATE関数を使用せずに値を出せる関数
 (笑)さんのでできますよ〜
C2 =MAXIFS($A$2:A2,$A$2:A2,"<"&A2,$B$2:B2,B2)
表示形式ー数字ーカスタム数値形式でyyyy/mm/dd;;"−"[適用]
 下コピー
D2 =IF(C2=0,"−",A2-C2)
表示形式ー数字ーカスタム数値形式で0[適用]

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 >たぶん ↓ でもできる
 >C2 =IFERROR(LOOKUP(1,0/($B$1:B1=B2),$A$1:A1),"−")
の方はExcelではできていますが
Googleスプレッドシートだと
 C2 =ArrayFormula(IFERROR(LOOKUP(1,0/($B$1:B1=B2),$A$1:A1),"−"))
 表示形式ー数字ー日付を選択
 D2 =IF(COUNT(C2),A2-C2,"−")
 何もしない(自動)

 今回も勉強させていただきました(_ _*)
(檸檬) 2023/07/11(火) 23:31:27

コメント返信:

[ 一覧(最新更新順) ]


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