Добрый день! Помогите пожалуйста со следующим вопросом. Есть столбец с денежными суммами в разных валютах. Нужно написать такую формулу, чтобы в соседнем столбце все приводилось к одной валюте, например к $. Я так понимаю, что должна быть логическая формула типа ЕСЛИ A1 формат рубль, то A1/35, иначе A1, ЕСЛИ A1 формат AED, то A1/3.66, иначе A1 и т.д. Только как это все правильно записать? Или может еще какой-нибудь способ существует?
Добрый день! Помогите пожалуйста со следующим вопросом. Есть столбец с денежными суммами в разных валютах. Нужно написать такую формулу, чтобы в соседнем столбце все приводилось к одной валюте, например к $. Я так понимаю, что должна быть логическая формула типа ЕСЛИ A1 формат рубль, то A1/35, иначе A1, ЕСЛИ A1 формат AED, то A1/3.66, иначе A1 и т.д. Только как это все правильно записать? Или может еще какой-нибудь способ существует?OlgaP
Думаю в таблице не хватает даты сделки. И ещё мы не знаем страну, где всё это считается, вернее банк. (Ну я могу предположить что IP не врёт - но зачем там рубли? ) Далее т.к. курс нужно брать из банка, следовательно нужна UDF, следовательно можно ею же вытянуть символ/ы валюты из ячейки с валютой, далее по этому символу из таблицы соответствий (которую кто-то должен подготовить где-то..) получаем аббревиатуру/номер валюты для банка, далее идём в банк за курсом на дату сделки, ну и перемножаем.
Но есть некоторые вредные банки, которые курс так просто не дают... И Reuters тоже не бесплатен - тогда нужно как-то выкручиваться подготавливая данные вручную, или платить за подключение. Конечно если курс не привязывать к дате и брать что-то примерно среднее - то можно вытянув обозначение валюты из ячейки, далее с помощью ВПР() из составленной заранее таблицы взять курс и умножить.
Вот код UDF: [vba]
Код
Public Function ExtractCurrency(r As Range) Dim i As Integer, s As String, str As String s = r.Text For i = 1 To Len(s) If InStr(1, ChrW(8364) & "Р$QWERTYUIOPASDFGHJKLZXCVBNM", UCase(Mid(s, i, 1))) <> 0 Then str = str & Mid(s, i, 1) Next ExtractCurrency = Application.Trim(str) End Function
[/vba]
Думаю в таблице не хватает даты сделки. И ещё мы не знаем страну, где всё это считается, вернее банк. (Ну я могу предположить что IP не врёт - но зачем там рубли? ) Далее т.к. курс нужно брать из банка, следовательно нужна UDF, следовательно можно ею же вытянуть символ/ы валюты из ячейки с валютой, далее по этому символу из таблицы соответствий (которую кто-то должен подготовить где-то..) получаем аббревиатуру/номер валюты для банка, далее идём в банк за курсом на дату сделки, ну и перемножаем.
Но есть некоторые вредные банки, которые курс так просто не дают... И Reuters тоже не бесплатен - тогда нужно как-то выкручиваться подготавливая данные вручную, или платить за подключение. Конечно если курс не привязывать к дате и брать что-то примерно среднее - то можно вытянув обозначение валюты из ячейки, далее с помощью ВПР() из составленной заранее таблицы взять курс и умножить.
Вот код UDF: [vba]
Код
Public Function ExtractCurrency(r As Range) Dim i As Integer, s As String, str As String s = r.Text For i = 1 To Len(s) If InStr(1, ChrW(8364) & "Р$QWERTYUIOPASDFGHJKLZXCVBNM", UCase(Mid(s, i, 1))) <> 0 Then str = str & Mid(s, i, 1) Next ExtractCurrency = Application.Trim(str) End Function
К сожалению, на сколько я знаю, формулы в excel не могут вытянуть информацию о валюте, спрятанную в формате. Предлагаю вариант с костылями. Два варианта, второй с курсами на различные даты.
К сожалению, на сколько я знаю, формулы в excel не могут вытянуть информацию о валюте, спрятанную в формате. Предлагаю вариант с костылями. Два варианта, второй с курсами на различные даты.Russel
Формат ячейки может вытянуть макрофункция GET.CELL() - но т.к. всё равно будут пугающие запросы на дозволение этих макросов, да и вытянет не вполне удобные для обработки значения - то проще парсить текст ячейки с помощью своей собственной функции. Ну и вот - если в файл Russel'а интегрировать мою UDF - то можно обойтись без допстолбцов, только нужна таблица курсов. Ну и в "р." убрать точку, или добавить точку в код.
Формат ячейки может вытянуть макрофункция GET.CELL() - но т.к. всё равно будут пугающие запросы на дозволение этих макросов, да и вытянет не вполне удобные для обработки значения - то проще парсить текст ячейки с помощью своей собственной функции. Ну и вот - если в файл Russel'а интегрировать мою UDF - то можно обойтись без допстолбцов, только нужна таблица курсов. Ну и в "р." убрать точку, или добавить точку в код.Hugo
Можно и в формулу - если валют/курсов будет только эти 5 или около этого. Ну а если 50 - уже сложнее. И я как-то смутно представляю фиксированный курс например рубля к доллару сегодня...
Можно и в формулу - если валют/курсов будет только эти 5 или около этого. Ну а если 50 - уже сложнее. И я как-то смутно представляю фиксированный курс например рубля к доллару сегодня... Hugo
Моя UDF вытягивает то, что нужно делать вручную в варианте Russel'а. Как применить - в файле показать не могу, но на сайте где-то есть статья... Должна быть!
Моя UDF вытягивает то, что нужно делать вручную в варианте Russel'а. Как применить - в файле показать не могу, но на сайте где-то есть статья... Должна быть!Hugo
Да и таблицу курсов валют тоже можно всю запихнуть в эту формулу. Если постараться Но будет ненаглядно и неоперативно - лучше пусть будет таблица, можно её держать на другом листе, можно на скрытом.
Только с EUR там неувязка (нужно доработать) - моя UDF будет возвращать не EUR, а €, как в формате.
Ну вот спасибо. Практически можно полностью удалить столбцы "Валюта" и "Сумма в руб." - если в "Сумма в $" записать
Да и таблицу курсов валют тоже можно всю запихнуть в эту формулу. Если постараться Но будет ненаглядно и неоперативно - лучше пусть будет таблица, можно её держать на другом листе, можно на скрытом.
Только с EUR там неувязка (нужно доработать) - моя UDF будет возвращать не EUR, а €, как в формате.Hugo