Страницы: 1
RSS
Как сделать, чтобы данные из одного столбца заносились в другие столбцы по условию.
 
Доброго времени суток. Прошу помочь в следующей задаче:

Есть валютные пары в столбце А. Необходимо, чтобы по условию данные распределились по столбцам B, C, D, Е.
Условия следующие:
Столбец B (Прямая котировка) заносятся только те валютные пары, которые начинаются с USD.
Столбец С (Обратная котировка) заносятся только те валютные пары, которые заканчиваются на USD.
Столбец D (Кросс-курс прямая котировка) попадают только те пары, которые в которых вторая пара идет в паре из прямой котировке (JPY есть в паре с USDJPY поэтому кросс-курс прямой котировки.
Столбец Е (Кросс-курс обратная котировка) попадают только те пары, которые в которых первая пара идет в паре из обратной котировке (EUR есть в паре с EURUSD поэтому кросс-курс обратной котировки.

Не удается такое провернуть. Помогите пожалуйста.
 
Первое и второе понятно. Формулы массива:
=ИНДЕКС($A$3:$A$13;НАИМЕНЬШИЙ(ЕСЛИ(ЛЕВСИМВ($A$3:$A$13;3)="USD";СТРОКА($A$3:$A$13)-2);СТРОКА(B1)))
=ИНДЕКС($A$3:$A$13;НАИМЕНЬШИЙ(ЕСЛИ(ПРАВСИМВ($A$3:$A$13;3)="USD";СТРОКА($A$3:$A$13)-2);СТРОКА(B1)))
А вот с треьим и четвертым лично мне не понятна логика.
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Максим В., Кросс-курс прямая котировка это AUDCAD, AUDCHF. т.е. Кросс-курс это валютные пары в которых нет USD, но в связке существующих валютных парс, в которых начинается с USD и заканчивается парой CAD, CHF и тд. Не все пары валютные имеются в связке USD прямой котировки. Все тоже самое и с Кросс-курсом обратной котировки.
 
Вариант в Power Query:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Валютные_пары"]}[Content],
    Прямая = Table.AddColumn(Source, "Прямая котировка", each if Text.StartsWith([Валютные пары],"USD") then [Валютные пары] else null),
    Обратная = Table.AddColumn(Прямая, "Обратная котировка", each if Text.EndsWith([Валютные пары],"USD") then [Валютные пары] else null),
    first = List.Buffer(List.RemoveNulls(List.Transform(Обратная[Обратная котировка], each Text.Start(_,3)))),
    second = List.Buffer(List.RemoveNulls(List.Transform(Обратная[Прямая котировка], each Text.End(_,3)))),
    Прямая_кросс = Table.AddColumn(Обратная, "Прямая_кросс", each if List.Contains(second, Text.End([Валютные пары], 3)) and [Прямая котировка] = null  then [Валютные пары] else null),
    Обратная_кросс = Table.AddColumn(Прямая_кросс, "Обратная_кросс", each if List.Contains(first, Text.Start([Валютные пары], 3)) and [Обратная котировка] = null  then [Валютные пары] else null)
in
    Обратная_кросс
 
Aleksei_Zhigulin, а как сделать, чтобы данные записывались с первой ячейки и по порядку, по мере их количества, а не согласно мест их нахождения в искомом столбце, т.е. в столбце Н пары USDCAD, USDJPY, USDCHF выводились сразу после заголовка Прямая котировка?
 
frimen, Как то так.....
Если не верно заполните таблицу полностью руками как должно быть, для примера.
 
Цитата
frimen написал:
т.е. в столбце Н пары USDCAD, USDJPY, USDCHF выводились сразу после заголовка Прямая котировка?
Непонятно, зачем Вам всё это в одной таблице, но вот, даже лаконичнее получилось:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Валютные_пары"]}[Content][Валютные пары],
    Прямая = List.Select(Source, each Text.StartsWith(_,"USD")),
    Обратная = List.Select(Source, each Text.EndsWith(_,"USD")),
    first = List.Buffer(List.RemoveNulls(List.Transform(Обратная, each Text.Start(_,3)))),
    second = List.Buffer(List.RemoveNulls(List.Transform(Прямая, each Text.End(_,3)))),
    Прямая_кросс = List.Select(Source, each List.Contains(second, Text.End(_, 3)) and not List.Contains(Прямая, _)),
    Обратная_кросс = List.Select(Source, each List.Contains(first, Text.Start(_, 3)) and not List.Contains(Обратная, _)),
    final = Table.FromColumns({Source,Прямая,Обратная,Прямая_кросс,Обратная_кросс}, {"Валютные пары","Прямая","Обратная","Прямая_кросс","Обратная_кросс"})
in
    final
 
Aleksei_Zhigulin, Wild.Godlike, Максим В., огромное спасибо вам. Из этих полей берутся расчеты стоимости пункта, конвертации, маржи и тд. Вопрос решен. Буду дальше пыхтеть.
 
Wild.Godlike, а по вашему решению можно ли так же формулами выводить результаты по порядку как сделано в примере от Aleksei_Zhigulin, ?
 
третья формула с массивным вводом
Код
=ИНДЕКС($A$3:$A$14;АГРЕГАТ(15;6;СТРОКА($C$1:$C$24)/(ПСТР($A$3:$A$13;1;3)="USD");СТРОКА(C1)))
=ИНДЕКС($A$3:$A$14;АГРЕГАТ(15;6;СТРОКА($C$1:$C$24)/(ПСТР($A$3:$A$13;4;3)="USD");СТРОКА(C1)))
=ИНДЕКС($A$3:$A$14;АГРЕГАТ(15;6;СТРОКА($G$1:$G$500)/(ПСТР($A$3:$A$13;1;3)<>"USD")/ЕЧИСЛО(ПОИСКПОЗ(ПСТР($A$3:$A$13;4;3);ПСТР($B$3:$B$13;4;3);0));СТРОКА(C1)))
=ИНДЕКС($A$3:$A$14;АГРЕГАТ(15;6;СТРОКА($C$1:$C$24)/ЕОШ(ПОИСК("USD";$A$3:$A$13));СТРОКА(C1)))
 
artyrH, большое спасибо!
 
artyrH, напишите пожалуйста какая именно 3 часть. Не могу понять что нужно встроить в формулы от Wild.Godlike.
 
frimen, третья формула с массивным вводом. гуглите
 
artyrH, спасибо, понял о чем вы говорили. Я подумал что в той связке формул, третья по счету как раз и отвечает за вывод по порядку.  
Страницы: 1
Наверх