Сложить несколько определённых значений из таблицы

Do1phin

Client
Регистрация
10.07.2015
Сообщения
16
Благодарностей
0
Баллы
3
Ребята, имеется таблица, в которой несколько столбцов, структура вот такая:





Нужно взять их приплюсовать значения из столбца B, друг к другу, но только те, которые удовлетворяют определённому требованию. Например: Нужно узнать сумму чисел из столбца B только для тех строк, в столбце А которых содержатся символы "АА".
Получается так: (В3) 444 + (В7) 888 = 1332 На выходе мы получили 1332 и это число попадает в Переменную_1.

Аналогично и для значений столбца В, для чьих строк в столбце А содержатся символы "ВВ" и "CC".

Подскажите как это проще всего реализовать? а то я уже таких костылей нагородил, что самому страшно становится(( Файл проекта с таблицей прикрепил, помогите пожалуйста.
 

Вложения

Последнее редактирование:

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
379
Баллы
63
Привет
я бы сначала с таблички вибрал только те значения в которых есть нужная строка (значения а). А потом уже сумировал.
Лучше всего работать через с# код.
 

Do1phin

Client
Регистрация
10.07.2015
Сообщения
16
Благодарностей
0
Баллы
3
Привет
я бы сначала с таблички вибрал только те значения в которых есть нужная строка (значения а). А потом уже сумировал.
Лучше всего работать через с# код.
В теории да, я также смотрю на это, а вот как это на практике реализовать?):ah:
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
я против шарпа, если вы не умеете на нем кодить самостоятельно. Вместо удобного инструмента, которым надо просто научиться пользоваться вы получите набор маловменяемых сниппетов в которых разобраться самостоятельно не можете.

В цикле через счетчик обходите колонку А
(счетчег=0; проверяем через IF не стал ли он больше длины таблицы; увеличиваем счетчик на 1)
Берете нужную строчку в таблице в колонке А и строке %счетчик%
Проверяете есть ли нужная хрень в колонке А ( через IF)
Если есть - берете то что нужно из колонки Б по имени столбца и строек %счетчик%
1) И добавляете хрень из колонки Б в отдельный список, если там какие то хитрые строки и их надо обрабатывать
2) Сразу суммируете в результирующую переменную
3) Пишете в файл
4) ведете где то интересующие переменные и индексы удовлетворяющих ответов
5) Что хотите делаете))))
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 125
Баллы
113
Если я правильно понял, то как-то так:
C#:
var table = project.Tables["Таблица 1"];
List<int> numbers = new List<int>();
Regex reg = new Regex("AA.*");
for(int i=0; i < table.RowCount; i++)
{
    var cells = table.GetRow(i).ToArray();
    if (reg.IsMatch(cells[0]))
    numbers.Add(Convert.ToInt32(cells[1]));
}
project.Variables["Sum_AA"].Value = Convert.ToString(numbers.Sum());

numbers.Clear();

Regex reg2 = new Regex("(BB|CC).*");
for(int i=0; i < table.RowCount; i++)
{
    var cells = table.GetRow(i).ToArray();
    if (reg2.IsMatch(cells[0]))
    numbers.Add(Convert.ToInt32(cells[2]));
}
project.Variables["Sum_BB_CC"].Value = Convert.ToString(numbers.Sum());
По вашей теме: Поиск по спискам и таблицам через C# макрос
 

Вложения

  • Спасибо
Реакции: SergSh, pg2016 и sentinel

Bioz

Client
Регистрация
26.06.2015
Сообщения
18
Благодарностей
4
Баллы
3
Может кто подскажет менее замороченый снипет, который просто будет суммировать все ячейки определенного столбца и записывать сумму в переменную?
 

Bioz

Client
Регистрация
26.06.2015
Сообщения
18
Благодарностей
4
Баллы
3
Решил проблему кубиками
1. Вначале выгрузил обычным взятием с таблицы ячейки с записью в список, с инкрементом по всем строкам
2. Потом объединил список с разделителем + , вставив в переменную
3. Потом засунул эту переменную в яваскрипт кубик и на выходе получил нужную сумму (Данный способ увидел у когото тут на форуме, крутая идея с объединением списка с разделителем, избавило от лишнего вращения в цикле)
 
  • Спасибо
Реакции: Dimionix

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 125
Баллы
113
Решил проблему кубиками
Ну или так:
C#:
IZennoTable table = project.Tables["Table"]; // таблица проекта
string column = "B"; // столбец

string str = string.Empty;
float result = 0;
for (int i = 0; i < table.RowCount; i++) {
    str = table.GetCell(column, i).Replace(".", ",").Trim();
    if (!string.IsNullOrEmpty(str))
        result += float.Parse(str);
}
return result.ToString().Replace(",", ".");
 

Bioz

Client
Регистрация
26.06.2015
Сообщения
18
Благодарностей
4
Баллы
3
Это работает и это круто!! СПС!
Ну или так:
C#:
IZennoTable table = project.Tables["Table"]; // таблица проекта
string column = "B"; // столбец

string str = string.Empty;
float result = 0;
for (int i = 0; i < table.RowCount; i++) {
    str = table.GetCell(column, i).Replace(".", ",").Trim();
    if (!string.IsNullOrEmpty(str))
        result += float.Parse(str);
}
return result.ToString().Replace(",", ".");
 
  • Спасибо
Реакции: Dimionix

yriy158

Client
Регистрация
10.08.2013
Сообщения
490
Благодарностей
302
Баллы
63
Ну или так:
C#:
IZennoTable table = project.Tables["Table"]; // таблица проекта
string column = "B"; // столбец

string str = string.Empty;
float result = 0;
for (int i = 0; i < table.RowCount; i++) {
    str = table.GetCell(column, i).Replace(".", ",").Trim();
    if (!string.IsNullOrEmpty(str))
        result += float.Parse(str);
}
return result.ToString().Replace(",", ".");
а можно как-то еще и узнать количество этих ячеек в столбце? Например, что бы потом извлечь среднее арифметическое.
 
  • Спасибо
Реакции: Phoenix78

ArtDir

Client
Регистрация
03.04.2019
Сообщения
48
Благодарностей
4
Баллы
8
Ну или так:
C#:
IZennoTable table = project.Tables["Table"]; // таблица проекта
string column = "B"; // столбец

string str = string.Empty;
float result = 0;
for (int i = 0; i < table.RowCount; i++) {
    str = table.GetCell(column, i).Replace(".", ",").Trim();
    if (!string.IsNullOrEmpty(str))
        result += float.Parse(str);
}
return result.ToString().Replace(",", ".");
Скажите, а как можно сделать то же самое, но без первой строки столбца? У меня в первой строке таблицы заголовки и он отказывается суммировать, говорит неверный формат.
 
  • Спасибо
Реакции: Phoenix78

vedi108

Client
Регистрация
22.08.2022
Сообщения
16
Благодарностей
3
Баллы
3
Форумчане, подскажите, как получить среднее арифметическое значение последних 10 строк , допустим столбца B, при это если строк меньше 10, то пропускаем действие и ничего не считаем
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 562
Благодарностей
9 177
Баллы
113
Форумчане, подскажите, как получить среднее арифметическое значение последних 10 строк , допустим столбца B, при это если строк меньше 10, то пропускаем действие и ничего не считаем
Наверное надо C# решение, но все же предложу на ст. кубиках, реализация простая, уже можно "ехать без шашечек". :-) Приложил пример проекта, скриншот которого под спойлером.

99509
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: vedi108 и Alexmd

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 423
Баллы
113
Форумчане, подскажите, как получить среднее арифметическое значение последних 10 строк , допустим столбца B, при это если строк меньше 10, то пропускаем действие и ничего не считаем
C#:
return table.GetColumn("B").Select(x=>double.Parse(x)).Reverse().Take(10).Average();
 
  • Спасибо
Реакции: vedi108 и Sergodjan

vedi108

Client
Регистрация
22.08.2022
Сообщения
16
Благодарностей
3
Баллы
3
Наверное надо C# решение, но все же предложу на ст. кубиках, реализация простая, уже можно "ехать без шашечек". :-) Приложил пример проекта, скриншот которого под спойлером.

Благодарю за "0-(end-10)". в любом случае в дальнейшем пригодиться. сейчас воспользуюсь кодом что ниже
 
  • Спасибо
Реакции: Sergodjan

vedi108

Client
Регистрация
22.08.2022
Сообщения
16
Благодарностей
3
Баллы
3
  • Спасибо
Реакции: Alexmd

Кто просматривает тему: (Всего: 4, Пользователи: 0, Гости: 4)