例如,我有这个数据,
我想过滤“美国”的数据并将其复制到另一张纸上,但如果满足条件,我必须创建一个空白行。例如像这样
可能吗?我也试过
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))
但它没有像我预期的那样工作
例如,我有这个数据,
我想过滤“美国”的数据并将其复制到另一张纸上,但如果满足条件,我必须创建一个空白行。例如像这样
可能吗?我也试过
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))
但它没有像我预期的那样工作
这是一个公式版本:
=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 子句。
由于您提供了 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:
表2:
我的假设是基于你的公式。这些是:
USA。因此在输出上有 2 个空白A2,因此我也调整了代码。如果答案不是您要找的答案,我深表歉意。