在列的每个单元格中使用lookup-formula(不拖动它)

时间:2017-03-07 10:55:30

标签: excel spreadsheet vlookup

spreadsheet-image showing lookup-formula

我想对列中的每个单元格使用VLookup公式(German = sverweis)。 VLookup范围始终保持不变,但值(m3,m4,m5)必须在每个单元格中更改。

由于我使用表单,新记录总是会进来,因此拖动公式并不是一个好主意。该公式在N列的每个单元格中运行。

我尝试使用数组公式,但不知怎的,我卡住了。

你知道如何解决这个问题吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个使用脚本的技巧,该脚本将编辑链接放入表单响应表中。您将在底部看到我添加了几个简单的公式来将2个单元格添加到一起sheet.getRange(i+1, columnIndex+2).setValue('=B'+intRow+'+C'+intRow);这是您可以放置​​vlookup公式的地方。

您需要从表单的网址中将YOUR-FORM-ID更改为长格式ID。我遇到了麻烦,因为Google现在会在面向用户的表单上隐藏您的ID,因此您需要转到表单编辑器并从那里复制ID。

您还必须更改代码中的工作表名称以匹配您的工作表。

// Form URL
var formURL = 'https://docs.google.com/forms/d/YOUR-FORM-ID/viewform';
// Sheet name used as destination of the form responses
var sheetName = 'Form Responses 1';
/*
 * Name of the column to be used to hold the response edit URLs
 * It should match exactly the header of the related column,
 * otherwise it will do nothing.
 */
var columnName = 'Edit Url' ;
// Responses starting row
var startRow = 2;

function getEditResponseUrls(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var columnIndex = headers[0].indexOf(columnName);
  var data = sheet.getDataRange().getValues();
  var form = FormApp.openByUrl(formURL);
  for(var i = startRow-1; i < data.length; i++) {
    if(data[i][0] != '' && data[i][columnIndex] == '') {
      var timestamp = data[i][0];
      var formSubmitted = form.getResponses(timestamp);
      if(formSubmitted.length < 1) continue;
      var editResponseUrl = formSubmitted[0].getEditResponseUrl();
      Var intRow = i + 1
      sheet.getRange(i+1, columnIndex+1).setValue(editResponseUrl);
      sheet.getRange(i+1, columnIndex+2).setValue('=B'+intRow+'+C'+intRow);
      sheet.getRange(i+1, columnIndex+3).setValue('=H'+intRow+'+E'+intRow);
    }
  }
}

如果您不熟悉脚本编辑器,只需单击工具和脚本编辑器,然后使用此代码替换其中的任何代码。