[[20210902203106]] 『シンプルな計算式にしたい(IF, Vlookup)』(太陽) ページの最後に飛ぶ

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

 

『シンプルな計算式にしたい(IF, Vlookup)』(太陽)

初めまして。
下記について、計算式で答えが出た事は出たのですが、もっと簡単にできるのでは?と思い、ご教授頂ければ…と思います。
(マクロの方が簡単という場合は、そちらについても教えて頂けると助かります)

やりたいこと
A列に検索キー1、B列に検索キー1に対応する日にちが書かれています。
一方で、I列に検索キー2、J列に検索キー2に対応する日にちが書かれています。

   A列      B列       	
 1 <検索キー1><日にち>
 2  A00-100	日にち未定
 3  A00-099	日にち未定
 4  A00-098	2021/8/30
 5  A00-097	2021/8/29
 6  A00-096	2021/8/20
 7  B00-100	2021/8/20
 8  A00-095	2021/8/19
 9  A00-094	2021/7/15
 10 A00-093	2021/7/15
 11 A00-092	2021/8/2
 12 A00-091	2021/6/1

   I列      J列
 1 <検索キー2><日にち>
 2 A00-099	日にち未定
 3 A00-095	2021/8/10
 4 A00-094	2021/7/15
 5 A00-093	日にち未定
 6 A00-092	2021/8/5
 7 A00-091	2021/5/1

検索キー1と2を見比べて、下記条件で分類をしたいです。(ちなみに検索キー2のNo.は、検索キー1では必ず登場します)
Aの分類→検索キー1にしかキーがないもののうち、B列の日にちが未定でないもの。
Aの分類→検索キー2の日付が未定であり、検索キー1の日付が未定でないもの

A-2の分類→検索キー1の日付 > 検索キー2の日付となっているもの

Bの分類→検索キー1にあるのに検索キー2にないもののうち、検索キー1の日付が未定のもの
Bの分類→検索キー1, 2共に、日にちが未定のもの

最終的なアウトプット

   G列          	
 1 <output>
 2  B	
 3  B	
 4  A	
 5  A	
 6  A	
 7  A	
 8  A-2	
 9  	
 10 A	
 11 	
 12 A-2

D列、E列、F列に計算の補助列を作成し、G列にoutputを計算する式を作成しました。

D列の式
 =IFERROR(IF(VLOOKUP(A2,I:I,1,FALSE)=A2,""),"新規")
E列の式
 =IFERROR(VLOOKUP(A2,I:J,2,FALSE),"")
F列の式
 =IF(E2="","",IFERROR(IF(B2>E2,"日にち更新",""),""))
G列の式
 =IF(AND(D2="新規",B2<>"日にち未定"),"A",IF(AND(E2="日にち未定",B2<>"日にち未定"),"A",IF(AND(D2="新規",B2="日にち未定"),"B",IF(AND(E2="日にち未定",B2="日にち未定"),"B",IF(F2="日にち更新","A-2","")))))

宜しくお願いいたします。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 作業列なしで・・・

 どこか空いた列の2行目
 =IF(COUNTIF(I:I,A2)=0,IF(COUNT(B2),"A","B"),IF(ISTEXT(VLOOKUP(A2,I:J,2,FALSE)),IF(COUNT(B2),"A","B"),IF(N(B2)>VLOOKUP(A2,I:J,2,FALSE),"A-2","")))
 下コピー

 少なくとも例示通りにはなります。

 以上
(笑) 2021/09/02(木) 23:00 数式変更 23:14

 ↓ でもいいかも
 =IF(OR(COUNTIF(I:I,A2)=0,ISTEXT(VLOOKUP(A2,I:J,2,FALSE))),IF(COUNT(B2),"A","B"),IF(N(B2)>VLOOKUP(A2,I:J,2,FALSE),"A-2",""))

 例示のデータでしか試してませんけど

 以上
(笑) 2021/09/02(木) 23:37

笑様

ありがとうございます。
なるほど、、、日付、数値、文字の組合せを関数でうまく計算させていけば、このように計算可能なのですね。
非常に勉強になりました。

追加で大変恐縮ですが、実際は"日にち未定"の部分が"#N/A"なのですが、その状態では厳しいでしょうか?
"#N/A"は数式ではなく、他から値で貼ってきている一応文字?なのですが、
私が最初に試した時、いくら値で貼っていてもエラーとみなされてしまうのかうまくいかず、
"#N/A"を→"日にち未定"に書き換えたものを使っていました。

いずれにせよ、今回教えて頂いた事で、関数の使い方の幅が色々広がりそうです。
笑さんのように、今後柔軟に考えられるように頑張りたいと思います。
ありがとうございました!
(太陽) 2021/09/03(金) 05:38


笑様
#N/Aでも教えて頂いた式のISTEXTを→ISERRORにしたら出来ました。
今回は本当にありがとうございました。
(太陽) 2021/09/03(金) 08:37

 >#N/Aでも教えて頂いた式のISTEXTを→ISERRORにしたら出来ました。

 A列とI列、両方にあって
 B列が #N/A、J列が日付の場合に #N/A になりませんか?

 ↓ でどうなりますか?
 =IF(ISNA(VLOOKUP(A2,I:J,2,FALSE)),IF(COUNT(B2),"A","B"),IF(IFERROR(B2,0)>VLOOKUP(A2,I:J,2,FALSE),"A-2",""))

 ■ついでに・・・
 当初の質問通り、#N/A ではなく「日にち未定」の場合

 ↓ でよかったかも
 =IF(COUNT(VLOOKUP(A2,I:J,2,FALSE))=0,IF(COUNT(B2),"A","B"),IF(N(B2)>VLOOKUP(A2,I:J,2,FALSE),"A-2",""))

 以上
(笑) 2021/09/03(金) 09:23

 >=IF(ISNA(VLOOKUP(A2,I:J,2,FALSE)),IF(COUNT(B2),"A","B"),IF(IFERROR(B2,0)>VLOOKUP(A2,I:J,2,FALSE),"A-2",""))

 IFERROR → IFNA でもオッケー

 以上、参考まで
(笑) 2021/09/03(金) 09:34

笑様
色々ありがとうございます。
昨日の最初にご提示して頂いた方ですと、ISERRORだとエラーになりますが、
2度目に提示して頂いた方ですとISERRORでもいきました。

今回教えて頂いたものも、さらにシンプルですね。
ほんと目から鱗です。ありがとうございます。色々なパターンで抜け漏れないか確認しつつ、
今後活用させて頂きます。
(太陽) 2021/09/03(金) 10:36


コメント返信:

[ 一覧(最新更新順) ]


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