Google Spreadsheets中的下拉相关菜单

时间:2015-12-09 23:49:54

标签: google-sheets

我是milarky这个公式的新手,并在我的农场的Google表格上制作了一个电子表格。我想让除草剂(G栏)下拉,取决于C栏中选择的内容。

我对每种作物的要求列在下拉选项卡(colm M-V)

https://docs.google.com/spreadsheets/d/1wBaHVORL86C38FO1sRapxR3Ps9TuYfAFRzH12daN64k/edit?usp=sharing

ps:任何人认为对我和我的农场都有好处的任何其他想法将不胜感激

2 个答案:

答案 0 :(得分:0)

附件是指向我对电子表格所做修订的链接。我添加了一个Sheet4,它会读取您的下拉列表表。我添加了Herbicides Needed下拉菜单然后读取Sheet4。看看它,如果您有任何问题,请告诉我。

https://docs.google.com/spreadsheets/d/1P2hKDqb-MtOW5Ov3MZiac8LMQLwSV-k4b1R8SIUFyeE/edit?usp=sharing

答案 1 :(得分:0)

我六个月前在YouTube上回答了这个问题(https://youtu.be/rW9T4XZy-7U)。经典的方法,在A列中你有主下拉列表,在B列你有第二个下拉列表,它依赖于列A中的第一个,在下面。我还添加了脚本,以便能够在C列中依赖于列B具有第二个从属下拉列表。此脚本要求您已在电子表格中设置已命名的范围,否则它将无法工作。

function depDrop_(range, sourceRange){
 var rule = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange, true).build();
 range.setDataValidation(rule);
}

function onEdit (){
  var aCell = SpreadsheetApp.getActiveSheet().getActiveCell();
  var aRow = aCell.getRow();
  var aColumn = aCell.getColumn();

if (aColumn == 1 && SpreadsheetApp.getActiveSheet()){
  var range = SpreadsheetApp.getActiveSheet().getRange(aRow, aColumn + 1);
  var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue());
  depDrop_(range, sourceRange);
}

else if (aColumn == 2 && SpreadsheetApp.getActiveSheet()){
  var range = SpreadsheetApp.getActiveSheet().getRange(aRow, aColumn + 1);
  var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue());
  depDrop_(range, sourceRange);
}
}

放置这些下拉列表的不太常见的方法是按行,这意味着主下拉列表在A1中,依赖下拉列表在A2中。要实现这一目标,您只需要更改" aColumn"到" aRow"在if子句的开头,在" aRow"之后加上+ 1而不是" aColumn"在if子句的中间。例如:

if (aRow == 1 && SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")){
var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange(aRow + 1, aColumn);
var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue());
depDrop_(range, sourceRange);
}