基于其他单元格计算值的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的计算时间太长。您仍然没有解释为什么要修剪对象名?为什么我的第一个建议不能满足你的要求?此外,应该仅引用表列,而不是整个列