如果两个不同的单元格值在定义的范围内,则将行复制到新工作表中

时间:2015-10-14 23:02:09

标签: google-apps-script google-sheets

我想创建一个维护以下内容的Google Spreadsheets文档:

  • 表1(所有条目):未过滤

  • 工作表2(第一级过滤器):从工作表1复制B列> / = 5000 C列> / = 50000

  • 的行
  • 工作表3(第二级过滤器):从工作表1复制B列> / = 5000 AND C列> / = 50000

  • 的行

我创建了一个示例文档供参考,可编辑here

相当有限的编程/脚本体验。

2 个答案:

答案 0 :(得分:1)

如果您正在寻找脚本。虽然您必须自己进行映射,但这就是它的样子。我还没有打开你的文档,但如果你需要一个脚本来进行竞标,这将使它成功。

function sheetMaintain()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s1 = ss.getSheetByName("Sheet1");
  var s2 = ss.getSheetByName("Sheet2");
  var s3 = ss.getSheetByName("Sheet3");

  var r1 = s1.getDataRange();
  var r2 = s2.getDataRange();
  var r3 = s3.getDataRange();

  var data1 = r1.getValues();


  for (var i=0; i<r1.getLastRow(); i++)
  {
    if (data1[i][1]>=5000 || data[i][2]>=50000)
    {
      var colB = data[i][1];
      var colC = data[i][2];

      var lr2 = r2.getLastRow();

      s2.getRange(lr2+1, 1).setValue(colB); //Mapping Col B value to Col A of Sheet 2
      s2.getRange(lr2+1, 2).setValue(colC); //Mapping Col C value to Col B of Sheet 2
    }

    if (data1[i][1]>=5000 && data[i][2]>=50000)
    {
      var colB = data[i][1];
      var colC = data[i][2];

      var lr3 = r3.getLastRow();

      s3.getRange(lr3+1, 1).setValue(colB); //Mapping Col B value to Col A of Sheet 3
      s3.getRange(lr3+1, 2).setValue(colC); //Mapping Col C value to Col B of Sheet 3
    }
  }
}

如果你想在Sheet2或Sheet3中没有任何重复项(从时间上再次运行函数),我还建议你研究一下使用clear()函数并将Sheet2和Sheet3设置为在再次解析Sheet1之前清除。

答案 1 :(得分:0)

我已在两张纸上添加了一个公式,以达到您想要的效果

即。下面的第一个是OR,第二个是AND

=filter('Sheet 1 - All Entries'!A:C,(('Sheet 1 - All Entries'!B:B>=5000) + ( 'Sheet 1 - All Entries'!C:C >=5000)))  
=filter('Sheet 1 - All Entries'!A:C,(('Sheet 1 - All Entries'!B:B>=5000) * ( 'Sheet 1 - All Entries'!C:C >=5000))) 

PS ......我不确定一个公式是否适合您,或者您是否希望通过脚本完成此操作