Google Docs: текущий курс валюты

Текущий курс валюты (в примере — курс доллара ЦБ РФ) можно получить с помощью следующей функции:

=IMPORTXML("http://www.cbr.ru/scripts/XML_daily.asp"; "//ValCurs/Valute[CharCode=""USD""]/Value")

То же самое на любую дату:

=IMPORTXML("http://www.cbr.ru/scripts/XML_daily.asp?date_req=01/01/2011"; "//ValCurs/Valute[CharCode=""USD""]/Value")

Дополнение от 7 янв. 2015:
Спасибо Илье Кочеткову за упрощение формулы. Старый вариант под катом. Возможно, кому-то пригодятся и решения из него. А можно даже ещё проще, т.к. буквенный код валюты уникален:
=IMPORTXML("http://www.cbr.ru/scripts/XML_daily.asp"; "//*[*=""USD""]/Value")
Спасибо Михаилу.

Дополнение от 13 фев. 2016:
Есть способ проще, с использованием встроенной функции:

=GOOGLEFINANCE("USDRUB")

Однако это не курс ЦБ РФ. Указывать дату также можно; подробная справка по функции находится здесь. Спасибо за подсказку Ивану.

Старый вариант:

=IMPORTXML("http://www.cbr.ru/scripts/XML_daily.asp"; "//ValCurs/Valute[@id="&char(34)&"R01235"&char(34)&"]/Value")

То же самое на любую дату:

=IMPORTXML("http://www.cbr.ru/scripts/XML_daily.asp?date_req=01/01/2011"; "//ValCurs/Valute[@id="&char(34)&"R01235"&char(34)&"]/Value")

42 thoughts on “Google Docs: текущий курс валюты”

  1. Во мне умер оптимизатор :) Для четких пацанчиков привязка по ID: «//*[@ID=’R01235′]/Value»

  2. Подскажите как с «http://www.cbr.ru/scripts/xml_metall.asp?date_req1=число/меся/год&date_req2=число/меся/год» парсить в гугл докс цену драг металла?

    1. По аналогии :) Или уточните, пожалуйста, что именно Вам нужно и за какие периоды.
      Вот пример формулы для вывода цен покупки для нескольких дат и металла с кодом «1»:

      =IMPORTXML("http://www.cbr.ru/scripts/xml_metall.asp?date_req1=10/06/2016&date_req2=20/06/2016";"//Record[@Code='1']/Buy")
    2. Отлично! Вообще я мимопроходящий и кодить не умею.) Просто удовлетворяю свой хозяйственный интерес). На самом деле в идеале хочется получить такой же результат как и для курса валют, т.е. именно единичное значение текущего курса. Но на сайте цб рф нет функции вывода текущего значения, только вывод за период. Может есть какой-нибудь деликатный вариант ?)

    3. Очевидное решение — подставить одну и ту же дату в параметры адресной строки «date_req1» и «date_req2»:
      http://www.cbr.ru/scripts/xml_metall.asp?date_req1=21/06/2016&date_req2=21/06/2016
      Соответственно, применительно к приведённому выше примеру:

      =IMPORTXML("http://www.cbr.ru/scripts/xml_metall.asp?date_req1=10/06/2016&date_req2=20/06/2016";"//Record[@Code='1']/Buy")

      Просто подставляете нужный id валюты и необходимый тип цену – Buy или Sell.
      Если нужно на сегодняшний день, то подставляете вместо даты формулу, преобразующую сегодняшний день в нужный формат:

      =TEXT(TODAY();"dd/mm/yyy")

      Ну и в итоговой формуле это выглядит так:

      =IMPORTXML("http://www.cbr.ru/scripts/xml_metall.asp?date_req1=" & TEXT(TODAY();"dd/mm/yyy") & "&date_req2=" & TEXT(TODAY();"dd/mm/yyy");"//Record[@Code='1']/Buy")

      И это не «кодинг» :)

    4. KodopiK, здравствуйте. Благодарю Вас за Ваш труд и ресурс. В частности, за разбор данного «лайфхака» в Гуглотаблицах.
      У меня вопрос — Ваша итоговая формула, с подставлением даты (=TEXT(TODAY();»dd/mm/yyy»)) — не работает. Как я не пытался реанимировать — никак.
      В тоже время статическое указание диапазона даты — работает без изменений.
      (=IMPORTXML(«http://www.cbr.ru/scripts/xml_metall.asp?date_req1=10/06/2016&date_req2=20/06/2016″;»//Record[@Code=’1′]/Buy»)_
      Подскажите, пожалуйста — как мне быть? Задача ровно та же самая — иметь в таблице цену золота на сегодняшний день.
      Благодарю Вас.

    5. Здравствуйте. Спасибо за отзыв.

      Просто сайтом ЦБ РФ сейчас почему-то не выдаются данные по ссылкам:
      http://www.cbr.ru/scripts/xml_metall.asp?date_req1=31/07/2017&date_req2=31/07/2017
      http://www.cbr.ru/scripts/xml_metall.asp?date_req1=30/07/2017&date_req2=30/07/2017

      А вот на 29-е число есть данные:
      http://www.cbr.ru/scripts/xml_metall.asp?date_req1=29/07/2017&date_req2=29/07/2017

      Хоть это и ЦБ РФ, у них тоже случаются технические ошибки. Напишите им в поддержку о замеченной неисправности. Они обычно чинят.

      Удачи!

  3. Приведенная формула выдает целое число, нет запятой после рублей. Соответственно, чтобы использовать в расчетах, приходится импортированное значение делить на 10 000. Возможно есть какое-то более элегантное решение?

    1. У меня выдаётся число в формате: «63,0399». Возможно, Вам нужно поправить настройки таблицы. А именно региональные настройки — чтобы запятая, а не точка, была дробным разделителем. Поставьте российский (европейский), а не американский формат чисел. Делается это здесь: Файл → Настройки таблицы → Региональные настройки.

    2. Спасибо, но не помогло. После смены формата у меня выдается число «624 499,00».

    3. Очень странно. Перед тем, как Вам ответить, специально протестировал на чистом файле. Моя теория подтвердилась. Видимо, есть ещё какой-то фактор, влияющий на вывод.

      Но ведь деление — тоже вполне себе элегантное решение :)

  4. Здравствуйте,
    помогите пожалуйста решить слудующую задачу: пытаюсь создать формулу в гугл докс (таблица ексель) чтобы автоматически импортировало в ячейку актуальные курсы некоторых криптовалют, например Биткойн/евро и Рыппл/евро с сайта https://www.bitstamp.net/. Как написать формулу чтобы ето работало. Заренее всем благодарен за ответ. С уважением Марьян.

    1. Добрый день.
      Вообще-то работает просто

      =GOOGLEFINANCE("BTCEUR")

      Но если надо именно с Bitstamp, то лучше брать курс из тех источников, которые отдают данные в нормальном виде. Например, для этого подойдёт Bitstamp API:
      https://www.bitstamp.net/api/v2/ticker/btceur/
      Проблема в том, что данные выдаются в JSON, а в Google Spreadsheets нет встроенной функции для обработки этого формата. Можно написать свою, но это работа со скриптами. Оно Вам надо?

    2. Здравствуйте,
      спасибо за быстрый ответ. Через =GOOGLEFINANCE(«BTCEUR») это я сделал но там нету другой крипты. Идеально было бы взять курсы с https://coinmarketcap.com/#EUR. Там есть практически вся крипта. Но для этого мне уже знаний не зватает.

    3. Вот прям такой в точности тикер — BTCEUR — точно есть. У меня это работает. В точности Ваш пример — биткойн и евро.

    4. Зачем скрипт? Всё в одну строчку умещается, если с importdata заюзать index, sustitute, regexextract и value. Но проблема в том, что всё эти IMPORTXML,IMPORTDATA, GOOGLEFINANCE это не текущие (не real-time) котировки, временной лаг до 20 минут! Я вообще сомневаюсь, что в гугл докс возможно организовать обновление котировок хотя бы раз в секунду. Т.е. все эти функции можно применять только для долгосрочного планирования, но не для определения текущих котировок в данный момент.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *