本帖最后由 cabcyvr 于 2017-9-4 07:36 编辑
以下是慢动作分解
1. 建立两个辅助单元格
R4=MAX(IF(计件!AR$4:AR$1000<>"",ROW(计件!AR$4:AR$1000)))-3 数组执行后复制到 S4
R4为68-3,表示AR列最后一个非空单元格位置为AR68,有效范围为65
R5为14-3,表示AS列最后一个非空单元格位置为AS14,有效范围为11
目的是为了减少B列公式的长度和让你看的清楚一些。
2. B4=IF(A4="","",IF(AND(ROW(A1)<=$R$4,ISNUMBER(MATCH(A4&C4,计件!$AR$4:$AR$1000,))),"司机",IF(AND(ROW(A1)<=$R$4+$S$4,ISNUMBER(MATCH(A4&C4,计件!$AS$4:$AS$1000,))),"跟车1","跟车2"))) 普通公式执行,下拉到底
因为 A列的数值肯定是从 AR,AS和 AT提取得来的,所以只需用下拉后的ROW(A1) 数值来判断应该在哪一列去查询“日期/姓名”,
当 B列公式下拉到B69时,参数中ROW(A66)=66,正好超出AR列 的有效范围,所以改到AS列去查找,条件是ROW()序列号必须要小于等于65+11,再超出范围的话(只要不是空)绝对是AT列的数据,不用再浪费时间去设第三个条件去判断。
或者
如果想在B列一个公式得到结果,把R4和S4的数组公式替代现在公式中的R4 和 S4 即可,那样的话B列的公式就又成为了数组。。。。
=IF(A4="","",IF(AND(ROW(A1)<=MAX(IF(计件!AR$4:AR$1000<>"",ROW(计件!AR$4:AR$1000)))-3,ISNUMBER(MATCH(A4&C4,计件!$AR$4:$AR$1000,))),"司机",IF(AND(ROW(A1)<=MAX(IF(计件!AR$4:AR$1000<>"",ROW(计件!AR$4:AR$1000)))-3+MAX(IF(计件!AS$4:AS$1000<>"",ROW(计件!AS$4:AS$1000)))-3,ISNUMBER(MATCH(A4&C4,计件!$AS$4:$AS$1000,))),"跟车1","跟车2")))数组
或者 (此公式不在附件内)
=IF(A4="","",IF(ROW(A1)<=MAX(IF(计件!AR$4:AR$1000<>"",ROW(计件!AR$4:AR$1000)))-3,"司机",IF(ROW(A1)<=MAX(IF(计件!AR$4:AR$1000<>"",ROW(计件!AR$4:AR$1000)))-3+MAX(IF(计件!AS$4:AS$1000<>"",ROW(计件!AS$4:AS$1000)))-3,"跟车1","跟车2")))
数组
如前所述,A列数据肯定是从AR/AS/AT列得到,直接用公式中的累计ROW(A1)数值来判断是哪一个职位,此时不需要去判断AC列组合是否在三列中的哪一列存在。