0

例如,我有这个数据,

在此处输入图像描述

我想过滤“美国”的数据并将其复制到另一张纸上,但如果满足条件,我必须创建一个空白行。例如像这样

在此处输入图像描述

可能吗?我也试过

IF(AND(F2=FALSE, NOT(ISBLANK(F2))), "", INDEX(QUERY('Sheet 1'!A2:E, "Select A where A contains '"&"USA"&"'"),COUNTIF($F$2:F2,TRUE),1))

但它没有像我预期的那样工作

4

2 回答 2

0

这是一个公式版本:

=ArrayFormula(
     array_constrain(
        sortn(
          filter(
              {if(A:A="USA",A:A,),if(A:A="USA",B:B,),A:A="USA",
               if(A:A="USA",row(A:A),iferror(vlookup(row(A:A),if(A:A="USA",row(A:A),),1,true),0)+1)},
          A:A<>""),
        1000,2,4,1),
     1000,3)
)

长公式的原因主要是找到一种方法来只用一行来替换一个或多个不以 USA 开头的行。该公式的基础是查找非美国行以获取最近的美国行的行号。同一块中的所有非美国行都具有相同的行号,并且可以使用 Sortn 丢弃(除了第一行)。

在此处输入图像描述

我在开头添加了一个额外的非美国行,以检查这种边缘情况是否有效并落入 Iferror 子句。

于 2021-01-22T20:36:40.893 回答
0

由于您提供了 Google Apps 脚本作为标记,我假设您愿意接受脚本答案?如果是这样,那么我将在下面提供此代码。这是你想要的?

function copyUSA() {
  var sheetSrc = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var sheetDst = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
  var rowSrc = sheetSrc.getLastRow();
  var values = sheetSrc.getRange("A2:A" + rowSrc).getValues().flat();
  
  values.forEach(function (value, index){
    var rowDst = sheetDst.getLastRow() + 1;
    if(value == "USA"){
      // If USA, copy then replace third column with TRUE
      var row = index + 2;
      sheetSrc.getRange(row + ":" + row).copyTo(sheetDst.getRange(rowDst + ":" + rowDst));
      sheetDst.getRange("C" + rowDst).setValue("TRUE");
    }
    else{
      // If not, set third column to FALSE
      sheetDst.getRange("C" + rowDst).setValue("FALSE");
    }
  });
}

表 1:

表 1

表2:

表2

我的假设是基于你的公式。这些是:

  1. 我假设您在没有空白时添加空白USA。因此在输出上有 2 个空白
  2. 如果 USA,第 3 列为 TRUE,否则为 FALSE,数据为空白
  3. 根据您的公式,您的数据似乎从 开始A2,因此我也调整了代码。
  4. 您还将获得公式的第 4 列和第 5 列,但由于您没有在帖子中显示它,因此我不能为其假设任何值。

如果答案不是您要找的答案,我深表歉意。

于 2021-01-22T15:58:39.023 回答