Версия для слабовидящих
Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

 

= Мир MS Excel/Отфильтровать список по значению из другой ячейки скриптом - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин, DrMini  
Отфильтровать список по значению из другой ячейки скриптом
tnt Дата: Воскресенье, 24.01.2021, 18:03 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте! Помогите найти решение, как можно сделать фильтрацию нужного диапазона значений.
Имею таблицу: https://u.to/Ri-wGg

В ней 3 листа,
Лист "History" - база данных.
Лист "Positions" - сводка данных, результат работы скрипта. Здесь выпадающий список, в зависимости от того что выбрано, это и отображается.
Лист "Settings" - Настройки списка

Сейчас скрипт выдает все что в "History" без фильтрации по столбцу Broker.
Нужно так: выбираю на листе "Positions" в списке: 1 и ниже отображается все, что в "History" есть со значением в столбце Broker: 1

Скрипт выводит результат в ячейку A3 на листе "Positions" (=MyPortfolio(History!C3:C1000,History!E3:E1000)

Сам скрипт:

function MyPortfolio(tickers, values) {

var total = []
var sums = {}

for(i = 0; i < tickers.length; i++){
var t = tickers[i].toString()

if (t != "Cash"){

if (t in sums){
sums[t] += Number(values[i])
}
else{
sums[t] = Number(values[i])
}
}
}

for(var ticker in sums){
if(sums[ticker]>0){
total.push([ticker, sums[ticker]])
}
}
return total
}



Сообщение отредактировал tnt - Воскресенье, 24.01.2021, 18:07
 
Ответить
СообщениеЗдравствуйте! Помогите найти решение, как можно сделать фильтрацию нужного диапазона значений.
Имею таблицу: https://u.to/Ri-wGg

В ней 3 листа,
Лист "History" - база данных.
Лист "Positions" - сводка данных, результат работы скрипта. Здесь выпадающий список, в зависимости от того что выбрано, это и отображается.
Лист "Settings" - Настройки списка

Сейчас скрипт выдает все что в "History" без фильтрации по столбцу Broker.
Нужно так: выбираю на листе "Positions" в списке: 1 и ниже отображается все, что в "History" есть со значением в столбце Broker: 1

Скрипт выводит результат в ячейку A3 на листе "Positions" (=MyPortfolio(History!C3:C1000,History!E3:E1000)

Сам скрипт:

[vba]
function MyPortfolio(tickers; values) {var total = []var sums = {}for(i = 0; i < tickers.length; i++){var t = tickers[i].toString()if (t undefined= "Cash"){if (t in sums){sums[t] += Чumber(values[i])}else{sums[t] = Чumber(values[i])}}}for(var ticker in sums){if(sums[ticker]>0){total.push([ticker; sums[ticker]])}}return total}
[/vba]

Автор - tnt
Дата добавления - 24.01.2021 в 18:03
Gustav Дата: Понедельник, 25.01.2021, 09:59 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
В ячейку A3 на листе на листе "Positions" вместо имеющейся формулы:

=MyPortfolio(
History!C3:C1000,
History!E3:E1000
)

поместите новую:

=MyPortfolio(
FILTER(History!C3:C1000,IF(E1="Все",History!B3:B1000,History!B3:B1000=E1)),
FILTER(History!E3:E1000,IF(E1="Все",History!B3:B1000,History!B3:B1000=E1))
)



МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеВ ячейку A3 на листе на листе "Positions" вместо имеющейся формулы:
[vba]
=MyPortfolio(History!C3:C1000,History!E3:E1000)
[/vba]поместите новую:
[vba]
=MyPortfolio(ФИЛЬТР(History!C3:C1000;ЕСЛИ(E1="Все";History!B3:B1000;History!B3:B1000=E1));ФИЛЬТР(History!E3:E1000;ЕСЛИ(E1="Все";History!B3:B1000;History!B3:B1000=E1)))
[/vba]

Автор - Gustav
Дата добавления - 25.01.2021 в 09:59
tnt Дата: Понедельник, 25.01.2021, 11:36 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Gustav, Благодарю! Думал, что уже без редактирования скрипта не получится.

Но возникла другая проблема, и я не понимаю по какой логике.
Теперь если в листе "Settings" вписать вместо числовых значений в списке буквенные, например дать имена брокерам, то формула при выборе "ВСЕ" не работает. С чем это связано?
 
Ответить
СообщениеGustav, Благодарю! Думал, что уже без редактирования скрипта не получится.

Но возникла другая проблема, и я не понимаю по какой логике.
Теперь если в листе "Settings" вписать вместо числовых значений в списке буквенные, например дать имена брокерам, то формула при выборе "ВСЕ" не работает. С чем это связано?

Автор - tnt
Дата добавления - 25.01.2021 в 11:36
Gustav Дата: Понедельник, 25.01.2021, 12:36 | Сообщение № 4
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Цитата tnt, 25.01.2021 в 11:36, в сообщении № 3 ( писал(а)):
если в листе "Settings" вписать вместо числовых значений в списке буквенные, например дать имена брокерам, то формула при выборе "ВСЕ" не работает.

Вот так работает (я уже заменил в Вашей таблице):

=MyPortfolio(
FILTER(History!C3:C1000,IF(E1="Все",ROW(History!B3:B1000),History!B3:B1000=E1)),
FILTER(History!E3:E1000,IF(E1="Все",ROW(History!B3:B1000),History!B3:B1000=E1))
)


Связано это с тем, что второй аргумент функции IF должен быть набором либо логических значений, либо чисел (потому что любое число, не равное 0 - это TRUE, а 0 - это FALSE). Поэтому пока в первом варианте там были числа хватало просто ссылки History!B3:B1000, в ячейках которой были числа (>0 = TRUE). Для текста же такая автоматическая замена не работает. Поэтому надо каким-то образом "превратить" значения этих ячеек либо в положительные числа, либо в TRUE. Я использовал функцию ROW для превращения в числа. Вместо ROW можно было бы использовать, например, ISTEXT или LEN. Наверняка можно еще какие-нибудь вспомнить...

Кстати, вот еще забавный вариант, который, наверное, вообще надо было предложить раньше всех :)

=MyPortfolio(
FILTER(History!C3:C1000,IF(E1="ВСЕ",History!B3:B1000<>E1,History!B3:B1000=E1)),
FILTER(History!E3:E1000,IF(E1="ВСЕ",History!B3:B1000<>E1,History!B3:B1000=E1))
)



МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Понедельник, 25.01.2021, 12:56
 
Ответить
Сообщение
Цитата tnt, 25.01.2021 в 11:36, в сообщении № 3 ( писал(а)):
если в листе "Settings" вписать вместо числовых значений в списке буквенные, например дать имена брокерам, то формула при выборе "ВСЕ" не работает.

Вот так работает (я уже заменил в Вашей таблице):
[vba]
=MyPortfolio(ФИЛЬТР(History!C3:C1000;ЕСЛИ(E1="Все";СТРОКА(History!B3:B1000);History!B3:B1000=E1));ФИЛЬТР(History!E3:E1000;ЕСЛИ(E1="Все";СТРОКА(History!B3:B1000);History!B3:B1000=E1)))
[/vba]
Связано это с тем, что второй аргумент функции IF должен быть набором либо логических значений, либо чисел (потому что любое число, не равное 0 - это TRUE, а 0 - это FALSE). Поэтому пока в первом варианте там были числа хватало просто ссылки History!B3:B1000, в ячейках которой были числа (>0 = TRUE). Для текста же такая автоматическая замена не работает. Поэтому надо каким-то образом "превратить" значения этих ячеек либо в положительные числа, либо в TRUE. Я использовал функцию ROW для превращения в числа. Вместо ROW можно было бы использовать, например, ISTEXT или LEN. Наверняка можно еще какие-нибудь вспомнить...

Кстати, вот еще забавный вариант, который, наверное, вообще надо было предложить раньше всех :)
[vba]
=MyPortfolio(ФИЛЬТР(History!C3:C1000;ЕСЛИ(E1="ВСЕ";History!B3:B1000<>E1;History!B3:B1000=E1));ФИЛЬТР(History!E3:E1000;ЕСЛИ(E1="ВСЕ";History!B3:B1000<>E1;History!B3:B1000=E1)))
[/vba]

Автор - Gustav
Дата добавления - 25.01.2021 в 12:36
tnt Дата: Понедельник, 25.01.2021, 13:39 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Gustav, все работает как нужно, еще раз благодарю Вас за помощь и подробное разъяснение!
 
Ответить
СообщениеGustav, все работает как нужно, еще раз благодарю Вас за помощь и подробное разъяснение!

Автор - tnt
Дата добавления - 25.01.2021 в 13:39
tnt Дата: Пятница, 05.02.2021, 12:11 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
А как можно фильтрацию по значениям разложить еще на категории?
Например сейчас в таблице можно выбирать "Портфель" и сделать фильтрацию, а как добавить к каждому портфелю еще и категории? Только через усложнение формулы через ЕСЛИ?

Более наглядно:
https://docs.google.com/spreads....8068068

На листе "History" создается запись (строка), которая прикрепляется к определенному портфелю и категории этого портфеля. Список Портфелей и категорий прописан на листе "Settings".
На листе "Positions" должна происходить фильтрация по выбранному портфелю и его категории. Как можно это осуществить?
 
Ответить
СообщениеА как можно фильтрацию по значениям разложить еще на категории?
Например сейчас в таблице можно выбирать "Портфель" и сделать фильтрацию, а как добавить к каждому портфелю еще и категории? Только через усложнение формулы через ЕСЛИ?

Более наглядно:
https://docs.google.com/spreads....8068068

На листе "History" создается запись (строка), которая прикрепляется к определенному портфелю и категории этого портфеля. Список Портфелей и категорий прописан на листе "Settings".
На листе "Positions" должна происходить фильтрация по выбранному портфелю и его категории. Как можно это осуществить?

Автор - tnt
Дата добавления - 05.02.2021 в 12:11
Gustav Дата: Пятница, 05.02.2021, 17:18 | Сообщение № 7
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Цитата tnt, 05.02.2021 в 12:11, в сообщении № 6 ( писал(а)):
Только через усложнение формулы через ЕСЛИ?

Через добавление еще одного ЕСЛИ (условия) в каждый ФИЛЬТР:

=MyPortfolio(
FILTER(History!D3:D,
IF(E1=Settings!A2,ROW(History!B3:B),History!B3:B=E1),
IF(G1=Settings!B2,ROW(History!C3:C),History!C3:C=G1)
),
FILTER(History!F3:F,
IF(E1=Settings!A2,ROW(History!B3:B),History!B3:B=E1),
IF(G1=Settings!B2,ROW(History!C3:C),History!C3:C=G1)
)
)


Зарядил эту формулу в вашу таблицу, проверяйте (лист копии "Позиций" со старой формулой сохранил рядом).


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Цитата tnt, 05.02.2021 в 12:11, в сообщении № 6 ( писал(а)):
Только через усложнение формулы через ЕСЛИ?

Через добавление еще одного ЕСЛИ (условия) в каждый ФИЛЬТР:
[vba]
=MyPortfolio(ФИЛЬТР(History!D3:D;ЕСЛИ(E1=Settings!A2;СТРОКА(History!B3:B);History!B3:B=E1);ЕСЛИ(G1=Settings!B2;СТРОКА(History!C3:C);History!C3:C=G1));ФИЛЬТР(History!F3:F;ЕСЛИ(E1=Settings!A2;СТРОКА(History!B3:B);History!B3:B=E1);ЕСЛИ(G1=Settings!B2;СТРОКА(History!C3:C);History!C3:C=G1)))
[/vba]
Зарядил эту формулу в вашу таблицу, проверяйте (лист копии "Позиций" со старой формулой сохранил рядом).

Автор - Gustav
Дата добавления - 05.02.2021 в 17:18
tnt Дата: Пятница, 05.02.2021, 17:47 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата Gustav, 05.02.2021 в 17:18, в сообщении № 7 ( писал(а)):
Зарядил эту формулу в вашу таблицу, проверяйте (лист копии "Позиций" со старой формулой сохранил рядом).

Gustav, благодарю, в очередной раз выручаете.
Но возник есть вопрос, к примеру если в "History" есть такие строки:
11/01/2021    TINKOFF    РОСТ    TSLA    Buy    3    $300.00    $900.00


12/01/2021    TINKOFF    СПЕКУЛЯЦИЯ    TSLA    Buy    4    $289.00    $1,156.00

То в "Position" возникает ошибка, возможно ли один тикер (TSLA) разделять в разные категории?


Сообщение отредактировал tnt - Пятница, 05.02.2021, 17:48
 
Ответить
Сообщение
Цитата Gustav, 05.02.2021 в 17:18, в сообщении № 7 ( писал(а)):
Зарядил эту формулу в вашу таблицу, проверяйте (лист копии "Позиций" со старой формулой сохранил рядом).

Gustav, благодарю, в очередной раз выручаете.
Но возник есть вопрос, к примеру если в "History" есть такие строки:
11/01/2021    TINKOFF    РОСТ    TSLA    Buy    3    $300.00    $900.00


12/01/2021    TINKOFF    СПЕКУЛЯЦИЯ    TSLA    Buy    4    $289.00    $1,156.00

То в "Position" возникает ошибка, возможно ли один тикер (TSLA) разделять в разные категории?

Автор - tnt
Дата добавления - 05.02.2021 в 17:47
tnt Дата: Пятница, 05.02.2021, 20:44 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Если к примеру в "History" у любого из Портфелей записана только 1 категория, к примеру портфель TINKOFF и только 1 строка СПЕКУЛЯЦИЯ, то выдает ошибку "Ссылка не существует". Почему так происходит, не пойму.


Сообщение отредактировал tnt - Суббота, 06.02.2021, 00:22
 
Ответить
СообщениеЕсли к примеру в "History" у любого из Портфелей записана только 1 категория, к примеру портфель TINKOFF и только 1 строка СПЕКУЛЯЦИЯ, то выдает ошибку "Ссылка не существует". Почему так происходит, не пойму.

Автор - tnt
Дата добавления - 05.02.2021 в 20:44
Gustav Дата: Суббота, 06.02.2021, 00:52 | Сообщение № 10
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Походу у Вас скрипт барахлит, но мне разбираться лениво. Предлагаю решение на двух формулах - соответственно для A3 (одна) и для B3 (протягиваемая вниз):

=SORT(UNIQUE(FILTER(History!D3:D,
IF(E1=Settings!A2,History!B3:B<>E1,History!B3:B=E1),
IF(G1=Settings!B2,History!C3:C<>G1,History!C3:C=G1),
History!D3:D<>"Cash"
)))

=IF(ISBLANK(A3),"", SUMIFS(History!$F$3:$F,
History!$D$3:$D, A3,
History!$B$3:$B, IF($E$1=Settings!$A$2,"<>","=") & $E$1,
History!$C$3:$C, IF($G$1=Settings!$B$2,"<>","=") & $G$1
))


Формулы вставлены в новый лист "Positions ON FORMULA". Сверяйте результаты со скриптом, смотрите что неправильно и почему. Почти уверен, что формулы дают правильный результат.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Суббота, 06.02.2021, 13:37
 
Ответить
СообщениеПоходу у Вас скрипт барахлит, но мне разбираться лениво. Предлагаю решение на двух формулах - соответственно для A3 (одна) и для B3 (протягиваемая вниз):
[vba]
=СОРТ(УНИК(ФИЛЬТР(History!D3:D;ЕСЛИ(E1=Settings!A2;History!B3:B<>E1;History!B3:B=E1);ЕСЛИ(G1=Settings!B2;History!C3:C<>G1;History!C3:C=G1);History!D3:D<>"Cash")))=ЕСЛИ(ЕПУСТО(A3);""; СУММЕСЛИМН(History!$F$3:$F;History!$D$3:$D; A3;History!$B$3:$B; ЕСЛИ($E$1=Settings!$A$2;"<>";"=") & $E$1;History!$C$3:$C; ЕСЛИ($G$1=Settings!$B$2;"<>";"=") & $G$1))
[/vba]
Формулы вставлены в новый лист "Positions ON FORMULA". Сверяйте результаты со скриптом, смотрите что неправильно и почему. Почти уверен, что формулы дают правильный результат.

Автор - Gustav
Дата добавления - 06.02.2021 в 00:52
tnt Дата: Суббота, 06.02.2021, 13:19 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Работает, а можно еще исключить фильтрацию значений, где Shares = 0 ?
 
Ответить
СообщениеРаботает, а можно еще исключить фильтрацию значений, где Shares = 0 ?

Автор - tnt
Дата добавления - 06.02.2021 в 13:19
Gustav Дата: Суббота, 06.02.2021, 13:35 | Сообщение № 12
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Соорудил новый скрипт. Поместил на новый лист "Positions NEW SCRIP". Вроде, чётко совпадает по результатам с листом "Positions ON FORMULA".

function MyPortfolio2(p_tickers, p_values) {

    var tickers = [].concat(p_tickers);
    var values  = [].concat(p_values);

    // отбор нужных данных из переданных массивов
    var allData = [];
    for(var i = 0; i < tickers.length; i++) {
        var t = tickers[i].toString();
        if(t && t != 'Cash') allData.push( {tick: t, val: Number(values[i])} );
    }

    // группировка по tickers с подсчетом сумм по values
    var groupBy = [];
    allData.reduce(function (res, value) {
        var key = value.tick.toUpperCase();
        if (!res[key]) {
            res[key] = {tick: key, val: 0};
            groupBy.push(res[key]);
        }
        res[key].val += value.val;
        return res;
    }, {});

    // сортировка по алфавиту (возрастающая) по полю tick (tickers)
    groupBy.sort(function(a,b) {return (a.tick > b.tick) - (b.tick > a.tick)});

    // формирование возвращаемого массива
    var total = [];
    groupBy.forEach(function(v) { if(v.val) total.push([v.tick, v.val]) });
    return total;
}


Поскольку новый скрипт сортирует по алфавиту, добавил функцию SORT и в первую формулу предыдущего поста. Чтобы удобнее было сравнивать, да и вообще в отсортированном виде как-то получше смотрится.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Суббота, 06.02.2021, 13:46
 
Ответить
СообщениеСоорудил новый скрипт. Поместил на новый лист "Positions NEW SCRIP". Вроде, чётко совпадает по результатам с листом "Positions ON FORMULA".
[vba]
function MyPortfolio2(p_tickers; p_values) {      var tickers = [].concat(p_tickers);    var values  = [].concat(p_values);      // отбор нужных данных из переданных массивов    var allData = [];    for(var i = 0; i < tickers.length; i++) {        var t = tickers[i].toString();        if(t && t undefined= 'Cash') allData.push( {tick: t; val: Чumber(values[i])} );    }      // группировка по tickers с подсчетом сумм по values    var groupBy = [];    allData.reduce(function (res; value) {        var key = value.tick.toUpperCase();        if (undefinedres[key]) {            res[key] = {tick: key; val: 0};            groupBy.push(res[key]);        }        res[key].val += value.val;        return res;    }; {});      // сортировка по алфавиту (возрастающая) по полю tick (tickers)    groupBy.sort(function(a;b) {return (a.tick > b.tick) - (b.tick > a.tick)});      // формирование возвращаемого массива    var total = [];    groupBy.forEach(function(v) { if(v.val) total.push([v.tick; v.val]) });    return total;}
[/vba]
Поскольку новый скрипт сортирует по алфавиту, добавил функцию SORT и в первую формулу предыдущего поста. Чтобы удобнее было сравнивать, да и вообще в отсортированном виде как-то получше смотрится.

Автор - Gustav
Дата добавления - 06.02.2021 в 13:35
Gustav Дата: Суббота, 06.02.2021, 13:53 | Сообщение № 13
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Цитата tnt, 06.02.2021 в 13:19, в сообщении № 11 ( писал(а)):
можно еще исключить где Shares = 0 ?
В новом скрипте - можно: добавил if(v.val) в предпоследнюю строку.

В формулах в такой редакции, как сейчас - нельзя. Нужно сильно курочить первую формулу, потому что фактически нужно будет предварительно сосчитать и проверить суммы перед тем как сформировать уникальный список тикеров. Т.е. фактически выполнить двойную работу.

Но можно кардинально переделать формулы с использованием функции QUERY и тогда получится элегантно исключить строки с нулевыми суммами. Мне сейчас опять лениво этим заниматься. Может быть, чуть позже. Ну, или какой-нибудь другой читатель разомнёт свои навыки и подсобит.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Цитата tnt, 06.02.2021 в 13:19, в сообщении № 11 ( писал(а)):
можно еще исключить где Shares = 0 ?
В новом скрипте - можно: добавил if(v.val) в предпоследнюю строку.

В формулах в такой редакции, как сейчас - нельзя. Нужно сильно курочить первую формулу, потому что фактически нужно будет предварительно сосчитать и проверить суммы перед тем как сформировать уникальный список тикеров. Т.е. фактически выполнить двойную работу.

Но можно кардинально переделать формулы с использованием функции QUERY и тогда получится элегантно исключить строки с нулевыми суммами. Мне сейчас опять лениво этим заниматься. Может быть, чуть позже. Ну, или какой-нибудь другой читатель разомнёт свои навыки и подсобит.

Автор - Gustav
Дата добавления - 06.02.2021 в 13:53
tnt Дата: Суббота, 06.02.2021, 15:09 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата Gustav, 06.02.2021 в 13:35, в сообщении № 12 ( писал(а)):
Соорудил новый скрипт.


Благодарю! Теперь Всё чётко работает!
 
Ответить
Сообщение
Цитата Gustav, 06.02.2021 в 13:35, в сообщении № 12 ( писал(а)):
Соорудил новый скрипт.


Благодарю! Теперь Всё чётко работает!

Автор - tnt
Дата добавления - 06.02.2021 в 15:09
  • Страница 1 из 1
  • 1
Поиск:

Рейтинг@Mail.ru Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!