基于其他单元格计算值的Excel公式
我有下表: 我在基于其他单元格计算值的Excel公式,excel,excel-formula,Excel,Excel Formula,我有下表: 我在列中使用以下公式来计算列中的值之和:=SUMIFS(E:E,C:C,LEFT(TRIM(RIGHT([@[Object Name]],LEN([@[Object Name]])-FIND(=”,[@[Object Name]]),4),A:A,INT([@[Result Time]]),但它似乎不起作用 计算公式得出以下结果: 有人能帮你看一下吗?你正在寻找一个对象名为“T054”,而它们看起来都是“CELL=T054CID”。。。因此没有返回任何结果 你到底想做什么 你有什
列中使用以下公式来计算列中的值之和:=SUMIFS(E:E,C:C,LEFT(TRIM(RIGHT([@[Object Name]],LEN([@[Object Name]])-FIND(=”,[@[Object Name]]),4),A:A,INT([@[Result Time]])
,但它似乎不起作用
计算公式得出以下结果:
有人能帮你看一下吗?你正在寻找一个对象名为“T054”,而它们看起来都是“CELL=T054CID”。。。因此没有返回任何结果
你到底想做什么
你有什么理由不能这么做:
=SUMIFS([3G_Traffic_CS],[Object Name],[@[Object Name]],[Result Time],[@[Result Time]])
您还会注意到,我只引用表中的列单元格,而不是整个列。这更有效,并将防止统计表下出现的任何额外值(不太可能,但并非不可能)
备选方案(使用辅助列)
添加包含对象名称修剪值的辅助列,并与该列进行比较:
=SUMIFS([3G_Traffic_CS],[Trimmed Object Name],[@[Trimmed Object Name]],[Result Time],[@[Result Time]])
另一种选择(使用FIND
和SUMPRODUCT
)
如果要包含任何包含修剪值的对象名称,可以使用SUMPRODUCT
的FIND
函数执行此操作:
=SUMPRODUCT(
([Result Time]=[@[Result Time]])*
(ISNUMBER(
FIND(LEFT(TRIM(RIGHT([@[Object Name]],LEN([@[Object Name]])-FIND("=",[@[Object Name]]))),4),
[Object Name]
)
))*
[3G_Traffic_CS]
)
还有另一种选择(根据@Jvdv的评论使用通配符)
同样,这假设您希望包含包含修剪过的站点ID的所有对象名称。只需在修剪过的对象名称的开头和结尾添加一个“*”
=SUMIFS([3G_Traffic_CS],
[Object Name],
CONCAT("*",
LEFT(TRIM(RIGHT([@[Object Name]],LEN([@[Object Name]])-FIND("=",[@[Object Name]]))),4),
"*"
),
[Result Time],
INT([@[Result Time]])
)
您正在寻找一个对象名“T054”,而它们看起来都是“CELL=T054CID”。。。因此没有返回任何结果
你到底想做什么
你有什么理由不能这么做:
=SUMIFS([3G_Traffic_CS],[Object Name],[@[Object Name]],[Result Time],[@[Result Time]])
您还会注意到,我只引用表中的列单元格,而不是整个列。这更有效,并将防止统计表下出现的任何额外值(不太可能,但并非不可能)
备选方案(使用辅助列)
添加包含对象名称修剪值的辅助列,并与该列进行比较:
=SUMIFS([3G_Traffic_CS],[Trimmed Object Name],[@[Trimmed Object Name]],[Result Time],[@[Result Time]])
另一种选择(使用FIND
和SUMPRODUCT
)
如果要包含任何包含修剪值的对象名称,可以使用SUMPRODUCT
的FIND
函数执行此操作:
=SUMPRODUCT(
([Result Time]=[@[Result Time]])*
(ISNUMBER(
FIND(LEFT(TRIM(RIGHT([@[Object Name]],LEN([@[Object Name]])-FIND("=",[@[Object Name]]))),4),
[Object Name]
)
))*
[3G_Traffic_CS]
)
还有另一种选择(根据@Jvdv的评论使用通配符)
同样,这假设您希望包含包含修剪过的站点ID的所有对象名称。只需在修剪过的对象名称的开头和结尾添加一个“*”
=SUMIFS([3G_Traffic_CS],
[Object Name],
CONCAT("*",
LEFT(TRIM(RIGHT([@[Object Name]],LEN([@[Object Name]])-FIND("=",[@[Object Name]]))),4),
"*"
),
[Result Time],
INT([@[Result Time]])
)
结果并不令人惊讶。您的条件范围是C列(对象名称),而您的条件只是其中的一部分。不知道您想在这里做什么。@JvdV我对C列的标准是=
后的前四个字母。公式LEFT(TRIM(RIGHT([@[Object Name]],LEN([@[Object Name]])-FIND(“=”,[@[Object Name]]),4)
重新运行=
之后的前四个值。分离公式是可行的,但当我一起使用它们时就不行了。换言之:如果你的范围有“ABC123”这样的值,你检查它们的值是否为“123”。结果会怎样?它们将是FALSE
…@JvdV我正在尝试查找它们的值是否包含123,并计算它是否包含123,然后您必须在您的条件中使用通配符。例如:“*”&[用以下字符结束字符串]
结果并不令人惊讶。您的条件范围是C列(对象名称),而您的条件只是其中的一部分。不知道您想在这里做什么。@JvdV我对C列的标准是=
后的前四个字母。公式LEFT(TRIM(RIGHT([@[Object Name]],LEN([@[Object Name]])-FIND(“=”,[@[Object Name]]),4)
重新运行=
之后的前四个值。分离公式是可行的,但当我一起使用它们时就不行了。换言之:如果你的范围有“ABC123”这样的值,你检查它们的值是否为“123”。结果会怎样?它们将是FALSE
…@JvdV我正在尝试查找它们的值是否包含123,并计算它是否包含123,然后您必须在您的条件中使用通配符。例如:“*”&[以下字符以结束字符串]
感谢您的回复。T054只是一个单元格,还有其他单元格T055、T056等。如果我想不出方法,我可能不得不使用辅助列,但我想避免这样做,因为sheet alrady的计算时间太长。您仍然没有解释为什么要修剪对象名?为什么我的第一个建议不能满足你的要求?此外,仅引用表列而不是整列有助于加快计算速度。对象名称很长,末尾有数字,但不同的单元格有其名称,但同一站点的单元格将在对象名称内有站点ID,即T054;我正在尝试对同一站点的单元格值求和,即T054中的所有单元格。SUMPRODUCT
比使用通配符要慢,但仍然是一个不错的选择+No,您的答案是简洁完整的!留着吧。至于速度…你必须在一个大数据集上找到答案=)谢谢你的回复。T054只是一个单元格,还有其他单元格T055、T056等。如果我想不出方法,我可能不得不使用辅助列,但我想避免这样做,因为sheet alrady的计算时间太长。您仍然没有解释为什么要修剪对象名?为什么我的第一个建议不能满足你的要求?此外,应该仅引用表列,而不是整个列