求助:获取列中上方最后重复值对应列的数组以计算空驶距离
列内最后重复值的数组提取方案(空驶距离计算用)
一、谷歌表格数组公式实现
假设你的名称列是A列,目的地列是D列,出发地列是C列,要在E列生成origin数组(当前行上方最后一次出现相同名称对应的目的地),F列生成destination数组(当前行的出发地):
- E2单元格输入数组公式(输入后按
Ctrl+Shift+Enter,谷歌表格自动识别数组逻辑):
=ARRAYFORMULA(IF(ROW(A2:A)=2,"",VLOOKUP(A2:A,QUERY(A1:D1:INDEX(D:D,ROW(A2:A)-1),"SELECT Col1, Col4 ORDER BY Col1, Col2 DESC"),2,FALSE)))
逻辑说明:
QUERY部分对当前行上方的所有数据,按名称分组后保留最新的目的地记录VLOOKUP匹配当前名称,提取对应的最新目的地作为origin
- F2单元格直接引用出发地列生成
destination数组:
=ARRAYFORMULA(IF(A2:A="","",C2:C))
二、Google Apps Script 实现
如果需要脚本自动化处理,替换你现有的高亮脚本为以下代码:
function getLastDuplicateDestinations() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const data = sheet.getDataRange().getValues(); const nameMap = new Map(); // 存储每个名称最后一次出现的目的地 const originArray = []; const destinationArray = []; // 从第二行开始遍历(假设第一行是表头) for (let i = 1; i < data.length; i++) { const currentName = data[i][0]; // A列名称 const currentDestination = data[i][3]; // D列目的地 const currentOrigin = data[i][2]; // C列出发地 // 提取当前名称对应的历史最后目的地 originArray.push(nameMap.has(currentName) ? [nameMap.get(currentName)] : [""]); destinationArray.push([currentOrigin]); // 更新记录,保存当前名称最新的目的地 nameMap.set(currentName, currentDestination); } // 将结果写入E2:F列 sheet.getRange(2, 5, originArray.length, 1).setValues(originArray); sheet.getRange(2, 6, destinationArray.length, 1).setValues(destinationArray); }
使用提示:
- 根据你的实际列位置调整代码中的索引(比如
data[i][0]对应A列,按需修改数字) - 在谷歌表格「扩展程序」-「Apps Script」中粘贴代码,保存后运行即可生成目标数组
内容的提问来源于stack exchange,提问作者Max Yusupov
相关产品推荐
相关产品推荐

