Оновлений курс валют в Excel

Я неодноразово аналізував способи імпорту даних в Excel з Інтернету з подальшим автоматичним оновленням. Зокрема:

  • У старіших версіях Excel 2007-2013 це можна було зробити за допомогою прямого веб-запиту.
  • Починаючи з 2010 року, це можна зробити дуже зручно за допомогою надбудови Power Query.

До цих методів в останніх версіях Microsoft Excel тепер можна додати ще один – імпорт даних з Інтернету у форматі XML за допомогою вбудованих функцій.

XML (eXtensible Markup Language = розширювана мова розмітки) — універсальна мова, призначена для опису будь-яких даних. Насправді це звичайний текст, але зі спеціальними тегами, доданими до нього для розмітки структури даних. Багато сайтів надають безкоштовні потоки своїх даних у форматі XML для завантаження. На сайті Центробанку нашої країни (www.cbr.ru), зокрема, за допомогою подібної технології наводяться дані про курси різних валют. З сайту Московської біржі (www.moex.com) таким же способом можна завантажити котирування акцій, облігацій і багато іншої корисної інформації.

Починаючи з версії 2013, Excel має дві функції для прямого завантаження XML-даних з Інтернету в клітинки аркуша: ВЕБ СЕРВІС (ВЕБСЕРВІС) и FILTER.XML (FILTERXML). Вони працюють у парах – спочатку функція ВЕБ СЕРВІС виконує запит до потрібного сайту та повертає відповідь у форматі XML, а потім використовує функцію FILTER.XML ми «розбираємо» цю відповідь на компоненти, вилучаючи з неї потрібні нам дані.

Розглянемо роботу цих функцій на класичному прикладі – імпорті курсу будь-якої потрібної нам валюти на заданий проміжок часу з сайту ЦБ нашої країни. Як заготовку ми будемо використовувати таку конструкцію:

Оновлений курс валют в Excel

тут:

  • Жовті комірки містять дати початку і закінчення періоду, який нас цікавить.
  • Синій має розкривний список валют за допомогою команди Дані – Перевірка – Список (Дані — Перевірка — Список).
  • У зелених клітинках ми будемо використовувати наші функції для створення рядка запиту та отримання відповіді сервера.
  • Таблиця праворуч - це довідкова коди валют (вона нам знадобиться трохи пізніше).

Ходімо!

Крок 1. Формування рядка запиту

Щоб отримати потрібну інформацію з сайту, її потрібно правильно запитати. Заходимо на www.cbr.ru і відкриваємо посилання в колонтитулі головної сторінки' Технічні ресурси'- Отримання даних за допомогою XML (http://cbr.ru/development/SXML/). Прокручуємо трохи нижче і в другому прикладі (Приклад 2) буде те, що нам потрібно – отримання курсів валют для заданого інтервалу дат:

Оновлений курс валют в Excel

Як видно з прикладу, рядок запиту повинен містити дати початку (date_req1) і закінчення (date_req2) періоду, який нас цікавить, і код валюти (VAL_NM_RQ), курс якого ми хочемо отримати. Ви можете знайти основні коди валют у таблиці нижче:

Валюта

код

                         

Валюта

код

Австралійський долар R01010

Литовський літ

R01435

австрійський шилінг

R01015

Литовський купон

R01435

азербайджанський манат

R01020

Молдавський лей

R01500

Pound

R01035

РќРµРјРµС † РєР ° СЏ РјР ° СЂРєР °

R01510

Ангольська нова кванза

R01040

Голландський гульден

R01523

Вірменський драм

R01060

Норвезька крона

R01535

білоруський рубль

R01090

польський злотий

R01565

бельгійський франк

R01095

португальський ескудо

R01570

Болгарський лев

R01100

Румунський лей

R01585

Бразильський реал

R01115

Сінгапурський долар

R01625

Угорський форинт

R01135

Суринамський долар

R01665

Гонконгський долар

R01200

таджицькі сомоні

R01670

грецька драхма

R01205

таджицький рубль

R01670

Датська крона

R01215

Турецька ліра

R01700

американський долар

R01235

туркменський манат

R01710

євро

R01239

новий туркменський манат

R01710

Індійська рупія

R01270

узбецький сум

R01717

ірландський фунт

R01305

Українська гривня

R01720

ісландська крона

R01310

український карбованець

R01720

Іспанська песета

R01315

Фінська марка

R01740

італійська ліра

R01325

французький франк

R01750

казахстанський тенге

R01335

Чеська крона

R01760

Канадський долар

R01350

Шведська крона

R01770

Киргизький сом

R01370

швейцарський франк

R01775

Китайський юань

R01375

Естонська крона

R01795

Кувейтський динар

R01390

Югославський новий динар

R01804

латвійські лати

R01405

Південноафриканський ранд

R01810

Ліванський фунт

R01420

Республіка Корея Вона

R01815

японська ієна

R01820

Повний довідник по кодам валют також доступний на сайті ЦБ - див. http://cbr.ru/scripts/XML_val.asp?d=0

Тепер ми сформуємо рядок запиту в комірці на аркуші за допомогою:

  • оператор конкатенації тексту (&), щоб об’єднати його;
  • риси VPR (ВПР)знайти в довіднику код потрібної нам валюти;
  • риси TEXT (ТЕКСТ), який перетворює дату відповідно до заданого шаблону день-місяць-рік через косу риску.

Оновлений курс валют в Excel

="http://cbr.ru/scripts/XML_dynamic.asp?date_req1="&ТЕКСТ(B2;"ДД/ММ/ГГГГ")&  "&date_req2="&ТЕКСТ(B3;"ДД/ММ/ГГГГ")&"&VAL_NM_RQ="&ВПР(B4;M:N;2;0)  

Крок 2. Виконати запит

Тепер використовуємо функцію ВЕБ СЕРВІС (ВЕБСЕРВІС) зі згенерованим рядком запиту як єдиним аргументом. Відповіддю буде довгий рядок XML-коду (краще ввімкнути перенос слів і збільшити розмір комірки, якщо ви хочете бачити його повністю):

Оновлений курс валют в Excel

Крок 3. Розбір відповіді

Щоб легше було зрозуміти структуру даних відповіді, краще скористатися одним із онлайн-парсерів XML (наприклад, http://xpather.com/ або https://jsonformatter.org/xml-parser), який може візуально форматувати XML-код, додаючи до нього відступи та підсвічуючи синтаксис кольором. Тоді все стане набагато зрозуміліше:

Оновлений курс валют в Excel

Тепер ви чітко бачите, що значення курсу обрамлені нашими тегами ..., а дати є атрибутами Дата в тегах .

Щоб витягти їх, виділіть на аркуші стовпець з десяти (або більше – якщо зроблено з полем) порожніх клітинок (оскільки встановлено 10-денний інтервал дат) і введіть функцію в рядку формул FILTER.XML (ФІЛЬТРXML):

Оновлений курс валют в Excel

Тут перший аргумент — це посилання на комірку з відповіддю сервера (B8), а другий — рядок запиту в XPath, спеціальній мові, за допомогою якої можна отримати доступ до необхідних фрагментів коду XML і витягти їх. Ви можете прочитати більше про мову XPath, наприклад, тут.

Важливо, що після введення формули не натискайте Що натомість? Створіть віртуальну версію себе у і комбінацію клавіш Ctrl+Shift+ Що натомість? Створіть віртуальну версію себе у , тобто введіть його як формулу масиву (фігурні дужки навколо нього буде додано автоматично). Якщо у вас остання версія Office 365 з підтримкою динамічних масивів в Excel, то просто Що натомість? Створіть віртуальну версію себе у , і вам не потрібно заздалегідь виділяти порожні комірки – функція сама візьме стільки комірок, скільки їй потрібно.

Щоб отримати дати, ми зробимо те ж саме – ми виберемо кілька порожніх клітинок у сусідньому стовпці та використаємо ту ж функцію, але з іншим запитом XPath, щоб отримати всі значення атрибутів Date з тегів Record:

=FILTER.XML(B8;”//Запис/@Дата”)

У майбутньому при зміні дат у вихідних клітинках B2 і B3 або виборі іншої валюти в розкривному списку клітинки B3 наш запит буде автоматично оновлюватися, посилаючись на сервер Центрального банку для нових даних. Щоб примусово виконати оновлення вручну, ви можете додатково скористатися комбінацією клавіш Ctrl+інший+F9.

  • Імпортуйте курс біткойна в Excel за допомогою Power Query
  • Імпорт курсів валют з Інтернету в старих версіях Excel

залишити коментар