Каждый инвестор рано или поздно сталкивается с необходимостью ведения учёта своего портфеля, особенно если брокеров несколько. В первом приближении для этого подходит Excel: многим знаком, работает локально и почти всегда установлен на компьютере. Подходит для расчета доходности, учета дивидендов.

Однако механическая работа со временем утомляет, а возможности Excel для автоматизации онлайн получения котировок ограничены. Google Таблицы решают эту проблему: это изначально облачный инструмент. Чтобы получить актуальную цену акций, достаточно одной формулы.

В этой статье мы разберём, как Google Таблицы могут дать инвестору больше свободы. Я покажу на примерах, как с помощью встроенных инструментов и простых гугл скриптов (Google Apps Script) превратить таблицу в полноценную платформу для анализа и автоматизации вашего портфеля. А ещё разберем получение котировок в обоих инструментах.

Получаем данные с Московской Биржи

Google Таблицы

Google Таблицы обращаются к онлайн-данным через встроенную функцию IMPORTXML. Это по сути встроенный парсер, который заходит по ссылке и вытаскивает нужный фрагмент из XML или HTML.

Google Таблицы
Google Таблицы

Пример (в ячейке A3 указан тикер SBER):

Наименование: =IMPORTxml("https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,SECNAME"; concatenate("//row[@SECID='";A3;"']/@SECNAME"))

Цена сегодня: =SUBSTITUTE(
IMPORTxml("https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.meta=off&iss.only=marketdata&marketdata.columns=SECID,LAST"; concatenate("//row[@SECID='";A3;"']/@LAST"))
;"."; ",")

Цена вчера: =SUBSTITUTE( IMPORTxml("https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,PREVLEGALCLOSEPRICE"; concatenate("//row[@SECID='";A3;"']/@PREVLEGALCLOSEPRICE")) ;"."; ",")

Результат выглядит так:

Тикер

Наименование

Цена сегодня, 17.10.2025

Цена вчера, 16.10.2025

SBER

Сбербанк России ПАО ао

302,32

293,27

Работает одинаково в Chrome, Safari, Firefox, на Windows, macOS и даже в телефоне. Везде одинаково.

Excel

Excel тоже может получать данные из сети, но делается это чуть сложнее. Здесь уже нужно использовать связку двух функций:

  • ВЕБСЛУЖБА() — скачивает XML‑страницу с данными;

  • ФИЛЬТР.XML() — находит в ней нужные элементы по XPath‑запросу.

Microsoft Excel под Windows
Microsoft Excel под Windows

Пример дляSBER:

Наименование: =@ФИЛЬТР.XML(ВЕБСЛУЖБА("https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,SECNAME");"//document//data//rows//row[@SECID='"&A3&"']/@SECNAME")

Цена сегодня: =ПОДСТАВИТЬ(@ ФИЛЬТР.XML(ВЕБСЛУЖБА("https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.meta=off&iss.only=marketdata&marketdata.columns=SECID,LAST");"//document//data//rows//row[@SECID='"&A3&"']/@LAST");".";",")

Цена вчера: =ПОДСТАВИТЬ(@ ФИЛЬТР.XML(ВЕБСЛУЖБА("https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,PREVLEGALCLOSEPRICE");"//document//data//rows//row[@SECID='"&A3&"']/@PREVLEGALCLOSEPRICE");".";",")

Результат:

Тикер

Наименование

Цена сегодня

Цена вчера

SBER

Сбербанк России ПАО ао

302,14

293,27

Но есть важное ограничение: функции ВЕБСЛУЖБА и ФИЛЬТР.XML работают только в Excel под Windows. На macOS они просто не поддерживаются, а в Excel Online выдадут ошибку.

Горячие клавиши и нюансы ОС

В Excel под Windows можно обновить все данные во всех листах сочетанием Ctrl + Alt + F9. Программа пересчитает все формулы, включая сетевые запросы.

Этот же файл в LibreOffice Calc под Linux - обновляется, но вот форматы дат другие
Этот же файл в LibreOffice Calc под Linux - обновляется, но вот форматы дат другие

Однако под Linux та же комбинация приведёт к неожиданному результату — чёрному экрану. Почему? Потому что Ctrl + Alt + F9 в Linux переключает систему в консольную сессию (TTY9). Вы просто покидаете графический интерфейс и попадаете в консоль. Чтобы вернуться обратно, нажмите Ctrl + Alt + F1 (или F2, в зависимости от дистрибутива).

Правильная комбинация для LibreOffice Calc под Linux — Ctrl + Shift + F9, она безопасно обновляет все формулы без переключения терминалов.

Хочу заметить, что котировки предоставлены здесь исключительно для ознакомления и скачиваем мы их тоже для этого, в соответствии с правилами Московской биржи.

Когда стандартных формул мало. Знакомство с Google Apps Script

По‑русски это просто гугл‑скрипты — встроенный язык, который позволяет расширять возможности Google Таблиц. Если IMPORTXML — это способ «заглянуть» на сайт и взять нужный кусок данных, то Google Apps Script (GAS) — это уже полноценный инструмент автоматизации.

Представьте, что вам нужно не просто получить цену акции, а, например, узнать ИНН компании по её тикеру. Стандартные формулы тут бессильны: данные разбросаны по страницам, требуют парсинга JSON‑ответа и циклических запросов к API.

Здесь помогает GAS — это JavaScript, который выполняется внутри Google Таблиц. Вы можете написать свою функцию, например =GET_INN_BY_TICKER("SBER"), и она будет работать как родная формула. Google сам выполнит запрос к API Московской биржи, обработает данные и вернёт результат в ячейку.

Для Excel аналогом служит VBA — Visual Basic for Applications. Но там любая работа с веб‑данными превращается в мучительный процесс: ручная настройка, COM‑объекты, ошибки безопасности. В GAS всё проще: несколько строк на JavaScript — и ваша таблица умеет то, чего не умеет Excel.

Конкретная специфическая задача - ищем ИНН по тикеру с биржи

Мы создадим свою формулу прямо в таблице — простую, как =SUM(), только с реальными данными Московской биржи. Задача: получить ИНН компании по её биржевому тикеру.

Шаг 1. Открываем редактор скриптов

Откройте вашу Google Таблицу. В верхнем меню выберите Расширения → Apps Script. Перед вами появится окно с кодом — это и есть встроенный редактор. Удалите содержимое и вставьте наш код функции GET_INN_BY_TICKER.

Шаг 2. Вставляем код

// =================================================================
// ТЕСТОВАЯ ФУНКЦИЯ
// =================================================================

/**
 * Запускает тесты для функции GET_INN_BY_TICKER и выводит результаты в лог.
 * Эту функцию нужно запускать прямо из редактора Apps Script.
 *    
 * Автор: Михаил Шардин
 * Онлайн-визитка: https://shardin.name/
 * 
 */
function test_getInnByTicker() {
  const testTickers = ["SBER", "LKOH", "NONE", "gazp"];

  Logger.log("--- Начинаем тестирование функции GET_INN_BY_TICKER ---");

  testTickers.forEach(ticker => {
    // Вызываем основную функцию
    const inn = GET_INN_BY_TICKER(ticker);
    
    // Выводим результат в лог (журнал выполнения)
    Logger.log(`Результат для "${ticker}": ${inn}`);
  });

  Logger.log("--- Тестирование завершено ---");
}

/**
 * Получает ИНН (Идентификационный номер налогоплательщика) для компании по её тикеру на Московской бирже.
 *
 * @param {string} ticker Тикер акции, например, "SBER" или "LKOH".
 * @return {string} ИНН компании или сообщение об ошибке, если тикер не найден.
 *    
 * Автор: Михаил Шардин
 * Онлайн-визитка: https://shardin.name/
 * 
 */
function GET_INN_BY_TICKER(ticker) {
  // Проверяем, был ли передан тикер в функцию
  if (!ticker) {
    return "Ошибка: Укажите тикер акции.";
  }

  // Приводим тикер к верхнему регистру
  const targetTicker = ticker.toUpperCase();
  const baseUrl = "https://iss.moex.com/iss/securities.json";
  const params = "?engine=stock&market=shares&iss.meta=off"; // iss.meta=off для более простого ответа
  
  let start = 0;
  const step = 100; // API MOEX возвращает по 100 записей за раз

  // Цикл для перебора страниц с данными (пагинация)
  while (true) {
    try {
      const fullUrl = `${baseUrl}${params}&securities.columns=secid,emitent_inn&start=${start}`;
      
      // Выполняем запрос к API Московской биржи
      const response = UrlFetchApp.fetch(fullUrl, {'muteHttpExceptions': true});
      const data = JSON.parse(response.getContentText());

      // Извлекаем массив с данными по акциям
      const securitiesData = data.securities.data;

      // Если массив пуст, значит, мы просмотрели все страницы
      if (securitiesData.length === 0) {
        break; 
      }

      // Ищем нужный тикер в полученных данных
      for (let i = 0; i < securitiesData.length; i++) {
        const row = securitiesData[i];
        const currentTicker = row[0]; // secid
        const inn = row[1];           // emitent_inn

        if (currentTicker === targetTicker) {
          // Если тикер найден, возвращаем ИНН
          return inn ? String(inn) : `ИНН не указан для ${targetTicker}`;
        }
      }
      
      // Переходим к следующей странице
      start += step;

    } catch (e) {
      // В случае ошибки возвращаем её описание
      return `Ошибка API: ${e.message}`;
    }
  }

  return `Тикер "${targetTicker}" не найден.`;
}

Шаг 3. Что делает этот код

UrlFetchApp.fetch(fullUrl) отправляет запрос на сайт Московской биржи — как будто вы сами открыли эту ссылку в браузере.
 — JSON.parse(...) превращает ответ в удобный формат, где можно обращаться к элементам массива.
 — Цикл for (...) просто перебирает все акции, пока не найдёт нужный тикер.

Шаг 4. Запускаем

Сохраните проект (иконка дискеты) и вернитесь в таблицу. В любой ячейке введите: =GET_INN_BY_TICKER("LKOH"). Нажмите Enter — через секунду появится ИНН компании «Лукойл».

В Excel аналогичная задача потребовала бы VBA с ручной настройкой HTTP‑запросов.

Что еще можно сделать? Безграничные возможности автоматизации

Google Apps Script открывает возможности, которые превращают таблицу в инвестиционную платформу:

Автоматические уведомления. Представьте: вы задали целевую цену покупки или продажи акции, а скрипт проверяет котировки каждый час и отправляет вам письмо на почту или сообщение в Telegram, когда порог достигнут. Никаких платных сторонних сервисов — всё работает внутри таблицы. Настраивается за 10 минут.

Сбор статистики. Можно запускать скрипт раз в день по расписанию — он будет автоматически записывать цены закрытия по всем позициям портфеля на отдельный лист. Через месяц у вас уже будет история для анализа трендов и расчёта волатильности без ручного копирования данных.

Интеграция с другими сервисами. Google Apps Script умеет не только забирать котировки с биржи. Вы можете парсить RSS‑ленты с новостями о ваших компаниях, синхронизировать данные с Google Календарём (например, отмечать даты дивидендных выплат) или автоматически формировать PDF‑отчёты в Google Документах.

Создание собственных дашбордов. Скрипты могут строить графики динамики портфеля и даже генерировать полноценные отчёты по расписанию. Всё это без программирования сложной логики — только простой JavaScript и встроенные возможности экосистемы Google API.

Заключение

Для частного инвестора важны актуальные данные и Google Таблицы предлагают готовое решение. Встроенные функции для работы с веб-данными и Google Apps Script позволяют достаточно просто создавать инструменты анализа.

Скопируйте мой скрипт из этой статьи, попробуйте эту функцию, и вы увидите, насколько мощным инструментом для анализа может стать обычная электронная таблица.

Автор: Михаил Шардин
? Моя онлайн‑визитка
? Telegram «Умный Дом Инвестора»

21 октября 2025

Комментарии (15)


  1. Gedeonych
    21.10.2025 02:35

    Вот ещё бы учесть современные реалии с использованием функционала иностранных платформ, то было бы всё совсем радужно ... (да-да, "для частного..." в заголовке я заметил), но всё же...

    А за статью спасибо, интересное сравнение.


    1. empenoso Автор
      21.10.2025 02:35

      Здесь про котировки с Мосбиржи


      1. grizzly_8
        21.10.2025 02:35

        Кстати, про "иностранные платформы". На Яндекс Документах это все работать будет или там функционал не дотягивает?


        1. empenoso Автор
          21.10.2025 02:35

          Я не знаю


          1. xSVPx
            21.10.2025 02:35

            Рискменеджмент не ваше...


  1. Armitage1986
    21.10.2025 02:35

    В Excel 365 есть инструмент "Акции" (вкладка "данные"), который по тикеру загружает кучу данных на выбор.
    С мосбиржей не работает, к сожалению, но в остальном вполне удобный инструмент.


    1. empenoso Автор
      21.10.2025 02:35

      Скорее всего до определённых событий мосбиржа там была


      1. Armitage1986
        21.10.2025 02:35

        Увы, но нет, скорее всего. Я на подписке с 2019 года и мосбиржи там не было еще тогда.


  1. degroeg
    21.10.2025 02:35

    Что в Excel что в Google есть замечательные инструменты для работы с акциями: STOCKHISTORA в Excel (как уже отмечено выше) и GOOGLEFINANCE в Google. И да, на хабре были статьи как этими инструментами пользоваться. Каждый из них хорош по своему, со своими достоинствами и недостатками. Но для домашнего брокера, самое то - покрывают процентов 90 необходимого.

    Если надо больше и хотите данные напрямую с интерета скачивать, то в Excel есть такая вещь как DataQuerry, никакой VBA тут не нужен.

    Если же вам и этого мало, то в том же Excel есть ExcelScript (запускается из вкладки Автоматизация, правда требует онлайн и OneDrive, впрочем как и Google).


    1. empenoso Автор
      21.10.2025 02:35

      Для функции ИСТОРИЯАКЦИЙ требуется Microsoft 365 персональный, Microsoft 365 для семьи, Microsoft 365 бизнес стандартный или подписка Microsoft 365 бизнес премиум.

      И бумаг с Мосбиржи там сейчас всё равно нет.


  1. Prologos
    21.10.2025 02:35

    Делал нечто похожее и для себя лет 5 назад, только чуть проще, но это все стало неинтересно, так как на этом трудно что то заработать,.. по мне так, наверно легче в тотализатор играть - понятно хотя бы где вход и выход


  1. isumix
    21.10.2025 02:35

    Все пытаются подсадить на иглу подписок и облаков. Лично я всегда выберу свое хранение и бэкапы.


    1. empenoso Автор
      21.10.2025 02:35

      Эксель тогда


      1. isumix
        21.10.2025 02:35

        Тоже игла корпоративного софта. Либре-офис отлично работает.


        1. empenoso Автор
          21.10.2025 02:35

          Да, работает