Макрос получения курсов доллара за период с сайта Банка России

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

Иногда целесообразнее написать небольшой макрос, который будет получать данные из интернета автоматически. Для этого уже давно придуман Microsoft XML parser (MSXML).

Для примера, я и покажу, как с его помощью, получить курсы доллара за период с сайта ЦБ.

1) Организуйте столбец с датами на одной из «Sheets» экселя. У меня это столбец «A»

2) Подключите ссылку на Microsoft XML

3) Собственно пишем процедуру

Sub GetUSDRates4Period()

Объявляем переменные и открываем окно в мир интернета:

Dim strCCY As String, strRateCCY As String, strRateSource As String

Dim xmlDoc As MSXML2.DOMDocument

Set xmlDoc = New MSXML2.DOMDocument

xmlDoc.async = False

MSXML2 – это и есть упомянутый выше Microsoft XML parser, который нужно направить на сайт Банка России

strRateSource = "http://www.cbr.ru/scripts/XML_daily.asp?date_req="

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

Dim i As Long

i = 1

Dim strDate As String

Do While Not Range("a" & i) = ""

strDate = Format(Range("a" & i), "dd\/mm\/yyyy")

Всякое бывает с сайтами или вашим интернетом, поэтому нужно проверить результаты попытка загрузки xml файла.

If xmlDoc.Load(strRateSource & strDate) <> True Then

MsgBox "Сайт ЦБ сейчас не в духе, попробуйте обратиться к нему позже..."

Exit Sub

End If

Если же загрузка прошла успешно, то начинается магия xPath. Сначала получим дату, к которой на самом деле привязан курс доллара. Она не всегда совпадает с той датой, на которую вы курс запросили. И поместим дату ЦБ в столбец «B»

Range("b" & i) = xmlDoc.selectNodes("//ValCurs")(0).Attributes(0).Text

"//ValCurs" – это и есть выражение XPath, которое может быть очень интересным и витиеватым, и которое позволяет добраться практически до любой точки xml файла. В вышеприведенном примере я взял дату валютирования из тега ValCurs.

А ниже выражение посложнее. С его помощью я нахожу валюту «доллар» среди множества других (у этой валюты ID=R01235) и прошу показать мне только курс этой валюты (там есть и другая информация: буквенный и цифровой коды валюты в соответствии с ISO 4217 и/или ОКВ, номинал, описание, - но нам нужен только курс).

strRateCCY = xmlDoc.selectNodes("//Valute[@ID='R01235']/Value")(0).Text

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

Range("c" & i).Value = CdblLocaleIndependent(strRateCCY)

Функцию CdblLocaleIndependent в этом посте показывать не буду, пока желающих на нее посмотреть не будет достаточно.

Закругляемся с циклом и заканчиваем работу:

i = i + 1

Loop

MsgBox "Курсы сняты с сайта Банка России."

End Sub

MS, Libreoffice & Google docs

719 постов15K подписчика

Добавить пост

Правила сообщества

1. Не нарушать правила Пикабу

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях


Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

Утверждения вроде "пост - отстой", это оскорбление автора и будет наказываться баном.

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий
Удивительно. Где вы все берете такие крутые идеи? Что за чумовой самоучитель вы изучили?
раскрыть ветку (3)
Автор поста оценил этот комментарий

Погуглите: "VBA как два пальца". А вы какое ПТУ заканчивали?

раскрыть ветку (2)
Автор поста оценил этот комментарий

Ничего не гуглится про "VBA как два пальца". Можете ссылку дать, если это какая-то книга или что-то такое, пожалуйста?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Это мы просто мы просто с Заводным бананом подкалываем друг друга. Никакой самоучитель при подготовке этого поста и написании этого кода не использовался. Пост мой, код – мой. Пост появился благодаря:

1) Профильному высшему образованию

2) Многолетнему опыту работы

3) Желанию написать пост.

4) И, конечно же, сервисам ЦБ РФ http://www.cbr.ru/development/SXML/

Идея получения данный с сайта ЦБ, похоже, действительно интересная, раз navferty через 5 дней после моего поста прикрутил это функционал к своему аддину и опубликовал свой пост :)

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку