一个单元格中的累积组总和所需的Excel公式

时间:2019-01-30 18:28:27

标签: excel-formula sum grouping

我有两栏。如果第一列中的单元格(x和x + 1)相等,则我需要一个新的第3列的一个单元格中的第2列的总和。

此单元格必须在组顶部的第一个单元格中,其他单元格为空白。

ID, Number, Sum_formula
e, 3, 11
e, 3, 
e, 3,
e, 2, 
u, 5, 5
r, 1, 5
r, 2, 
r, 2, 
w, 6, 20
w, 4, 
w, 3,
w, 2,
w, 1,
w, 2,
w, 1, 
w, 1,

下面是我的尝试,但它仅适用于2组大小:

ID组的大小不同。此外,这并不为第一组工作。 (我可以手动做第一个)

细胞C6式 = IF(A6 = A5, "", SUM(B6,B7))

1 个答案:

答案 0 :(得分:1)

如果您的ID未排序,则可能会有许多相同ID的分组,请将此公式放在C2中并记下长度。

#include <stdio.h>

/* append number to list, returning start of list */
node* addNumber(node* start, int i) {
    node* t;

    t = malloc(sizeof(*t));
    if (t == NULL)
        return start;
    t->next = NULL;
    t->val = i;
    if (start) {
        node* p = start;

        while (p->next)
            p = p->next;
        p->next = t;
    } else {
        start = t;
    }
    return start;
}

/* print elements of list */
void printList(node* list) {
    while (list) {
        printf(" %d", list->val);
        list = list->next;
    }
}

/* free whole list */
void deleteList(node* list) {
    node* t;

    while (list) {
        t = list;
        list = list->next;
        free(t);
    }
}

int main(void) {
    const int test[] = { 2, 3, 4, 2, 5 };
    node* start = NULL;
    int i;

    /* construct a list */
    for (i = 0; i < sizeof(test) / sizeof(test[0]); i++)
        start = addNumber(start, test[i]);
    /* report initial list contents */
    printf("Before:");
    printList(start);
    printf("\n");
    /* delete a number from the list */
    start = deleteNumber(start, 2);
    /* report updated list contents */
    printf("After:");
    printList(start);
    printf("\n");
    /* delete remaining elements of the list to appease Valgrind */
    deleteList(start);
    return 0;
}

一个注意事项:在整个范围都被公式填充之前,它不会产生正确的结果,因为它依赖于其下面的公式的输出来获得正确的结果。

enter image description here


如果对您的ID进行排序以使它们没有多个分组,则可以使用SUMIF():

=IF(A2<>A1,SUM(B2:$B$1040000)-SUM(C3:$C$1040000),"")

enter image description here