Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Еще…Меньше
Чтобы вставить цену акций в Excel, сначала преобразуем текст в тип данных Stocks (Акции). Затем вы сможете извлечь в другой столбец нужные сведения из этого типа данных, такие как цены акций или их изменения.
Примечание: Тип данных Stocks (Акции) доступен толькоMicrosoft 365 или с бесплатной учетной записью Майкрософт. В языковых параметрах Office также должен быть добавлен английский, французский, немецкий, итальянский, испанский или португальский язык редактирования.
-
Введите текст в ячейки. Например, в каждой ячейке введите тикер, название компании или название фонда.
-
Затем выберем ячейки.
-
Хотя это необязательно, рекомендуем создать таблицу Excel. Это упростит получение сведений из Интернета. Чтобы создать таблицу, выберите Вставка > Таблица.
-
Выбирая ячейки, перейдите на вкладку Данные и нажмите кнопку Акции.
-
Если Excel обнаружит совпадение между текстом в ячейках и веб-источниками, текст будет преобразован в тип данных Stocks. Вы будете знать, что они преобразованы, если у них есть значок акций:
.
-
Выберите одну или несколько ячеек с типом данных, и появится
добавить столбец. Нажмите эту кнопку, а затем щелкните имя поля, чтобы извлечь дополнительные сведения. Например, для акций можно выбрать Price.
-
Нажмите кнопку Добавить столбец еще раз, чтобы добавить дополнительные поля. Если вы используете таблицу, введите имя поля в строке заглавных строк. Например, введите Change (Изменить) в строке колонок акций, и в столбце цен появится изменение. Или введите другие имена полей, такие как Last Trade Time (Время последней торговли), Previous Close(Предыдущее закрытия) и Exchange .
Советы:
-
Чтобы увидеть все поля, доступные для компании или фонда, щелкните значок акций (
) или выберите ячейку и нажмите CTRL+SHIFT+F5.
-
Если вы видите
вместо значка, Excel не удается сопоставить текст с данными в веб-источниках. Исправьте орфографические ошибки и нажмите клавишу ВВОД, чтобы повторить попытку. Кроме того, вы можете щелкнуть
, чтобы открыть область выделения. Выполните поиск по ключевым словам, выделите нужные данные, а затем нажмите кнопку Выбрать.
-
Вы также можете писать формулы, ссылаясь на типы данных, или использовать функцию STOCKHISTORY.
-
Данные об акциях задерживаются, предоставляются «как есть» и не являются торговыми целями или рекомендациями. Дополнительные сведения см. в сведениях об источниках данных.
Дополнительные материалы
-
Подробнее о связанных типах данных
-
Функция ИСТОРИЯАКЦИЙ
-
Функция FIELDVALUE
-
Ошибка #ПОЛЕ! #BUSY!
Нужна дополнительная помощь?
39 комментариев
Какое отношение Excel имеет к таблице Google?
Где все-таки расположена неработающая формула? В каком табличном редакторе?
Что творится в ячейке А2?
Много, в общем, вопросов.
- 08 февраля 2023, 14:47
- Ответить
Алексей Федоров, а в Excel такие же формулы, если не ошибаюсь.
В A2 находится название тикера.
- 08 февраля 2023, 14:55
- Ответить
они в iss какую то трансформацию провели, что на днях все перестало работать. Надо ссылки перестраивать. Еще не разбирался
- 08 февраля 2023, 14:52
- Ответить
Андрей К, в (бондовом, по крайней мере) споте все по-старому (в части структуры url-ов), и все старые баги с расчетными параметрами, увы, на своих местах
- 09 февраля 2023, 07:56
- Ответить
flextrader, у нас все послетало нафиг из специфичной инфы. Но свечи работают стабильно ) решил уже на выхах позаниматься.
- 09 февраля 2023, 15:09
- Ответить
iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.dp=comma&iss.meta=off&iss.only=marketdata&marketdata.columns=SECID,LAST
- 08 февраля 2023, 14:57
- Ответить
Доктор Ливси, не работает или что-то не туда пишу
- 08 февраля 2023, 15:01
- Ответить
Доктор Ливси, Замените в своей формуле URL на мой и поменяйте парсинг в формуле concatenate(«//row[@SECID='»,A2,»‘]/@PREVADMITTEDQUOTE» на concatenate(«//row[@SECID='»,A2,»‘]/@LAST»
И имейте ввиду, что мосбиржа выдает котировки с задержкой примерно 15 мин. для запросов без платной подписки.
- 08 февраля 2023, 15:07
- Ответить
Доктор Ливси, так и делал. Только Loading пишет и всё.
- 08 февраля 2023, 15:15
- Ответить
Доктор Ливси, а можете файл на гугл диск выложить с примером?
- 08 февраля 2023, 15:31
- Ответить
Доктор Ливси, =importxml(«https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.dp=comma&iss.meta=off&iss.only=marketdata&marketdata.columns=SECID,LAST»;»//document//data//rows//row[@SECID=’AFKS’]/@LAST»)
- 08 февраля 2023, 15:49
- Ответить
Доктор Ливси, друзья, выложите файл с примером плс а ? уже неск человек просят.
- 08 февраля 2023, 18:19
- Ответить
Доктор Ливси, Здесь для проверки указан тикер AFKS, работает. Поменяйте у себя на подстановку тикера из требуемой ячейки.
- 08 февраля 2023, 15:51
- Ответить
Доктор Ливси, хмм… Работает только в новой таблице.
- 08 февраля 2023, 16:10
- Ответить
Доктор Ливси, Спасибо большое, очень помогли.
- 08 февраля 2023, 16:52
- Ответить
- 08 февраля 2023, 15:24
- Ответить
hdd, а можете файл на гугл диск выложить с примером?
- 08 февраля 2023, 15:31
- Ответить
тупо, конечно, но вставлю свои пять копеек. у меня excel после обновы перестал адрес показывать как «A2». Вместо этого теперь красуется «R2C1», может дело в названии?
- 08 февраля 2023, 15:26
- Ответить
Akreg, я читал, что надо PREVADMITTEDQUOTE заменить на PREVLEGALCLOSEPRICE. Но у меня не срабатывает.
- 08 февраля 2023, 15:30
- Ответить
Akreg, стиль ссылок в параметрах поменяйте. Галку снять надо
- 08 февраля 2023, 17:13
- Ответить
Заметил, что у вас в ссылке https, а у меня http. Я менял в свое время, помогало, попробуйте
- 08 февраля 2023, 15:46
- Ответить
- 08 февраля 2023, 16:16
- Ответить
у меня тоже через раз грузятся данные.
- 08 февраля 2023, 16:47
- Ответить
Если кому нужно, могу выложить вечером пример для LibreOffice Calc — у меня все работает — получение котировок с Мосбиржи по API бесплатному.
- 08 февраля 2023, 17:35
- Ответить
Alexide, скажите, а можно как-то автоматом выгружать данные по открытым позициям юров/физов в ексель, те, которые ещё каждые 5 минут обновляются? Что надо вообще прописать?
- 08 февраля 2023, 17:47
- Ответить
Xomyak147, это вроде платный сервис Мосбиржи. Бесплатно они только вчерашние данные показывают. Я не умею извлекать такие данные.
- 08 февраля 2023, 18:06
- Ответить
Alexide, не, это бесплатные данные, просто проходите регистрацию и они доступны будут
- 08 февраля 2023, 18:22
- Ответить
Alexide, Конечно выкладывайте! У меня Либре Офис на линуксе
- 08 февраля 2023, 18:09
- Ответить
можно попросить код для получения котировки золота?
=IMPORTXML(«iss.moex.com/iss/engines/currency/markets/selt/securities/GLDRUB_TOM.xml», «/document/data[@id=»«marketdata»»]/rows/row[@BOARDID=«CETS»]/@LAST»)
Так пробовал не получается
- 08 февраля 2023, 17:51
- Ответить
- 24 февраля 2023, 16:53
- Ответить
Алексей Заказников, Подскажи, пожалуйста, код для получения курса евро и доллара.
в приведенном выше коде пробовал менять GLDRUB_TOM на USDRUB_TOM, не получается
- 12 марта 2023, 12:14
- Ответить
- 08 февраля 2023, 19:18
- Ответить
Да что за WTF? Ежедневно вношу какие-то изменения в ссылки в Google Sheets. Начинает работать, на след день открываешь рабочий файл, — опять ошибки. Че происходит-то
- 09 февраля 2023, 20:16
- Ответить
- 28 февраля 2023, 09:38
- Ответить
Для таблиц Google:
=ImportXML(CONCATENATE(«https://www.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities/»,C5,».xml?iss.meta=off&iss.only=marketdata&securities.columns=LAST»),»/document/data/rows/row/@LAST»)
где С5 — это тикер.
Для Excel:
=ФИЛЬТР.XML(ВЕБСЛУЖБА(СЦЕПИТЬ(«https://www.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities/»;C5;».xml?iss.meta=off&iss.only=marketdata&securities.columns=LAST»));»//document//data//rows//row/@LAST»)
- 17 марта 2023, 17:33
- Ответить
Дайте совет, как сделать, чтобы котировки в экселе обновлялись автоматически? Приходится нажимать F2+Enter. Параметр автоматического расчета для формул включен.
Значение в ячейке такое: =ПОДСТАВИТЬ( ФИЛЬТР.XML(ВЕБСЛУЖБА(«iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.dp=comma&iss.meta=off&iss.only=marketdata&marketdata.columns=SECID,LAST»);»//document//data//rows//row[@SECID=’SBER’]/@LAST»);».»;»,»)
- 04 апреля 2023, 21:10
- Ответить
Ранее уже писал про получение данных с Московской биржи через формулы Google Таблиц. Однако остался вопрос — можно ли получать эти же данные при локальном использовании Microsoft Excel или его свободного аналога LibreOffice Calc? Без использования скриптов или ручного копирования.
Microsoft Excel с формулами получения данных с Мосбиржи
И на этот вопрос можно дать положительный ответ. Это даже более удобно, поскольку не приходится ожидать загрузки результатов работы функции IMPORTXML в Гугл Таблицах.
Аналогом этой функции в Excel и Calc выступает связка формул: WEBSERVICE (ВЕБСЛУЖБА) + FILTERXML (ФИЛЬТР.XML).
При работе с Microsoft Excel есть некоторые нюансы:
- Эти функции доступны только в Excel 2013 и более поздних версиях для Windows.
- Эти функции не будет возвращать результаты на компьютере Mac.
Для LibreOffice Calc подобных ограничений меньше:
Собрал работоспособный пример «API Мосбиржи в Microsoft Excel.xlsx
» с функциями, которые описаны в программном интерфейсе к информационно-статистическому серверу Московской Биржи (ИСС / ISS). Плюс добавил некоторые функции, которые были найдены читателями первой части статьи про гугл таблицы.
Протестировал этот файл в Microsoft Excel 2019 под Windows 10 и в LibreOffice Calc 6.4 под Linux Mint 19.3. Под Mac OS у меня возможности протестировать не было.
API Московской биржи в формулах MS Excel
В общем виде все запросы, которые можно отправить к API Мосбиржи есть в справочнике. Но лично для меня этот справочник до сих пор не особо понятен.
Идентификатор режима торгов
В API Московской биржи очень многое зависит от параметра «Идентификатор режима торгов» (primary_boardid), который можно посмотреть прямо у них на сайте через форму поиска.
Идентификатор режима торгов для акций Тинькофф
Также этот идентификатор можно посмотреть через обычный HTTP-запрос к API:
https://iss.moex.com/iss/securities.xml?q=ТУТ ПИШЕМ НАЗВАНИЕ ИНСТРУМЕНТА ИЛИ ЕГО ЧАСТЬ&iss.meta=off&securities.columns=name,emitent_inn,isin,secid,primary_boardid
Поиск через HTTP-запрос к API Мосбиржи по слову Пермь
Автоматическое получение имени акций, облигаций и ETF
Очень удобно, что можно получить полное или краткое наименование инструмента. Для облигаций полное название особенно понятно.
Файл «API Мосбиржи в Microsoft Excel.xlsx
» с примерами автоматического получения имени для разных классов активов. Корректно работает и в LibreOffice Calc
Автоматическое получение текущих цен
На этой вкладке представлены актуальные примеры для получения цен акций, облигаций и ETF с Московской биржи.
Цена предыдущего дня берётся через PREVADMITTEDQUOTE, а не LAST с 15 минутной задержкой, поскольку по некоторым низко ликвидным инструментам через LAST цены может просто не быть.
Файл «API Мосбиржи в Microsoft Excel.xlsx
» с примерами автоматического получения имени для разных классов активов. Корректно работает и в LibreOffice Calc
Автоматическое получение дивидендных выплат для акций
Очень удобная функция Мосбиржи, которая позволяет получать не только значение текущей выплаты, но и историю выплат дивидендов вместе с датами и значениями.
Файл «API Мосбиржи в Microsoft Excel.xlsx
» с примерами автоматического получения имени для разных классов активов. Корректно работает и в LibreOffice Calc
Автоматическое получение облигационных выплат
По облигациям (не только корпоративным, но также ОФЗ и еврооблигациям) можно автоматически получать дату выплаты следующего купона и его значение.
Файл «API Мосбиржи в Microsoft Excel.xlsx
» с примерами автоматического получения имени для разных классов активов. Корректно работает и в LibreOffice Calc
Автоматическое получение дат оферт
Удобно планировать собственные финансы, получая даты оферт (дата, в которую инвестор или эмитент имеют право досрочно погасить облигацию по цене номинала) автоматически.
Файл «API Мосбиржи в Microsoft Excel.xlsx
» с примерами автоматического получения имени для разных классов активов. Корректно работает и в LibreOffice Calc
UPD. Пользователь mixei подсказывает, что автоматическое обновление настраивается через Параметры — Центр управления безопасностью — вкладка Внешнее содержимое — там надо поставить все флажки где не рекомендуется Но это на страх и риск пользователей.
Итог
API Московской биржи предоставляет широкие возможности, которые гораздо шире чем описанные в данной статье. Это статья своеобразная шпаргалка для долгосрочного частного инвестора, который ведёт учёт в локальном файле на собственном компьютере.
Также хочу отметить, что я никак не связан с Московской биржей и использую ИСС Мосбиржи только в личных интересах.
Автор: Михаил Шардин,
21 апреля 2020 г.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Microsoft Excel или LibreOffice Calc для локального использования?
22.22%
LibreOffice Calc
20
Проголосовали 90 пользователей.
Воздержались 11 пользователей.
Файлы к уроку:
- Для спонсоров Boosty
- Для спонсоров VK
Ссылки:
- Страница курса
- Плейлист YouTube
- Плейлист ВК
Описание
В этом уроке мы научимся получать прямо в Excel котировки разных ценных бумаг с сайта Московской биржи.
Решение
Московская биржа предоставляет возможность скачивать котировки и другую информацию по ценным бумагам при помощи специальных ссылок.
Если мы введем такую ссылку в Power Query, создав запрос из интернета, то получим интересующие нас котировки прямо в Excel.
Вот ссылка на сайте Московской биржи https://iss.moex.com/iss/reference/ На этой странице вы можете увидеть какую именно информацию вы можете получить с сайта Московской биржи. Котировками дело не ограничивается.
Все ссылки конструируются примерно по одному шаблону. В этом примере мы разберем получение котировок при помощи Power Query, но если вам нужна какая-то другая информация, то вы по аналогии сможете создать похожую ссылку.
Наша ссылка будет выглядеть так — https://iss.moex.com/iss/history/engines/stock/markets/shares/securities/SBER/securities.xml
В том месте, где написано SBER нужно вставить тикер интересующей вас ценной бумаги. Далее, развернув таблицу, вы получите таблицу с котировками, но только 100 строк. Это максимальное количество, которое позволено выгружать. Нам нужно что-то придумать, чтобы выгружать больше строк.
Что делать, чтобы получить много строк? Нужно использовать параметр start. Мы создадим столбец с числами с инкрементом 100 и в каждой строке будем запрашивать информация по ссылке.
Примененные функции
- Xml.Tables
- Web.Contents
- List.Numbers
- Table.FromList
- Splitter.SplitByNothing
- ExtraValues.Error
- Table.AddColumn
- Text.From
- Table.SelectColumns
- Table.ExpandTableColumn
- Table.TransformColumnNames
- Text.AfterDelimiter
Код
Пример получения 100 строк:
let
source = Xml.Tables(
Web.Contents(
"http://iss.moex.com/iss/history/engines/stock/markets/shares/securities/SBER/securities.xml?start=300"
)
){0}[Table]{0}[rows]{0}[row]
in
source
Пример получения 4000 строк:
let
source = List.Numbers(1, 40, 100),
to_table = Table.FromList(
source,
Splitter.SplitByNothing(),
null,
null,
ExtraValues.Error
),
table_add_col = Table.AddColumn(
to_table,
"Пользовательская",
each Xml.Tables(
Web.Contents(
"http://iss.moex.com/iss/history/engines/stock/markets/shares/securities/SBER/securities.xml?start="
& Text.From([Column1])
)
){0}[Table]{0}[rows]{0}[row]
),
cols_select = Table.SelectColumns(table_add_col, {"Пользовательская"}),
col_expand_table = Table.ExpandTableColumn(
cols_select,
"Пользовательская",
{
"Attribute:BOARDID",
"Attribute:TRADEDATE",
"Attribute:SHORTNAME",
"Attribute:SECID",
"Attribute:NUMTRADES",
"Attribute:VALUE",
"Attribute:OPEN",
"Attribute:LOW",
"Attribute:HIGH",
"Attribute:LEGALCLOSEPRICE",
"Attribute:WAPRICE",
"Attribute:CLOSE",
"Attribute:VOLUME",
"Attribute:MARKETPRICE2",
"Attribute:MARKETPRICE3",
"Attribute:ADMITTEDQUOTE",
"Attribute:MP2VALTRD",
"Attribute:MARKETPRICE3TRADESVALUE",
"Attribute:ADMITTEDVALUE",
"Attribute:WAVAL"
},
{
"Attribute:BOARDID",
"Attribute:TRADEDATE",
"Attribute:SHORTNAME",
"Attribute:SECID",
"Attribute:NUMTRADES",
"Attribute:VALUE",
"Attribute:OPEN",
"Attribute:LOW",
"Attribute:HIGH",
"Attribute:LEGALCLOSEPRICE",
"Attribute:WAPRICE",
"Attribute:CLOSE",
"Attribute:VOLUME",
"Attribute:MARKETPRICE2",
"Attribute:MARKETPRICE3",
"Attribute:ADMITTEDQUOTE",
"Attribute:MP2VALTRD",
"Attribute:MARKETPRICE3TRADESVALUE",
"Attribute:ADMITTEDVALUE",
"Attribute:WAVAL"
}
),
types = Table.TransformColumnNames(
col_expand_table,
each Text.AfterDelimiter(_, ":")
)
in
types
Этот урок входит в курс Веб-запросы в Power Query
Номер урока | Урок | Описание |
---|---|---|
1 | Котировки Yahoo Finance | Вы хотите получить историю котировок акций MCD с 2000 года по текущий день с сайта Yahoo Finance. Вы копируете ссылку на раздел с историческими данными, вставляете ссылку в Power Query и получаете только 100 строк. |
2 | HTML, получение данных по облигациям | Мы хотим получить данные по всем облигациям со страницы bonds.finam.ru |
3 | Многостраничное извлечение | На разных страницах находятся сайта находятся котировки золота на каждый год. Нужно соединить все данные в одну таблицу. |
4 | JSON, Котировки Yahoo Finance 2 | В этом уроке мы разберем еще один способ скачивания котировок с Yahoo Finance. Этот способ намного удобнее и быстрее. Здесь мы научимся обрабатывать формат JSON. |
5 | Котировки Московской биржи | В этом уроке мы научимся получать прямо в Excel котировки разных ценных бумаг с сайта Московской биржи. Московская биржа предоставляет возможность скачивать котировки и другую информацию по ценным бумагам при помощи специальных ссылок. Если мы введем такую ссылку в Power Query, создав запрос из интернета, то получим интересующие нас котировки прямо в Excel. |
6 | Неразмеченный текст | Вы делаете запрос к Web-странице и сталкиваетесь с неразмеченным текстом. Вы хотите при помощи Power Query этот неразмеченный текст преобразовать в нормальную красивую таблицу. |
7 | Текстовый документ, веб-страница, List.Zip | В этом запросе мы научимся получать нужную информацию из текста веб-страницы. |
8 | Youtube Data API | В этом уроке мы научимся получать данные из Youtube Data API. Узнаем как получить данные о Youtube канале: список видео и плейлистов, названия, описания, длительность, тэги, количество лайков, дизлайков, просмотров и комментариев. |
9 | Личный OneDrive — подключаемся напрямую к файлам и папкам | В этом уроке мы разберем как напрямую подключиться к файлам и папкам на личном OneDrive. |
10 | Подключение Google Spreadsheets, Google Drive (Excel.Workbook, Web.Contents) | В этом уроке мы научимся подключаться к xlsx файлам, которые находятся в вашем Google Drive. |
11 | Получить все станции метро | Получим таблицу с перечнем станций метрополитена даже с координатами широты и долготы. |
12 | Получить ссылки с веб-страницы (Html.Table) | Получить URL с веб-страницы. Сделать запрос к каждому URL, получить таблицы и объединить их всех по вертикали. |
13 | Получить все URL с веб-страницы | Получим нужные URL с веб-страницы в Excel. Сделать запрос к каждому URL, получить таблицы и объединить их по вертикали. |
14 | Ищем работу через API Head Hunter (hh.ru) | Получим таблицу с перечнем вакансий с сайте HH. Получим вакансии, в названии или описании которых встречаются слова SQL, Pandas, Power Query, Power Pivot, Power BI. |
15 | Запрос к XML Sitemap | Сделаем запрос к sitemap.xml, чтобы извлечь список всех веб-страниц сайта. |
Я уже неоднократно разбирал способы импорта данных в 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