我有两栏。如果第一列中的单元格(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))
答案 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;
}
一个注意事项:在整个范围都被公式填充之前,它不会产生正确的结果,因为它依赖于其下面的公式的输出来获得正确的结果。
如果对您的ID进行排序以使它们没有多个分组,则可以使用SUMIF():
=IF(A2<>A1,SUM(B2:$B$1040000)-SUM(C3:$C$1040000),"")