Google 表格 - 从多个 sheet 选项卡中提取数据的双向查找
Google Sheets - Two-way lookup pulling data from multiple sheet tabs
我一直在开发 sheet,我想在其中设置输入选项卡和输出选项卡。
输入选项卡基本上是一个 table,输出选项卡将是一个日历(各种)。
在我的例子中:
Sheet1 = 输入选项卡
Sheet2 = 输出选项卡
我希望有一个 vlookup,可以从 Sheet2(输出)中提取其 search_key 并针对 Sheet1 中的范围进行搜索。
我一直在搞乱以下内容(例如绿色单元格 Sheet2):
=IFERROR(VLOOKUP(A2,Sheet1!$A:$C,MATCH(B1,Sheet1!$A:$C,0),False))
我也尝试过使用 hlookup 而不是 MATCH 的变体,但运气不佳。
我遇到的问题是我不知道在哪里放置我的列索引。在我的示例 sheet 中,我使用单向 vlookup(蓝色单元格 Sheet2)工作,returns 使用此索引从 Sheet1(长度列)中获得所需的值。在双向查找中不可能这样做吗?
下面是一个 link 示例:
https://docs.google.com/spreadsheets/d/1_nqH-XOxNhQAUVJzesNBZeMci7AV9RowSQUnptAruPc/edit?usp=sharing
在 Apps 脚本中尝试 运行 这个函数:
function myFunction() {
var ss = SpreadsheetApp.getActive();
var sheet1 = ss.getSheetByName('Sheet1');
var sheet2 = ss.getSheetByName('Sheet2');
var firstRow = 2;
var numRows = sheet1.getLastRow() - 1;
var firstCol = 1;
var numCols = sheet1.getLastColumn();
var inputData = sheet1.getRange(firstRow, firstCol, numRows, numCols).getValues();
var numBrands = sheet2.getLastRow();
var outputRange = sheet2.getDataRange();
var outputData = outputRange.getValues();
// Iterating through each row in Sheet1 data:
for(var i = 0; i < numRows; i++) {
// Iterating through each row in Sheet2:
for(var j = 1; j < outputData.length; j++) {
// Iterates through each cell for each row in Sheet2.
for(var k = 1; k < outputData[0].length; k++) {
var inputBrand = inputData[i][0];
var outputBrand = outputData[j][0];
var inputDate = inputData[i][1];
var outputDate = outputData[0][k];
// It checks whether the date and brand corresponding to each cell
// (same row or column) matches the date and brand in the current
// row in Sheet1
if(inputBrand == outputBrand && inputDate.toString() == outputDate.toString()) {
var inputLength = inputData[i][2];
sheet2.getRange(j+1, k+1, 1, 1).setValue(inputLength);
}
}
}
}
}
我一直在开发 sheet,我想在其中设置输入选项卡和输出选项卡。 输入选项卡基本上是一个 table,输出选项卡将是一个日历(各种)。
在我的例子中:
Sheet1 = 输入选项卡
Sheet2 = 输出选项卡
我希望有一个 vlookup,可以从 Sheet2(输出)中提取其 search_key 并针对 Sheet1 中的范围进行搜索。
我一直在搞乱以下内容(例如绿色单元格 Sheet2):
=IFERROR(VLOOKUP(A2,Sheet1!$A:$C,MATCH(B1,Sheet1!$A:$C,0),False))
我也尝试过使用 hlookup 而不是 MATCH 的变体,但运气不佳。
我遇到的问题是我不知道在哪里放置我的列索引。在我的示例 sheet 中,我使用单向 vlookup(蓝色单元格 Sheet2)工作,returns 使用此索引从 Sheet1(长度列)中获得所需的值。在双向查找中不可能这样做吗?
下面是一个 link 示例: https://docs.google.com/spreadsheets/d/1_nqH-XOxNhQAUVJzesNBZeMci7AV9RowSQUnptAruPc/edit?usp=sharing
在 Apps 脚本中尝试 运行 这个函数:
function myFunction() {
var ss = SpreadsheetApp.getActive();
var sheet1 = ss.getSheetByName('Sheet1');
var sheet2 = ss.getSheetByName('Sheet2');
var firstRow = 2;
var numRows = sheet1.getLastRow() - 1;
var firstCol = 1;
var numCols = sheet1.getLastColumn();
var inputData = sheet1.getRange(firstRow, firstCol, numRows, numCols).getValues();
var numBrands = sheet2.getLastRow();
var outputRange = sheet2.getDataRange();
var outputData = outputRange.getValues();
// Iterating through each row in Sheet1 data:
for(var i = 0; i < numRows; i++) {
// Iterating through each row in Sheet2:
for(var j = 1; j < outputData.length; j++) {
// Iterates through each cell for each row in Sheet2.
for(var k = 1; k < outputData[0].length; k++) {
var inputBrand = inputData[i][0];
var outputBrand = outputData[j][0];
var inputDate = inputData[i][1];
var outputDate = outputData[0][k];
// It checks whether the date and brand corresponding to each cell
// (same row or column) matches the date and brand in the current
// row in Sheet1
if(inputBrand == outputBrand && inputDate.toString() == outputDate.toString()) {
var inputLength = inputData[i][2];
sheet2.getRange(j+1, k+1, 1, 1).setValue(inputLength);
}
}
}
}
}