You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:获取列中上方最后重复值对应列的数组以计算空驶距离

列内最后重复值的数组提取方案(空驶距离计算用)

一、谷歌表格数组公式实现

假设你的名称列是A列,目的地列是D列,出发地列是C列,要在E列生成origin数组(当前行上方最后一次出现相同名称对应的目的地),F列生成destination数组(当前行的出发地):

  1. 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
  1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:42:19