45

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

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

454 поста12.5K подписчика

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

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

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

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

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

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

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


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

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

Подробнее
Лучшие посты за сегодня
7366

Все мужики одинаковые

Все мужики одинаковые Картинка с текстом, Мужчины, Мемы, Повтор, Две женщины орут на кота, Секс
Показать полностью 1
5977

Скрутить или не скрутить

Скрутить или не скрутить Мемы, Авто, Перекупщики, Верховный суд
5606

Программист, обнародовавший видеоархив пыток заключенных, объявлен в розыск

Программист, обнародовавший видеоархив пыток заключенных, объявлен в розыск ФСИН, МВД, Повтор, Новости, Негатив, Политика
Программист, обнародовавший видеоархив пыток заключенных, объявлен в розыск ФСИН, МВД, Повтор, Новости, Негатив, Политика

Показать полностью 2
5217

Сотворение деда

Сотворение деда
5007

Шок

4320

Современные проблемы требуют современных решений

Современные проблемы требуют современных решений
4254

Умные мысли часто преследуют её, но она быстрее

Умные мысли часто преследуют её, но она быстрее
4232

Рейс Тель Авив - Верона

Рейс Тель Авив - Верона Евреи, Италия, Самолет
Показать полностью 1
3862

Дискриминация

Дискриминация
3638

Зачем наказывать виновных, когда можно обвинить того, кто виновен в огласке?

Зачем наказывать виновных, когда можно обвинить того, кто виновен в огласке? Комментарии, Комментарии на Пикабу, Негатив
3598

Её дважды казнили фашисты...

Её дважды казнили фашисты... Подвиг, Великая Отечественная война, Чтобы помнили, Партизаны, Дети-Герои, Длиннопост
Показать полностью
3563

Пёс из приюта

Пёс из приюта Скриншот, Twitter, Собака, Приют для животных, Длиннопост
Показать полностью 1
3350

Про зарплаты и инфляции

3228

Когда тебе уже за 40, но все равно в душе ещё ребёнок

3186

Передавший видео пыток в российских тюрьмах белорус объявлен в розыск

3144

Мечта хозяйки

Мечта хозяйки
3020

Свой бизнес- всё..?

2732

Вопрос

2718

Москва унылая

2683

Ремни придумали трусы

Ремни придумали трусы
Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: