Макрос (функция) для получения курса валют с сайта ЦБ РФ

Данный код (пользовательская функция) позволяет получить данные о курсе валюты с сайта Центробанка.

Данную функцию можно использовать и в виде формулы на листе Excel (см. пример во вложении)

Function GetRate(ByVal CurrencyName As String, ByVal RateDate As Date) As Double
    ' функция возвращает курс валюты CurrencyName на дату RateDate
    ' в случае ошибки (неверная дата или название валюты) возвращается 0
    On Error Resume Next
    CurrencyName = UCase(CurrencyName): If Len(CurrencyName) <> 3 Then Exit Function
    Set xmldoc = CreateObject("Msxml.DOMDocument"): xmldoc.async = False
    url_request = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=" + Format(RateDate, "dd\/mm\/yyyy")
 
    If xmldoc.Load(url_request) <> True Then Exit Function    ' Запрос к серверу ЦБР

    ' Обработка полученного ответа
    Set nodeList = xmldoc.selectNodes("ValCurs"): Set xmlNode = nodeList.Item(0).CloneNode(True)
    Set node_attr = xmlNode.Attributes(0): strDate = node_attr.Value
    Set nodeList = xmldoc.selectNodes("*/Valute")
    For i = 0 To nodeList.Length - 1    ' поиск нужной валюты
        Set xmlNode = nodeList.Item(i).CloneNode(True)
        If xmlNode.childNodes(1).Text = CurrencyName Then
            CurrencyRate = CDbl(xmlNode.childNodes(4).Text)
            divisor = Val(xmlNode.childNodes(2).Text)
            GetRate = CurrencyRate / divisor
            Exit Function
        End If
    Next
End Function

Sub ПримерИспользованияФункции_GetRate()
    MsgBox "Сегодня курс доллара к рублю составил " & GetRate("USD", Now), vbInformation
    MsgBox "А вчера курс евро к рублю был равен " & GetRate("EUR", Now - 1), vbInformation
End Sub

Поддерживается получение курсов рубля по отношению к следующим валютам:

AUD               Австралийский доллар
AZN               Азербайджанский манат
GBP               Фунт стерлингов Соединенного королевства
AMD               Армянский драм
BYR               Белорусский рубль
BGN               Болгарский лев
BRL               Бразильский реал
HUF               Венгерский форинт
DKK               Датская крона
USD               Доллар США
EUR               Евро
INR               Индийская рупия
KZT               Казахский тенге
CAD               Канадский доллар
KGS               Киргизский сом
CNY               Китайский юань
LVL               Латвийский лат
LTL               Литовский лит
MDL               Молдавский лей
NOK               Норвежская крона
PLN               Польский злотый
RON               Новый румынский лей
XDR               СДР (специальные права заимствования)
SGD               Сингапурский доллар
TJS               Таджикский сомони
TRY               Турецкая лира
TMT               Новый туркменский манат
UZS               Узбекский сум
UAH               Украинская гривна
CZK               Чешская крона
SEK               Шведская крона
CHF               Швейцарский франк
EEK               Эстонская крона
ZAR               Южноафриканский рэнд
KRW               Вон Республики Корея
JPY               Японская иена

Если вы желаете вывести информацию по всем валютам - используйте макрос ВывестиСегодняшниеКурсыВсехВалют:

Sub ВывестиСегодняшниеКурсыВсехВалют()
    On Error Resume Next
    Set xmldoc = CreateObject("Msxml.DOMDocument"): xmldoc.async = False
    url_request = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=" + Format(Now, "dd\/mm\/yyyy")
    If xmldoc.Load(url_request) <> True Then Exit Sub
    Set nodeList = xmldoc.selectNodes("ValCurs"): Set xmlNode = nodeList.Item(0).CloneNode(True)
    Set node_attr = xmlNode.Attributes(0): strDate = node_attr.Value
    Set nodeList = xmldoc.selectNodes("*/Valute")
    For i = 0 To nodeList.Length - 1
        Set xmlNode = nodeList.Item(i).CloneNode(True)
        Debug.Print "Курс " & xmlNode.childNodes(1).Text & " (установлен " & strDate & "): " & _
                    xmlNode.childNodes(4).Text & " рублей за " & xmlNode.childNodes(2).Text & _
                  " " & xmlNode.childNodes(3).Text
    Next
End Sub

Результат работы макроса ВывестиСегодняшниеКурсыВсехВалют:

Курс AUD (установлен 28/07/2010): 27,2968 рублей за 1 Австралийский доллар
Курс AZN (установлен 28/07/2010): 37,6342 рублей за 1 Азербайджанский манат
Курс BRL (установлен 28/07/2010): 17,1589 рублей за 1 Бразильский реал
...
Курс HUF (установлен 28/07/2010): 13,7407 рублей за 100 Венгерских форинтов
Курс DKK (установлен 28/07/2010): 52,7135 рублей за 10 Датских крон
Курс USD (установлен 28/07/2010): 30,2391 рублей за 1 Доллар США
Курс EUR (установлен 28/07/2010): 39,3139 рублей за 1 Евро
...
Курс CHF (установлен 28/07/2010): 28,6953 рублей за 1 Швейцарский франк
Курс EEK (установлен 28/07/2010): 25,1057 рублей за 10 Эстонских крон
Курс ZAR (установлен 28/07/2010): 41,1383 рублей за 10 Южноафриканских рэндов
Курс KRW (установлен 28/07/2010): 25,6003 рублей за 1000 Вон Республики Корея

Вложения:

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Александр, в этом случае в коде надо прописывать параметры прокси-сервера (IP и порт)
Как это сделать применительно конкретно к этому макросу - даже и не знаю (возможно, потребуется полностью переделывать способ загрузки данных)
Я даже пример доработанного кода не могу вам предложить - у меня нет прокси-сервера, и протестировать работы через прокси я не могу.

В общем случае, делается это примерно так:
http://excelvba.ru/code/GetHTTPResponse
(можете взять этот код за основу, раскомментировав строки, относящиеся к работе прокси-сервера)

Данная функция, к сожалению не работает, если доступ к инету осуществляется через прокси (на работе), подскажите способ решения данной проблемы, может что-то в самом коде функции изменить?

А чем не устраивает http://pfsoft.com.ua/service/currency/ ?
Я тоже искал XML на сайте нацбанка Украины и не нашёл. Уже 4-5 месяцев пользуюсь ссылкой указанной выше.
Да и ниже есть мой коммент где писал как изменить существующий макрос для гривни...

коллеги ,а есть скрипт для выкачки USD/EUR к UAH? с нац банка украины ? http://www.bank.gov.ua/control/uk/curmetal/currency/search/form/day

Добрый день, макрос просто супер, огромное спасибо! А возможно его дописать, что можно было выгружать курс к USD? Пример: USD/EUR

мне нужен макрос с сегодняшними торгами по доллару и евро и чтобы ячейку с данными по курсам можно вставить в формулу рассчета сумм.заказ оформлять надо?

Да, возможно.
Обновлять данные, конечно, можно и каждый час, но гораздо проще делать это непосредственно в тот момент, когда необходимо обновить данные на листе.

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

Спс, а то я сделал тоже самое, но через такую кривую попу...

Возникла необходимость получать данные не по рублям, а по украинским гривням. Немного покопавшись нашёл линк на аналогичный XML:

url_request = "http://pfsoft.com.ua/service/currency/?date=" + Format(Now, "ddmmyyyy")

это если менять в теле процедуры. Кроме того у них разделитель не запятая, а точка, так что в теле цикла нужно добавить строчку типа:

curr = Replace(xmlNode.ChildNodes(4).Text, ".", ",")

Может кому и пригодиться :)

Огромное спасибо!!!

Уважаемый, EducatedFool!
Ты - Бог, комментарии излишни...

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
      _   ____    _  _     ____                 
__| | | _ \ | || | | _ \ ___ _ _
/ _` | | |_) | | || |_ | | | | / _ \ | | | |
| (_| | | _ < |__ _| | |_| | | __/ | |_| |
\__,_| |_| \_\ |_| |____/ \___| \__, |
|___/
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.