『別行の答えで結果がかわる数式の処理を軽くしたい』(エリス)
何百行の計算で、ほかの行の答えによって該当業の答えが変わる数式を作ったのですが、
データの数が多くて処理が重いのです
処理速度を上げるためにはどのように改善すればよいでしょうか?
A2=IF(AND((B2="大阪")+(C2="大阪"),250000<D2,D2<260000),IF(C
OUNTBLANK(K2:N2),"■NG",IF(SUMPRODUCT((D2=D:D)*(LEFT(I2,10)=LEFT(I:I,10)),(L:L="")+(N:N="")),"◆確認","□OK")),"◇対象外")
A3以下コピー(150件〜1000件以上)
・『B2かC2が【大阪】かつD2が250000〜260000』ではない場合“◇対象外”
・『対象外ではない』かつ『K2〜N2に空白を含む』の場合 “■NG”
・『対象外・NGではない』がつ『K2〜N2に空白がない』かつ
『I列の左10文字※ とD列が一致する行がNG』の場合 “◆確認”
・上記以外の場合 “□OK”
※I列の左10文字 は意図としては日付が同じなら、なのだが数値として扱うとI1の見出しでエラー(#value)が出るため、文字として処理している
*該当行より下も判定に含める必要あり
例:A100が“■NG”なのでA10が“◆確認”
< 使用 Excel:Excel2016、使用 OS:Windows10 >
SUMPRODUCT関数で列の全体参照をするのはまずいんじゃないですか? (100万行もあるので)
これでいけそうな気がするなぁ・・ ↓ A2セル =IF(AND((B2="大阪")+(C2="大阪"),250000<D2,D2<260000),IF(COUNTBLANK(K2:N2),"■NG",IF(COUNTIFS(D:D,D2,I:I,I2,L:L,"")+COUNTIFS(D:D,D2,I:I,I2,N:N,""),"◆確認","□OK")),"◇対象外")
(半平太) 2025/05/22(木) 00:03:44
私も考えてみましたのでいかがでしょうか
A2=IF(AND(B2&C2="大阪",D2<250000,D2>260000),"◇対象外", IF(COUNTBLANK(K2:N2),"■NG", IF(IFERROR(INDEX($A:$A,MATCH(LEFT($L2,10),$D:$D),1),"")="■NG","◆確認","□OK"))) (ささみ) 2025/05/22(木) 11:38:11
ごめんなさい一部ミスを見付けたので修正します
=IF(AND(B3&C3="大阪",OR(D3<250000,D3>260000)),"◇対象外", IF(COUNTBLANK(K3:N3),"■NG", IF(IFERROR(INDEX($A:$A,MATCH(LEFT($L3,10),$D:$D),1),"")="■NG","◆確認","□OK"))) (ささみ) 2025/05/22(木) 11:42:52
ささみ さん
こちらの言葉での説明が正しく伝わっていなかったようで、やりたいことと違う内容になってしまってます
訂正前:『I列の左10文字※ とD列が一致する行がNG』の場合
訂正後:『(I2の左10文字とI列の左10文字※の値)(D2とD列の値)が一致する行(複数)でA列がNGのものがある』
例:
_A____ _D____ _E_________________ _K____ _L____ _M____ _N 1 判定 ID データ作成日 出庫日 作業者 入庫日 作業者 11 □OK 252135 2025-05-20 09:23:13 (省略) 1271 (省略) 1631 12 ■NG 251718 2025-05-20 10:17:46 (省略) 1888 _ _ 13 ◆確認 251718 2025-05-20 10:21:46 (省略) 1888 (省略) 1915 14 □OK 252135 2025-05-20 10:22:48 (省略) 1888 (省略) 1915
半平太 さん
このやりかたでほぼ成功です。
I列は時刻情報をもっているので、COUNTIFS内の『I2』を『LEFT(I2,10)&"*"』にして満足のいく処理速度が出せました。
(エリス) 2025/05/22(木) 19:15:57
>エリスさん そういう意味だったんですね 失礼しました
解決できたようで何よりです! (ささみ) 2025/05/23(金) 10:22:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.