Я уже неоднократно разбирал способы импорта данных в Excel из интернета с последующим автоматическим обновлением. В частности:
- В старых версиях Excel 2007-2013 это можно было сделать с помощью прямого веб-запроса.
- Начиная с 2010 года это можно очень удобно делать с помощью надстройки Power Query.
К этим способам в последних версиях Microsoft Excel теперь можно добавить ещё один — импорт данных из интернета в формате XML с помощью встроенных функций.
XML (eXtensible Markup Language = Расширяемый Язык Разметки) – это универсальный язык, созданный для описания любых данных. По сути, он представляет собой обычный текст, но с добавленными в него специальными тегами для разметки структуры данных. Многие сайты совершенно бесплатно предоставляют всем желающим потоки своих данных в XML-формате для загрузки. На сайте Центрального Банка России (www.cbr.ru), в частности, с помощью подобной технологии отдаются данные по курсам различных валют. С сайта Московской Биржи (www.moex.com) таким же образом можно загрузить котировки акций, облигаций и множество другой полезной информации.
Начиная с версии 2013 в Excel появились две функции для прямой загрузки XML-данных из интернета в ячейки листа: ВЕБСЛУЖБА (WEBSERVICE) и ФИЛЬТР.XML (FILTERXML). Работают они в паре — сначала функция ВЕБСЛУЖБА выполняет запрос к нужному сайту и возвращает его ответ в формате XML, а затем с помощью функции ФИЛЬТР.XML мы «разбираем» этот ответ на составляющие, извлекая из него нужные нам данные.
Давайте рассмотрим работу этих функций на классическом примере – импорте курса любой нужной нам валюты на заданный интервал дат с сайта Центробанка России. В качестве заготовки будем использовать вот такую конструкцию:
Здесь:
- В жёлтых ячейках находятся даты начала и окончания интересующего нас периода.
- В синей сделан выпадающий список валют при помощи команды Данные — Проверка — Список (Data — Validation — List).
- В зеленых ячейках мы будем использовать наши функции, чтобы создать строку запроса и получить ответ сервера.
- Таблица справа — справочник по кодам валют (потребуется нам чуть позже).
Поехали!
Шаг 1. Формируем строку запроса
Чтобы получить от сайта требуемую информацию, его нужно правильно спросить. Заходим на www.cbr.ru и в подвале главной страницы открываем ссылку Технические ресурсы - Получение данных, используя XML (http://cbr.ru/development/SXML/). Проматываем чуть ниже и во втором примере (Example 2) будет то, что нам нужно — получение курсов валюты на заданный интервал дат:
Как видно из примера, строка запроса должна содержать даты начала (date_req1) и окончания (date_req2) интересующего нас периода и код валюты (VAL_NM_RQ), курс которой мы хотим получить. Коды основных валют вы можете найти в таблице ниже:
Валюта |
Код |
Валюта |
Код |
|
Австралийский доллар | R01010 |
Литовский лит |
R01435 |
|
Австрийский шиллинг |
R01015 |
Литовский талон |
R01435 |
|
Азербайджанский манат |
R01020 |
Молдавский лей |
R01500 |
|
Фунт стерлингов |
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
Теперь сформируем строку запроса в ячейке на листе с помощью:
- оператора склейки текста (&), чтобы собрать воедино;
- функции ВПР (VLOOKUP), чтобы найти код нужной нам валюты в справочнике;
- функции ТЕКСТ (TEXT), преобразующей дату по заданному шаблону день-месяц-год через косую черту.
="http://cbr.ru/scripts/XML_dynamic.asp?date_req1="&ТЕКСТ(B2;"ДД/ММ/ГГГГ")& "&date_req2="&ТЕКСТ(B3;"ДД/ММ/ГГГГ")&"&VAL_NM_RQ="&ВПР(B4;M:N;2;0)
Шаг 2. Выполняем запрос
Теперь используем функцию ВЕБСЛУЖБА (WEBSERVICE) с созданной строкой запроса в качестве единственного аргумента. Ответом будет длинная строка XML-кода (лучше включить перенос по словам и увеличить размер ячейки, если хочется увидеть её целиком):
Шаг 3. Разбираем ответ
Чтобы легче было разобраться в структуре данных ответа, лучше воспользоваться одним из онлайн-парсеров XML (например, http://xpather.com/ или https://jsonformatter.org/xml-parser), которые умеют наглядно форматировать XML-код, добавляя к нему отступы и подсвечивая цветом синтаксис. Тогда всё станет существенно понятнее:
Теперь хорошо видно, что значения курса обрамлены у нас тегами <Value>…</Value>, а даты являются атрибутами Date в тегах <Record>.
Чтобы их извлечь курс, выделим на листе столбец из десяти (или более — если делать с запасом) пустых ячеек (т.к. был задан 10-дневный интервал дат) и введём в строку формул функцию ФИЛЬТР.XML (FILTERXML):
Здесь первый аргумент – это ссылка на ячейку с ответом сервера (B8), а второй – строка запроса на XPath – специальном языке, с помощью которого можно обращаться к нужным фрагментам XML-кода и извлекать их. Подробнее о языке XPath можно почитать, например, тут.
Важно после ввода формулы нажать не Enter, а сочетание клавиш Ctrl+Shift+Enter, т.е. ввести её как формулу массива (фигурные скобки вокруг будут добавлены автоматически). Если же у вас последняя версия Office 365 с поддержкой в Excel динамических массивов, то хватит и простого Enter, да и выделять заранее пустые ячейки не требуется — функция сама займет столько ячеек, сколько ей нужно.
Для извлечения дат поступим аналогично – выделим несколько пустых ячеек в соседнем столбце и используем ту же функцию, но с другим запросом XPath, чтобы получить все значения атрибутов Date из тегов Record:
=ФИЛЬТР.XML(B8;»//Record/@Date»)
Теперь в будущем при изменении дат в исходных ячейках В2 и В3 или выборе другой валюты в выпадающем списке ячейки B3, наш запрос будет автоматически обновляться, обращаясь к серверу ЦБ за новыми данными. Чтобы форсировать обновление вручную, можно дополнительно использовать сочетание клавиш Ctrl+Alt+F9.
Ссылки по теме
- Импорт курса биткойна в Excel через Power Query
- Импорт курса валют из интернета в старых версиях Excel
КУРС
EXCEL ACADEMY
Научитесь использовать все прикладные инструменты из функционала MS Excel.
По сети уже лет 300 гуляет инструкция, рассказывающая о том, как забрать курс валют с сайта Центробанка. Инструкция, в принципе, рабочая, но за 300 лет сайт ЦБ прилично изменился, да и технология web-разработки шагнули далеко вперёд, поэтому не всегда можно получить желаемые таблички с определённых ресурсов.
Но курсы доллара и евро по-прежнему легко добываются. Давайте начнём именно с них.
Если у вас Microsoft Office 2019 Professtional Plus или Microsoft Office 2013, скачайте Power Query в качестве надстройки с официального сайта.
Тогда вы получите вкладку Power Query на ленте.
В более новых версиях переходим на вкладку «Данные», выбираем «Получить данные», затем «Из других источников» и кликаем «Из интернета». Альтернативный вариант – сразу щёлкнуть по соответствующей иконке рядом с командой «Получить данные».
Вводим адрес сайта Центробанка: https://cbr.ru
В открывшемся окошке можно менять вид просмотрщика.
Представление таблицы – это сортировка одних лишь таблиц (что, по идее, нам и нужно).
Веб-представление подойдёт в тех случаях, когда вам нужно полазать по сайту и проверить, что там Power Query вообще обнаружил. Предупреждаем, что веб-представление – это не браузер, сёрфить тут не разрешают, лишь визуально представлять себе результаты импорта. Даже кукисы принять не сможете…
Мы же выбираем Table 0, которая на просмотрщике отображается как нужная табличка с курсами валют, и нажимаем «Преобразовать данные».
Миссия выполнена! Конечно, мы можем перейти на вкладку «Главная» и нажать «Закрыть и загрузить в», указав вариант «Таблица», но лучше всего учесть вероятность будущих вычислений.
Если вы захотите применить к этой табличке банальное вычитание или сложение, то разживётесь ошибкой «ЗНАЧ». Она вылезает тогда, когда имеются неточности с форматами. Поэтому давайте сразу в запросе зададим нужный формат ячеек, а именно – валюту.
Кликаем по иконке ABC в заголовке столбца и выбираем тип «Валюта». Повторяем операцию в соседнем столбце.
Таким образом, мы будем автоматически получать заранее отформатированные ячейки.
А вот теперь с чистой совестью переходим на главную вкладку, «Закрыть и загрузить в», после чего указываем таблицу.
Можем проверить себя и произвести какие-нибудь вычисления, к примеру, вычитание, чтобы узнать разницу курсов за пару дней.
Во-первых, нам достаётся корректный результат и, во-вторых, благодаря преимуществам умных таблиц, этот самый результат протягивается вниз.
Наконец, если в ваших расчётах постоянно участвует курс доллара или евро, и вам требуется обновлять его, ссылаясь на импортированные ячейки, то повторять все эти шаги больше не нужно – достаточно кликнуть правой кнопкой мыши на таблицу в Excel и выбрать «Обновить». Либо вы можете нажать на значок в панели подключений, ну или на вкладке «Данные».
Вот так мы обзаводимся динамическим курсом валют, обновляем его в один клик и адаптируем свои расчёты с Power Query. Узнать о других приемах, которые облегчат вашу работу с Excel, можно на нашем открытом онлайн-курсе «Аналитика в Excel».
КУРС
EXCEL ACADEMY
Научитесь использовать все прикладные инструменты из функционала MS Excel.
Блог SF Education
Uncategorized
О курсе “Power BI и Power Query: аналитика и визуализация данных”
Power BI и Power Query – обучающий курс по работе с Power BI и Power Query. На курсе студенты обучаются формировать, обрабатывать и визуализировать бизнес-данные,…
Tableau vs Power BI
Статья доступна в аудиоверсии Как же приятно осознавать, что мы не только обучаем Вас, дорогие студенты, но и развиваемся сами! Мы запустили новый курс…
Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Еще…Меньше
С помощью типа данных Валюты можно легко получить и сравнить обменные курсы по всему миру. В этой статье вы узнаете, как вводить пары валют, преобразовывать их в тип данных и извлекать дополнительные сведения для надежных данных.
Примечание: Валютные пары доступны только для Microsoft 365 (клиенты с несколькими клиентами по всему миру).
Использование типа данных «Валюты» для расчета обменных курсов
-
Введите валютную пару в ячейку, используя такой формат: Из валюты / В валюту с кодами валют ISO.
Например, введите «ДОЛЛАР/ЕВРО», чтобы получить курс обмена от одного доллара США к евро.
-
Выберем ячейки и выберите Вставить >таблицу. Создание таблицы не обязательно, но значительно упростит вставку данных из типа данных.
-
Выбрав ячейки, перейдите на вкладку Данные и выберите тип данных Валюты.
Если Excel обнаружит совпадение между валютной парой и поставщиком данных, текст преобразуется в тип данных, а в ячейке значок Валюты.
Примечание: Если в ячейке вместо значка Валюты, Excel затруднение при совпадении текста с данными. Исправь все ошибки и нажмите ввод, чтобы повторить попытку. Можно также выбрать значок, чтобы открыть селектор данных, в котором можно найти валютную пару или указать нужные данные.
-
Чтобы извлечь дополнительные сведения из типа данных Валюты, выберите одну или несколько преобразованных ячеек и нажмите кнопку Вставить данные отобразить или нажать клавиши CTRL/CMD+SHIFT+F5.
-
Вы увидите список всех доступных полей. Выберите поля, чтобы добавить новый столбец данных.
Например, «Цена» представляет обменный курс для валютной пары, а время последней сделки — время, в течение которого курс был цитироваться.
-
После того как у вас есть все необходимые данные о валюте, их можно использовать в формулахи вычислениях. Чтобы убедиться, что данные обновлены, перейдите в> Обновить все, чтобы получить обновленную кавычка.
Внимание: Сведения о валюте предоставляются «как есть» и могут быть задержаны. Поэтому эти данные не следует использовать в целях торговли или советов. Дополнительные сведения см. всведениях об источниках данных.
См. также
Типы данных «Акции» и «География»
Написание формул, ссылаясь на типы данных
Функция ПОЛЕVALUE
#FIELD! ошибка
Нужна дополнительная помощь?
Автоматическое обновление курса валют в Excel
Добрый день, уважаемые читатели! Сегодня поговорим об автоматическом обновлении курса валют. В предыдущем УРОКЕ мы рассматривали загрузку курсов валют, но чтобы они обновлялись необходимо либо нажимать кнопку «Обновить» на вкладке «Данные» либо щёлкать правой кнопкой по таблице и выбирать «XML» — > «Обновить XML данные».
Сегодня создадим макрос, который будет обновлять курсы при открытии рабочей книги.
Пойдём стандартным путем, сначала загрузим курсы валют через «Данные» — > «Из интернета» (сразу оговорюсь, данный способ опробован на сайте worldcoinicons.com, где можно отметить таблицу с курсами, но макрос, который будет ниже, подойдёт и для загрузки через XML с сайта Центрального банка России). Отмечаем галкой таблицу с курсами и жмём «Импорт», затем «ОК» (когда спросит в какую ячейку помещать курсы валют).
Теперь получим вот такую картину.
А вот теперь нам понадобится вкладка «Разработчик», где жмём кнопку «Visual Basic».
Теперь нам нужно для активного листа создать модуль и имя процедуры, которую будем вызывать при открытии книги. Жмём «Insert» -> «Module».
В тексте модуля пишем следующий текст:
Sub BTC()
ActiveWorkbook.RefreshAll
End Sub
Тем самым мы создали команду обновления всей книги (имя команды в моём случае BTC, вы можете написать что угодно!).
Далее переходим в пункту в левом меню «Эта книга» ( двойным щелчком), в поле «Object» выбираем «Workbook», в поле «Procedure» у нас само появится «Open», т.е. при открытии, далее пишем вызов команды BTC. которая и будет обновлять курс валюты.
Private Sub Workbook_Open()
Call BTC
End Sub
Тем самым мы вызываем созданную выше команду.
БУДЬТЕ ОЧЕНЬ ВНИМАТЕЛЬНЫ! Когда будете сохранять книгу выбираем тип книги .xlsm в окне сохранения иначе макросы не сохранятся!
Осталось проверить, как работает наш макрос. Для этого открываем книгу и обращаем внимание вверх, там будет кнопка «Включить содержимое», щёлкаем её, а затем смотрим в нижний левый угол программы. Там будет следующая картина.
Идёт фоновый запрос. Значит макрос работает и мы увидим обновлённый курс валют. Также хочу отметить, что иногда обновление занимает много времени (особенно с загрузкой XML данных), наберитесь терпения и всё будет хорошо!
Если что-то было непонятно — смотрим видео! Не забывайте писать комментарии и подписываться на канал!
Большинство работников финансовой сферы воспринимают Excel как красивый калькулятор. Мы решили помочь вам развить навыки использования этого важного инструмента, сделать из него настоящего помощника, а не просто хранителя данных. Предлагаем вам посмотреть, как можно подгрузить данные из сети Интернет непосредственно в таблицу Excel и создать функцию выбора курса валют на необходимую дату.
Немного больше 60 лет прошло с момента изобретения первого компьютера и около 50 лет с первых шагов по созданию интернета. Сейчас практически у каждого в кармане лежит мини-компьютер (смартфон) с доступом в сеть, уже начали появляться машины без водителя, некоторые и вовсе собираются колонизировать Марс. При этом большинство наших слушателей (работников финансовой сферы) до сих пор воспринимают Excel как красивый калькулятор. Мы решили помочь вам развить навыки использования этого важного инструмента, сделать из него настоящего помощника, а не просто хранителя данных.
Сегодня предлагаем вам посмотреть, как можно подгрузить данные из сети Интернет непосредственно в таблицу Excel и обработать их (создать функцию выбора курса валют на необходимую дату).
Для чего может понадобиться эта возможность?
Если вам регулярно необходим курс Центрального Банка РФ, то функция «Загрузка курса с сайта ЦБ» позволит сэкономить много времени.
Разбиваем задачу на две части:
(1) Автоматизируем загрузку курсов валют за необходимый период с сайта Центрального Банка России
(2) Пишем небольшой скрипт, который создаст «Пользовательскую функцию» для выбора курса на дату и предоставит его вставку в ячейку
Хотите уметь делать так сами? Это не сложно…
Ознакомьтесь со следующими курсами по Excel от HOCK Training:
(1) Загрузка курсов
Для решения данной задачи воспользуемся стандартным малоизвестным функционалом Excel.
* оговорка о совместимости версий
⚠ Данный функционал приводится для версий MS Office до 2020 года выпуска. Отличие новых версий офиса состоит в том, что путь к странице с данными указывается строкой (копи-пастом из браузера), а не через встроенный браузер MS Excel. Остальные действия по разработке функции аналогичны приведённым в данной статье.
Подробный разбор алгоритма действий в более новых версиях офиса приведен в дистанционном курсе «Программирование в Excel».
(1.1) Линейка «Данные» —> «Получение внешних данных» —> «Из Интернета»:
(1.2) В открывшемся внутреннем браузере Excel переходим на сайт ЦБ РФ и переходим на страницу с курсами:
(1.3) Далее необходимо указать период для загрузки:
(1.4) После получения данных нажмите кнопку «Импорт» и данные загрузятся в лист Excel
ВАЖНО!
Не забудьте перед этим поставить галочку в небольшом квадратике вверху страницы. На рисунке выше он зеленого цвета.
При этом в Excel будут загружены данные:
(1.5) Если все данные действия записать в виде макроса, то получим следующий скрипт в Visual Basic:
Обратите внимание на выделенные элементы кода. Если вносить в них изменения и запускать код на выполнение — будем получать курсы за нужный период. И не придется каждый раз повторять операции описанные выше в пунктах (1.1-1.4).
Следующий шаг — написание скрипта, который будет выбирать из подгруженных данных курс на требуемую дату и будет возвращать его при помощи функции в ячейку.
(2) Создание функции «Выбор курса на дату».
Используем возможности создания «Пользовательских функций» в редакторе Visual Basic:
(2.1) Создаем процедуру для обработки данных. Проверяем корректность работы программы на процедуре. Найденное значение курса записывается в переменную kurs (см листинг ниже).
(2.2) Меняем процедуру на функцию:
Скачать программу
(2.3) Вставляем в ячейку на листе с данными нашу функцию (ищите её в категории «Определенные пользователем»):
(2.4) «Растягиваем» ячейку с формулой на необходимый нам диапазон стандартным образом:
Работает 😉
Только для дочитавших до конца статьи — наш подарок:
Бесплатный воркшоп «Как начать программировать в Excel, совершенно не зная языка Visual Basic»
95% слушателей отметили вебинар как «очень полезный»
Вам понадобится компьютер с Windows и MS Office
Если вы хотите разобраться в автоматизации MS Excel более подробно, обратите внимание на следующие полезные ресурсы:
Справочник по VBA для Excel
https://docs.microsoft.com/ru-ru/office/vba/api/overview/excel
Справочная система «Объектная модель (Excel)»
https://docs.microsoft.com/ru-ru/office/vba/api/overview/excel/object-model
Дистанционный курс HOCK Training «Программирование в Excel»
https://www.hocktraining.com/distancionny-excel-dlya-finansistov
Практический тренинг «Обработка и анализ данных в Excel»
https://www.hocktraining.com/open/obrabotka-i-analiz-dannikh-v-excel
Все блоги