Страницы: 1
RSS
Курс доллара с помощью функций Excel 2013
 
Есть у Николая статья где разбирается пример, в котором с помощью VBA можно получить курс доллара для любой заданной даты. Хотелось бы реализовать тоже самое, но с применением новых формул 2013 версии Excel.
Делаю так, в одну из ячеек ввожу запрос с сайта ЦБ http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002.
С помощью функции "ВЕБСЛУЖБА" получаю XML этого запроса. А дальше пытаюсь с помощью функции "ФИЛЬТР.XML" получить конкретное значение.
Проблема в том, что в качестве второго аргумента этой функции используется Xpath, который похоже я составил неправильно "/ValCurs/Valute/Value", потому что в ячейке вылезает ошибка #ЗНАЧ. Вот сам XML запрос .
Подскажите пожалуйста, как сделать это правильно  :)
 
Как правильно составлять запросы XPath - почитайте здесь:
http://www.zvon.org/xxl/XPathTutorial/Output_rus/example6.html
(простые и понятные примеры)

В вашем случае, для курса доллара,
должно получиться что-то вроде такого:
//Valute[@ID='R01235']/Value

PS: У меня нет Excel 2013 - проверить не могу

PPS: Можно сделать макросом:
http://excelvba.ru/code/CurrencyRate
Изменено: EducatedFool - 19.03.2013 14:34:38
 
К сожалению пока не получается, в том числе и с путем предложенным вами. Буду разбираться.
Спасибо за наводку на решение VBA, тоже интересовал этот вопрос  :)
 
Добрый день!
Аналогичная проблема. Так же предложенная строка xpath не фурычит.
Цитата
Антон Попов написал: К сожалению пока не получается
Возможно получилось победить?
 
Вот вам готовая функция для использования на листе MSE
Изменено: e_artem - 15.01.2016 16:52:33
 
e_artem, а текст макроса вместо картинки нельзя было вставить?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Прошу прощения, не сразу с кодировкой разобрался
Код
'Функция : Курс валют
Function КурсЦБРФ(Optional КодВалюты As String = "USD", Optional ДатаКурса As Date)
  With CreateObject("MSXML2.DOMDocument")
    .async = False
    .Load ("[URL=http://www.cbr.ru/scripts/XML_daily.asp?date_req=]http://www.cbr.ru/scripts/XML_daily.asp?date_req=[/URL]" & Format$(IIf(ДатаКурса, ДатаКурса, Now), "dd.mm.yyyy"))
    КурсЦБРФ = CDbl(.SelectSingleNode("*/Valute[CharCode='" & UCase(КодВалюты) & "']").ChildNodes(4).Text) / _
               CDbl(.SelectSingleNode("*/Valute[CharCode='" & UCase(КодВалюты) & "']").ChildNodes(2).Text)
  End With
End Function
 
Решал сегодня такую же задачу - если кому-то еще актуально:
Код
=ФИЛЬТР.XML(ВЕБСЛУЖБА("www.cbr.ru/scripts/XML_daily_eng.asp?date_req=" & ТЕКСТ(B1;"дд/ММ/гггг"));"//Valute[@ID='R01235']/Value")
 
А как аналогичное моглоо бы быть реализовано для Сбербанка?
 
Цитата
webley написал:
Решал сегодня такую же задачу - если кому-то еще актуально:
Очень актуально

Но все равно не пашет.
Не знаешь в чем может быть проблема?
Вебслужба нормально работает
подтягивает:
Код
<?xml version="1.0" encoding="windows-1251" ?>
<ValCurs Date="13.07.2017" name="Foreign Currency Market">
<Valute ID="R01010">
   <NumCode>036</NumCode>
   <CharCode>AUD</CharCode>
   <Nominal>1</Nominal>
   <Name>"
 
А не воспользоваться ли PQ? Передать в запрос дату и код валюты, и обработать таблицу, вернув нужное.
Конкретно с данными не разбирался, но страница нормально отвечает как источник данных.
 
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=92880&amp...

Вроде работает, но есть проблема с величиной периода
 
Цитата
flyboard написал: Очень актуально. Но все равно не пашет.
Пашет, просто надо B1 в формуле заменить на функцию СЕГОДНЯ(), если нужен курс на сегодня.
Получается
=ФИЛЬТР.XML(ВЕБСЛУЖБА("www.cbr.ru/scripts/XML_daily_eng.asp?date_req=&quot; & ТЕКСТ(СЕГОДНЯ();"дд/ММ/гггг"));"//Valute[@ID='R01235']/Value")
Страницы: 1
Наверх