Можно ли создать динамический массив, который суммирует разные столбцы в зависимости от строки?

Я знаю, как использовать BYROW(), CHOOSECOLS(), LAMBDA() и т. д. для суммирования столбцов.

например

=BYROW(CHOOSECOLS(B2:M3,1,2,3,4,5,6),LAMBDA(a,SUM(a)))

Я хотел бы суммировать столбцы, но суммируемые столбцы будут разными в каждой строке в зависимости от ячейки в этой строке.

например в строке 1 я хочу суммировать столбцы 1,2,3,4, но во второй строке я хочу суммировать 5,6,7,8,9,10,11 и 12

Я думал что-то вроде:

=BYROW(b2:m3,LAMBDA(a,SUM(CHOOSECOLS(a,TEXTSPLIT(A2,","))))) 

где A2 будет 1,2,3,4, а A3 будет 5,6,7,8,9,10,11,12

Однако это не работает

Это возможно?

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Просто добавьте --, чтобы преобразовать результат TEXTSPLIT в число.

=LAMBDA(csv_col_nums, range_to_sum,
    BYROW(
        csv_col_nums,
        LAMBDA(r,
            LET(
                row_num, ROW(r) -
                    MIN(ROWS(csv_col_nums)) + 1,
                SUM(
                    CHOOSECOLS(
                        INDEX(range_to_sum, row_num, ),
                        --TEXTSPLIT(r, ",")
                    )
                )
            )
        )
    )
)(A2:A3, B2:M3)

Спасибо @nkalvi. Это, конечно, дальше, чем у меня было. Однако вторая строка рассчитывается как 23, что снова является суммой первых 4 столбцов, тогда как для этой строки мне нужна сумма последних 8 столбцов (46).

andy leary 02.07.2024 14:12

Пожалуйста, посмотрите мое обновление.

nkalvi 02.07.2024 14:23

используя ваш последний снимок экрана, я бы хотел, чтобы первое число в созданном массиве было 26: 6+3+10+7 (первые 4 числа в первой строке), а второе число было 42: 7+1+3+ 4+10+7+9+1 (последние 8 цифр последней строки)

andy leary 02.07.2024 14:25

@andyleary, посмотри мой ответ, что тебе нужно сделать, установка, которую ты имеешь, делает ее более динамичной и мощной. Хорошая установка и идея. Вам понадобится TAKE() кулак для разделения и DROP() для SUM(). Базовое понимание BYROW(). при использовании BYROW() для SUM() используйте весь диапазон и делайте то же самое в пользовательских вычислениях, используя LET() или напрямую.

Mayukh Bhattacharya 02.07.2024 14:33

@andy, пожалуйста, попробуй обновление, когда у тебя будет возможность. При этом номера столбцов могут быть любыми или даже постоянными {"1,2","3,6"} (хотя количество строк должно быть одинаковым).

nkalvi 02.07.2024 14:47

@MayukhBhattacharya, вы знаете, почему формулы не будут работать, если я ссылаюсь на массив, а не на диапазон: =BYROW(FILTER($a$2:$m$3,$n$2:$n$5 = "yes"),LAMBDA( α,SUM(CHOOSE‌​COLS(DROP(α,,1),--TE‌​XTSPLIT(TAKE(α,,1),"‌​,"))))), похоже, он берет первый столбец, на который ссылаются, в каждый случай, т.е. первый и пятый соответственно

andy leary 02.07.2024 15:19

@andyleary, это другой вопрос, не могли бы вы сделать новый пост, поскольку согласно SO, в каждом посте один вопрос. Я стараюсь соблюдать правила! Но поскольку это связано, я сообщу вам как можно скорее!

Mayukh Bhattacharya 02.07.2024 15:22

@Маюх Бхаттачарья. Извините, я новичок в этом. Спасибо. я сделал

andy leary 02.07.2024 15:40
Ответ принят как подходящий

Довольно просто использовать весь диапазон в функции BYROW(), TAKE() первый столбец, а для суммы DROP() первый столбец:


=BYROW(A2:M3,LAMBDA(α,SUM(CHOOSECOLS(DROP(α,,1),--TEXTSPLIT(TAKE(α,,1),",")))))

Другие вопросы по теме