28 Aug Return Stock Data Using Excel VBA
Posted at 12:35h
in Excel VBA
0 Comments
Howdee! Querying data over the web becomes more common every day. Almost every cloud based program has the ability to serve up its data through some sort of API. Sometimes, the data can be extracted to Excel through some sort of reporting interface within the program. However, I’ve found that this functionality is usually difficult to use and/or incredibly slow or doesn’t exist at all. This is where the ability to make an Excel http get request is so valuable.
In my example today I’ll be building a small excel application that will allow the user to search for a company’s ticker and then return the most recent stock data using an http request. To do this, we will use the site http://dev.markitondemand.com/MODApis/Api/v2/doc. It is a free service that provides the ability to search for tickers and company names and then fetch stock data on that entity.
HTTP Basics
Before diving into the technical aspects of an Excel http get request, let’s first explore what http requests are. HTTP stands for “Hypertext Transfer Protocol”. In laymen’s terms, it is a means of communicating between a host and a client.
Let’s assume you type www.facebook.com into a web browser. You, the client, have just initiated an HTTP GET request to Facebook, the host (for thoroughness, it’s worth mentioning that sites like Facebook that contain sensitive information use an HTTPS request to secure the data being transferred). What you’ve sent is called the “Request” and the HTML page that Facebook sends back is the “Response”.
The request is sent using a URL (Uniform Resource Locator). While you might be familiar with URL’s, you might not be familiar with their structure. They consist of these components:
Protocol is usually HTTP but, as I said earlier, HTTPS is used when the connection needs to be secured (personal data, credit card information, etc.). The host is just that, the domain address a host has chosen for you to reach their server. The port is usually not needed to be explicitly typed. The default port is 80 and the URL implicitly sends that if you exclude it. The resource path and the query are the import parts I want to point out.
The resource path is instructions sent to the host that tell the server where to navigate to so that your information can be found. Lastly, the query section is always kicked off with a question mark. This section provides any parameters you want to include as well the option to explicitly list the precise data you want returned.
This is as dep as I’ll go into HTTP since this is enough to get started querying information. However, if you’re planning to develop an application that will make HTTP calls, I recommend reading up on the subject so you can handle several types of responses. Let’s say a user passes a bad request to the program you build; the host will send back an HTTP response but it could be an error 404 response and not include any data. You’ll need to be able to handle that and other issues that could arise. This article on the Mozilla Developer Network is a great place to start.
Excel HTTP Get Request – Creating the Search
Now that we know a little about HTTP, let’s dive into the Excel http request using VBA. To get started open a new Excel file and press alt + F11 to open the VBA editor window. The first thing we need to do is add some library references so we can access the controls we will need to make HTTP calls. Click on “Tools” and then “References” and add a check box to Microsoft Scripting Runtime, Microsoft Internet Controls, and Microsoft WinHTTP Services, version 5.1 as pictured below.
In this application, we want to allow the user the ability to search for a company’s stock ticker. We will then need to pass that data into our code. When my program needs to interact with data on a spreadsheet, I prefer to name the range or cell that it will be interacting with so that, when I’m writing code, it’s evident exactly what data I’m collecting or where I need to write data to. I’ve named a cell “Search_For_Company” and put instructions on the sheet so the user realizes that he/she needs to enter a search term there.
Now, we need to write the code that will accept this input, and then make an http get request to return potential matches. But, before that, let’s consider the returned results. I user might type in “face” when searching for Facebook. That would return dozens of companies so we need somewhere to store those values temporarily. For this, I’ve created a basic user form with a list box to display the values. It looks like this:
Typically I’ll break my code down in to sections to discuss, but I think this makes sense to look at the code in its entirety and then explain what’s happening step by step.
Sub GetCompanyInformation()
Dim hReq As Object, JSON As Dictionary
Dim i As Long
Dim var As Variant
Dim ws As Worksheet
Set ws = Sheet1
'create our URL string and pass the user entered information to it
Dim strUrl As String
strUrl = "http://dev.markitondemand.com/MODApis/Api/v2/Lookup/json?input=" & ws.[Search_For_Company]
Set hReq = CreateObject("MSXML2.XMLHTTP")
With hReq
.Open "GET", strUrl, False
.Send
End With
'wrap the response in a JSON root tag "data" to count returned objects
Dim response As String
response = "{""data"":" & hReq.ResponseText & "}"
Set JSON = JsonConverter.ParseJson(response)
'set array size to accept all returned objects
ReDim var(JSON("data").Count, 1)
i = 1
'loop through returned data and get Symbol & Name
For Each Item In JSON("data")
var(i, 0) = Item("Symbol")
var(i, 1) = Item("Name")
i = i + 1
Next
ufCompaniesReturned.lbCompaniesReturned.List = var
Erase var
Set var = Nothing
Set hReq = Nothing
Set JSON = Nothing
If ufCompaniesReturned.Visible = False Then
ufCompaniesReturned.Show
End If
End Sub
Let’s skip over the variable declarations as we’ll discuss each as they’re used. The first line simply assigns the “ws” variable to the sheet where I’m working, Sheet1 in this case. Next, I dimension a new string variable (I could have dimensions this variable above with the others but this is just personal preference when I’m creating a variable that represents a URL) and assign the URL I’m using to it. Note here that for the query section of the URL, I’m using a combination of text entered and I’m pulling the value the user typed into the range we named earlier. This is why I like to use that approach in my Excel http get request programs. I can easily see that I’m passing a value from Sheet1 that represents a company to search for.
Next set the Object variable “hReq” equal to a new object in the Microsoft XML Core Services. If you want to read more about what this entails, MSDN has a great write up on it. Suffice it to say this service allows us to send HTTP requests and parse the responses. Now, with that variable we will open a connection and pass it three parameters. We are telling it that we are sending a “GET” request, we pass the URL to use, and lastly, we want to explicitly tell it the call is not asynchronous (also could be said the call is synchronous). This prevents anything further from happening until we get a response from the host. If we left this blank, the default is true. The program could then move on while we are waiting the call and break. There are two more optional parameters in this Open method for username and password, in that order. If that information is required for your request, you’ll need to provide them. They are not required in this example however.
In the next section of code, we create a response variable and store the response from the request as a string. Since this response is returned in JSON, I’m using the VBA-JSON library to parse the JSON. If you’re unfamiliar with this, click here for my blog post on how to use the library. Note that I wrap my response in some additional text. This is a root JSON object that I wrap the data in so I can perform a count on how many objects were returned, which I do in the next step when I’m resizing the array I declared at the beginning of the code.
Lastly we will loop through each object returned by our Excell http get request, and assign the company’s symbol and name to the array. Once the array has been populated, we will pass that array to a listbox, dispose of some resources, and finally check if the form is already visible and, if it isn’t, show it.
Excel HTTP Get Request – Returning the Stock Quote
Now that we’ve successfully written code that will perform our search query, let’s move on to the http get request to return our stock quote. In the form that pops up, our user will select a company for which they want to return a stock quote. Once they click “OK” we will want the result to be returned. To do this, we need to have this process kick off when the event for the button click occurs. To create a sub routine that subscribes to that event, simply double click the “OK” on your user from inside the VBA editor window.
We can certainly embed all the code we want to run inside this event and call it a day. However, I prefer to keep my code separate. I’ve created another module called “Functions” and created a function inside to run my Excel http get request stock quote call when passed the correct parameters. That function looks like this:
Function GetStockData(company As String, companyName As String)
Dim hReq As Object, JSON As Dictionary
Dim sht As Worksheet
Set sht = Sheet1
Dim strUrl As String
strUrl = "http://dev.markitondemand.com/Api/v2/Quote/json?symbol=" & company
Set hReq = CreateObject("MSXML2.XMLHTTP")
With hReq
.Open "GET", strUrl, False
.Send
End With
Dim response As String
response = hReq.ResponseText
Set JSON = JsonConverter.ParseJson(response)
sht.[Last_Price] = JSON("LastPrice")
sht.[Change] = JSON("Change")
sht.[Change_Percent] = JSON("ChangePercent") / 100
sht.[Quote_Time] = JSON("MSDate")
sht.[Market_Cap] = JSON("MarketCap") / 1000000
sht.[Volume] = JSON("Volume")
sht.[Change_YTD] = JSON("ChangeYTD")
sht.[Change_YTD_Percent] = JSON("ChangePercentYTD") / 100
sht.[High] = JSON("High")
sht.[Low] = JSON("Low")
sht.[Open] = JSON("Open")
sht.[Search_For_Company].Value = companyName
End Function
As you can see, this code structure is very like the previous code structure so I won’t go through every detail. The first thing you might notice is that this isn’t a subroutine. I’ve made this a function and given it two parameters to receive. I first pass in the “company” parameter which will represent the stock ticker symbol. This is the parameter I pass to the strUrl variable to complete my Excel http get request string. Next, I pass in the company Name parameter which will be the formal name returned from our previous query.
The next difference you might notice is that I don’t wrap the HTTP response like I did previously. Since I know this response will only return one object, I don’t need to count or loop through the response. I can simply parse that response into a dictionary and then access them through the respective keys. Also, I’ve created several more named ranges to write these values to. Again, this is not necessary but I find it helps tremendously with the readability of my code. Lastly, I just assign the formal name I used in the call back to the cell.
To call this function, I used this code in the button click event handler:
Dim i As Long
For i = 0 To ufCompaniesReturned.lbCompaniesReturned.ListCount - 1
If lbCompaniesReturned.Selected(i) = True Then
Call GetStockData(lbCompaniesReturned.List(i, 0), lbCompaniesReturned.List(i, 1))
Else
'do nothing
End If
Next i
ufCompaniesReturned.Hide
This code is pretty straight forward. I’m first looping through each item in my list box and checking to see if that item has a selected property of true. If it does, I’m passing the two values in the list box to my GetStockData function. From there, the code is handled by the function in my Functions module. All of this together ends up with this result:
I hope this article showed you the power of being able to make http requests from within an Excel application. You can customize the user experience, pull only the data you need, and it’s very fast. As always, the file I worked with today is available for download if you’re a subscriber to my site. It’s free, easy to sign-up, and I won’t be spamming you with dozens of emails each week. If you have questions on anything I went over, please drop them in the comments section below.
Cheers,
R
Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Еще…Меньше
Функция КОДИКОД.URL возвращает строку, кодированную URL-адресом, заменяя некоторые знаки, не буквы и цифры, символом процента (%) и hexadecimal числом.
Примечания:
-
Функция КОДИКОДURL недоступна в Excel в Интернете или Excel для Mac.
-
Функция КОДИКОДURL может отображаться в коллекции Excel для Mac, но она использует Windows операционных систем, поэтому она не возвращает результаты на компьютере Mac.
Синтаксис
КОДИР.URL(Текст)
Аргумент функции КОДИКОД.L имеет следующий аргумент:
Аргумент |
Описание |
---|---|
Текст Обязательно |
Строка с кодируемым URL-адресом |
Примеры
Вот простой пример, который ссылается на Excel на сервере Microsoft SharePoint.
=КОДИКОДURL(«http://contoso.sharepoint.com/Finance/Profit и потери Statement.xlsx»)
Результат:
http%3A%2F%2Fcontoso.sharepoint.com%2FFinance%2FProfit%20and%20Loss%20Statement.xlsx
Функцию КОДИКОДURL также можно использовать в сочетании с функцией ВЕБСЛУЖБА. Например, с помощью службы API markitondemand.com получить сведения об акциях компании:
=ВЕБСЛУЖБА(«http://dev.markitondemand.com/MODApis/Api/Quote/xml?symbol=»&КОДИКОД.В(C2))
В ячейке C2 есть тикер акций.
Затем с помощью функции FILTERXML можно извлечь определенные данные об этой акции. Например, чтобы получить тикер последней цены акций в ячейке C2, можно использовать:
=FILTERXML(WEBSERVICE(«http://dev.markitondemand.com/MODApis/Api/Quote/xml?symbol=»&ENCODEURL(C2)),»//QuoteApiModel/Data/LastPrice»)
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
См. также
Функция ФИЛЬТР.XML
ВЕБСЛУЖБА
Нужна дополнительная помощь?
- Веб-запрос
- Гиперссылки
- Интернет
Функция GetQueryRange предназначена для автоматизации загрузки данных с веб-страниц.
Например, нам надо из макроса Excel получить данные с нескольких однотипных страниц сайта.
Самый простой способ достичь этого — выполнять почти идентичные веб-запросы (где незначительно отличаться будет только URL страницы),
каждый раз анализируя данные, загруженные веб-запросом на лист Excel
Поскольку количество обращений ко мне, с просьбами сделать программу загрузки данных из интернета, с каждым днём растёт, я решил сделать для этих целей универсальную функцию:
Sub ПримерИспользования() Dim ra As Range: On Error Resume Next Set ra = GetQueryRange("http://ExcelVBA.ru/", 6) Debug.Print ra.Address ' переменная ra содержит ссылку на диапазон ячеек $A$1:$C$15, ' содержащий данные 6-й таблицы главной страницы сайта ExcelVBA.ru Set ra = GetQueryRange("http://excelvba.ru/sitemap.xml") Debug.Print ra.Address ' теперь переменная ra содержит ссылку на диапазон ячеек $A$1:$D$502, ' содержащий данные карты сайта ExcelVBA.ru End Sub
При запуске функции, создаётся скрытый лист с именем «tmpWQ» (если такой лист уже есть — используется существующий), и на этом листе выполняется веб-запрос к указанному сайту.
- 70595 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
РАБОТА С ИНТЕРНЕТОМ ЧЕРЕЗ EXCEL VBA
23.06.2018 admin
0 Comment
VBA, Visual Basic
Сегодня расскажу Вам как работать с интернетом через VBA Excel.
Давайте перейдем в редактор кода Excel, для этого нажмите сочетание горячих клавиш Alt + F11 или через вкладку «просмотр кода». В открывшемся окне редактора через вкладку insert -> procedure добавим простую процедуру “Test” и нажмем ок.
Теперь нужно подключить специальный внешний компонент т.к. excel по умолчанию не умеет работать с удаленными серверами. Сам компонент представляет из себя файл библиотеку с расширением .dll (dynamic link library).
Чтобы добавить библиотеку нажмите на вкладку Tools -> References
В открывшемся окне найдите библиотеку с названием (Microsoft XML, v6.0). При установке windows данная библиотека устанавливается на Ваш компьютер автоматически. Проставьте галочку и нажмите ок.
Теперь внутри любой процедуры нам будет доступен класс XMLHTTP60. Внутри нашей процедуры напишем следующее выражение.
Public Sub Test()
Dim xhr As New XMLHTTP60
End Sub
Вообще данный класс XMLHTTP60 в большинстве случаев известен как XmlHttpRequest, используется сегодня в разработке современных веб приложений, которые модно называют web 2.0 или Ajax. Однако сам класс довольно древний, впервые был разработан как не странно компанией Microsoft и работал уже в Internet Explorer 5. В те времена основным форматом обмена дынными был XML, поэтому в название класса присутствует xml хотя ничего общего c xml на сегодняшний день не имеет.
Давайте просто получим разметку странички google. Пока не очень полезно, но для примера сойдет.
В коде напишем следующий текст.
Public Sub Test()
Dim xhr As New XMLHTTP60
xhr.Open «GET», «https://google.com», False
xhr.send
Debug.Print xhr.responseText
End Sub
Если пример вернут ошибку 70, то вставьте другой адрес. Ошибка может быть связанна с механизмом безопасности google, потому просто проигнорируйте её и добавьте любой другой адрес, любимого сайта.
Запустим нажав на иконку run или клавишу F5
Как мы видим в окне immediate мы получили сырую разметку гугла.
Давайте откроем браузер. В области открытой страницы браузера нажмите правую кнопку мышки и выберете «Посмотреть код страницы»
В открывшейся вкладке мы увидим то, что получили через нашу среду разработки в Excel. Можете сравнить разметку, чтобы убедится в этом, но я не рекомендую терять время.
Теперь давайте пробежимся по строчкам нашего кода.
Сначала мы объявляем переменную xhr и стразу инициализируем её через ключевое слово new. Если не совсем понятно, как работает данная строчка, то посмотрите уроки по объектам в Excel ссылка в описание.
Далее мы обязательно должны указать основные параметры через метод Open
Первый параметр — это глагол запросов протокола http. Официально их не много около 8 штук, могут быть и пользовательские. Но сейчас достаточно запомнить два часто употребляемых глагола GET и POST (более подробно сюда)
Второй параметр – это адрес веб ресурса, тут всё ясно.
Третий параметр – это указатель на… хотя просто запомните, что сюда ставится false))
Потом мы просто вызываем удаленный сервер методом send
Наша программа на некоторое время зависает т.к. ожидает ответа от сервера, возможно вы не почувствуете этого. Но если Ваш интернет слабый Вы можете долго ожидать ответа до тех пор, пока не вылети таймаут.
Свойство responseText содержит все данные которые вернул сервер, обычно это текстовый формат.
Необходимо добавить, что если всё хорошо и удаленный сервер работает верно, то сервер вместе с текстом или телом ответа, возвращает код ответа.
Если всё хорошо, то код ответа начинается с цифры 200 (201, 202, 203, 204, 205, 206) (код ответов можно посмотреть тут (http://lib.ru/WEBMASTER/rfc2068/))
Однако бывает такое, что удаленный ресурс отработал неверно. Скорее всего сервер в таком случае вернет ошибку с кодом ответа начинающуюся с цифры 400, например, знаменитую ошибку 404 (страница не найдена) или 500 (ошибка сервера).
Чтобы проверить, что сервер отработал верно и вернул нам то, что надо проверим код ошибки.
Изменим на следующий блок кода.
Public Sub Test()
Dim xhr As New XMLHTTP60
xhr.Open «GET», «https://google.com», False
xhr.send
If xhr.Status = 200 Then ‘If xhr.Status >= 200 And xhr.Status < 300 Then
Debug.Print xhr.responseText
Else
Debug.Print xhr.responseText
End If
End Sub
В комментариях я указал более надежный способ проверки положительного ответа от сервера всё что выше 200, но ниже 300 считается ок.
Очистите окно Immediate
Нажмите F5 или иконку старт.
Мы видим, что всё тоже самое ответ пришел верный.
Чтобы проверить блок else давайте в адрес добавим что-то неправильное, например, восклицательные знаки https://google.com/!!
Нажмите F5 или иконку старт.
В окне Immediate уже пришла страничка с ошибкой.
Таким образом можно обращается к серверу через VBA Excel
Я рекомендую нажать клавишу F8 чтобы по шагам прогрессировать программу и посмотреть каждый шаг.
Содержание
- 1 Как создать таблицу, связанную с интернетом?
- 2 Обновление данных
- 3 Заключение
- 4 А как автоматизировать процесс передачи данных из интернета в excel?
- 5 Excel. Получение информации с веб-страницы
Хотите использовать регулярно обновляющиеся данные из интернета? Мы покажем Вам, как легко и быстро настроить импорт данных из интернета в Excel 2010, чтобы Ваша таблица была постоянно в актуальном состоянии.
Как создать таблицу, связанную с интернетом?
Чтобы импортировать данные в таблицу Excel, выберите команду From Web (Из интернета) в разделе Get External Data (Получение внешних данных) на вкладке Data (Данные).
В открывшемся диалоговом окне введите адрес веб-сайта, из которого требуется импортировать данные и нажмите Go (Пуск). Страница будет загружена в это же окно для предпросмотра, её можно пролистать и найти нужную информацию
Перед каждой из web-таблиц имеется маленькая стрелочка, которая указывает, что эта таблица может быть импортирована в Excel. Кликните по ней, чтобы выбрать данные для загрузки, а затем нажмите Import (Импорт).
Появится сообщение Downloading (Загрузка) – это означает, что Excel импортирует данные с указанной web-страницы.
Выберите ячейку, в которой будут размещены данные из интернета, и нажмите ОК.
В выбранной ячейке появится системное сообщение о том, что Excel импортирует данные.
Через некоторое время информация с выбранной web-страницы появится в таблице Excel. Возможно, в таблицу попадут некоторые лишние данные – их можно спокойно удалить.
Импортированные данные Вы можете использовать точно так же, как и любую другую информацию в Excel. Их можно использовать для построения графиков, спарклайнов, формул. Спарклайны – это новый инструмент для работы с данными, появившийся в Excel 2010. Более подробно о спарклайнах Вы можете узнать из урока Как использовать спарклайны в Excel 2010. Использование динамических данных в Excel даёт одно замечательное преимущество – они будут автоматически обновляться при изменении информации на web-странице.
Обновление данных
Если Вы хотите быть уверенными, что информация в таблице обновлена и максимально актуальна, нажмите команду Refresh All (Обновить все) на вкладке Data (Данные). Это действие отправит запрос web-странице и, если есть более свежая версия данных, запустит процесс обновления в таблице.
Если же нужно, чтобы информация в таблице автоматически обновлялась с какой-то заданной периодичностью, выберите ячейку таблицы, содержащую динамические данные, и нажмите команду Properties (Свойства) в разделе Connections (Подключения) на вкладке Data (Данные).
В открывшемся диалоговом окне поставьте галочку Refresh every (Обновлять каждые) и укажите частоту обновления в минутах. По умолчанию Excel автоматически обновляет данные каждые 60 минут, но Вы можете установить любой необходимый период. Или, например, указать Excel обновлять информацию каждый раз при открытии файла.
Если Вы используете статические данные из интернета в Excel, например, удельные веса минералов или площади территорий государств, тогда обновление в фоновом режиме можно отключить, чтобы Excel не соединялся с интернетом без необходимости.
Заключение
Интернет предоставляет бездонную сокровищницу информации, которую можно применять с пользой для Вашего дела. С помощью инструментов, позволяющих импортировать информацию в Excel, Вы легко можете использовать онлайн-данные в своей работе. Спортивные таблицы результатов, температуры плавления металлов или обменные курсы валют со всех точках земного шара – теперь нет необходимости вводить их вручную и постоянно проверять актуальность информации на различных интернет-ресурсах.
Урок подготовлен для Вас командой сайта office-guru.ru
Источник: /> Перевел: Антон Андронов
Правила перепечаткиЕще больше уроков по Microsoft Excel
Оцените качество статьи. Нам важно ваше мнение:
Доброго времени суток, с вами снова Я Артём Ткаченко. Поделюсь полезным советом для тех кто часто работает в пакете excel. При составлении таблиц с расчетами или просто статистическими данными, часто приходится брать данные из сети интернет, например: курсы валют, стоимость товаров, новости, астрономические данные и многое другое. Причем эти данные из интернета в excel приходится вносить в ручную, что, СОГЛАСИТЕСЬ, крайне неудобно и долго, да и утомляет. Возникает логичный вопрос:
Все до безобразия просто, мелкософт, иногда радует своим дружелюбием к пользователям не программистам.
Собственно, приступим к делу:
1. Этот пункт могут не читать те люди, кто уже знает, как создаются файлы excel, как, собственно, и другие продукты Майкрософт офис. Жмем правую кнопку мыши (ПКМ) ? Создать ? Лист Microsoft excel
2. Открываем полученный файл, выбираем вкладку «Данные» ? из Интернета в excel
3. Всплывет окно под названием «Создание веб-запроса». Допустим Вам необходимо отслеживать курс Валют, для импорта данных из интернета в exel я выбрал yandex.ru, этот адрес и вводим в адресную строку, и жмем «Импорт», ждем добавления данных из веб-ресурса
4. После добавления данных получится приблизительно следующая картина.
Крайне неприглядно, а посему этот лист будем использовать, как источник данных интернета в excel. Теперь же создадим лист уже для выведением чистовых данных
5. Теперь смотрите, что получилось
6. Так как данные полученные из интернета в excel передаются не в числовом формате, для того, чтобы их обработать примените следующее программное средство excel (ПСТР()), т.е. для нашего случая, с Яндекс, получится следующая конструкция в ячейке =ПСТР(B1;1;4), В1 данные из ячейки выделенных данных, 1 число с которого начинается исключение всего ненужного сначала строкового набора, а 4 — число чисел от начала исключения(т.е. число знаков которое вошло в промежуток от 1 до 4), т.е. если вы имели скажем текстовую строку 36,4536,4461, то после применения ПСТР(B1;1;4) останется 36,4, при ПСТР(B1;2;6) получите 6,4536 и так далее. После этих манипуляций числа становятся пригодными к вычислению
Вот и все. Майкрософт предоставил гибкую систему импорта данных из интернета в excel. Так что пользуйтесь, надеюсь будет полезным.
В Excel есть множество встроенных инструментов для импорта данных из самых разных внешних источников. Есть среди них, разумеется, и инструмент для выгрузки информации из Интернета.Все инструменты для импорта данных расположены на ленте на вкладке «Данные».
В новых версиях Excel по умолчанию встроена надстройка Power Query, которая и занимается импортом всех данных из внешних источников (пример показывали тут). В более ранних версиях использовался специальный мастер импорта (пример был тут). Если Вы привыкли именно к нему, то включить его в новой версии Excel можно пройдя по пути «Файл»-«Параметры»-«Данные» и поставив галочку на пункте «Из интернета (прежних версий)»
Как Вы уже догадались, для импорта данных из мировой паутины нужно найти команду «Из интернета», после чего перед вами откроется окно старого мастера импорта или новое окно Power Query. Разберем оба способа.
Старый мастер импорта данных из интернета
Если у Вас Excel 2013 или более старый, то этот мастер откроется по умолчанию при выборе команды «Из интернета» на вкладке «Данные». Если у Вас Excel 2016, то после того, как Вы включили старый мастер в настройках, как показано выше, он будет доступен по следующему пути: «Данные»-«Получить данные»-«Устаревшие мастеры»-«Из интернета (прежних версий)».
После запуска откроется окно «Создание веб-запроса». Оно похоже на стандартное окно браузера. В адресную строку вверху нужно ввести URL страницы, с которой необходимо выгрузить данные. После того, как страница будет загружена, все данные, которые Excel может импортировать, будут помечены небольшой желтой стрелкой. Кликните по ней и нажмите кнопку «Импорт» в правом нижнем углу. Если на странице нет желтых стрелок или они расположены не там, где нужно, то данным способом выгрузить данные в Excel не получится.
До нажатия кнопки импорт, можете задать некоторые настройки, кликнув на кнопке «Параметры» в правом верхнем углу. Наиболее полезной здесь является настройка «Отключить распознавание дат». Она позволяет избежать частой ошибки, вызванной особенностями региональных настроек системы, когда число в формате «2.15» выгружается в Excel как «фев.15».
После нажатия кнопки «Импорт» программа спросит у Вас, куда именно нужно выгрузить данные. После указания листа и диапазона, таблица из интернета будет выгружена в файл Excel. При этом, будет создан именованный диапазон, содержащий выгруженные ячейки.
После выгрузки с данными можно работать так же, как и с обычной информацией на листе (применять формулы, изменять, удалять, строить графики, сводные таблицы и т.д.). Если поставить курсор в любую ячейку выгруженной таблицы и кликнуть правой кнопкой мыши, то в контекстном меню будет доступна команда «Обновить», по нажатию которой произойдет обновление источника данных (повторная выгрузка информации из интернета на лист). Там же (в контекстном меню) есть команда «Свойства диапазона данных…». Вызвав ее можно задать, например, настройки обновления или изменить имя диапазона.
На данный момент, этот способ импорта данных несколько устарел. Всё тяжелее найти сайты и страницы с «желтыми стрелочками». Поэтому рекомендуем обновить Excel и прибегнуть к использованию второго способа импорта данных.
2. Импорт данных с помощью Power Query
После нажатия кнопки «Из интернета» в Excel 2016 Вы увидите не окно «Создание веб-запроса», а маленькое окошко, в котором нужно будет указать адрес страницы.
После нажатия кнопки «ОК» нужно подождать, пока Power Query подключится к источнику. Когда это произойдет, Вы увидите окно «Навигатор». В левой части будет представлен список всех таблиц, которые программа смогла распознать на странице сайта. После клика на любой из них в правой части окна появится предпросмотр данных (будут отображены те, которые Power Query выгрузит на лист при выборе данной таблицы). Если в правой части переключить вкладку вверху с «Представление таблицы» на «Веб-представление», то можно увидеть, как выглядит выбранная Вами таблица на странице сайта (и понять, это ли вы хотите выгрузить).
Если результат предпросмотра Вас устраивает, жмите кнопку «Загрузить». Если нет, то можно нажать кнопку «Правка». Тогда Вы попадете в окно редактора Power Query. Здесь можно настроить обработку данных после получения их из Интернета и перед выгрузкой на лист. Например, удалить лишние столбцы, изменить заголовки или поменять регистр текста.
После того, как данные примут нужный вид, нажмите кнопку «Закрыть и загрузить» на вкладке «Главная» в редакторе запросов.Данные будут выгружены на новый лист. Обратите внимание, что импортированная таблица будет автоматически преобразована в «умную таблицу», а в списке запросов («Данные» — «Запросы и подключения») появится новый запрос.
Обновить его можно кликнув правой кнопкой мыши и выбрав команду «Обновить», либо нажав на иконку в правом верхнем углу рядом с названием запроса. Там же (в контекстном меню по правой кнопке мыши) есть команда «Свойства», с помощью которой можно, например, настроить автообновление запроса.
В отличие от старого мастера импорта, Power Query имеет ряд преимуществ:
1) Может работать с гораздо большим числом сайтов и страниц;
2) Может осуществлять промежуточную обработку данных перед тем, как они будут выгружены на лист;
3) Выгружает данные из Интернета гораздо быстрее;
4) Автоматически создает «Умную таблицу».
Учитывая всё вышесказанное, настоятельно рекомендуем Вам пользоваться новыми версиями Excel в целом и Power Query в частности (в Excel 2016 он встроен по умолчанию, в Excel 2010 и 2013 может быть установлен как бесплатная надстройка).
Поддержать наш проект и его дальнейшее развитие можно вот здесь.
Ваши вопросы по статье можете задавать через нашего бота обратной связи в Telegram: @ExEvFeedbackBot
С уважением, команда tDots.ru
Excel. Получение информации с веб-страницы
Если требуется регулярно обращаться к обновляемым данным с веб-страницы, создайте веб-запрос. На рис. 1 представлен сайт показывающий курс доллара.
Рис. 1. Использование диалогового окна Создание веб-запроса для указания данных, которые следует импортировать; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке
Скачать заметку в формате Word или pdf, примеры в формате Excel
Термин «веб-запрос» немного неточен, так как с его помощью можно получать данные не только из Сети. Можно также выполнять веб-запрос к HTML-файлу, расположенному на локальном компьютере, или к файлу, хранящемуся на сетевом сервере либо на веб-сервере в Интернете. Чтобы получить информацию с веб-сервера, необходимо подключиться к Интернету. Когда данные получены, соединение с Интернетом для работы с ними больше не нужно (конечно, если вы не собираетесь обновлять эти данные).
Создать веб-запрос, обеспечивающий получение информации, которую позже можно будет обновить одним щелчком мыши, можно следующим образом.
- Выполните команду Данные –> Получение внешних данных –> Из Интернета, чтобы открыть диалоговое окно Создание веб-запроса.
- В поле Адрес введите URL сайта и нажмите Пуск. В нашем примере (рис. 1) изображена веб-страница, расположенная по адресу Обратите внимание: в диалоговом окне Создание веб-запроса открывается браузер (Internet Explorer). В нем вы можете щелкать на ссылках и переходить по сайту, пока не найдете интересующие вас данные. Когда веб-страница отображается в окне Создание веб-запроса, вы видите один или несколько желтых квадратов со стрелками, соответствующих таблицам, находящимся на странице. Еще один такой же квадрат будет соответствовать странице целиком.
- Если щелкнуть на желтом квадрате со стрелкой, он превращается в зеленый флажок, указывающий, что данные этой таблицы будут импортированы. К сожалению, таблицу с курсами валют нельзя выделить, поэтому единственный выход — импортировать страницу целиком.
- Нажмите Параметры, чтобы выбрать формат импорта данных и иные настройки.
- Нажмите кнопку Импорт, чтобы отобразить диалоговое окно Импорт данных. Укажите местоположение для импортированной информации. Это может быть, как ячейка на актуальном листе, так и новый лист. Нажмите Свойства, если хотите изменить настройки импорта по умолчанию.
- Нажмите Ok, и Excel импортирует данные.
Результат импорта (рис. 2) не совсем то, чего мы хотели. Нас интересовала только таблица валют, а веб-запрос вернул страницу целиком. По умолчанию импортированные данные являются веб-запросом. Чтобы обновить информацию, щелкните правой кнопкой мыши на любой ячейке в импортированном диапазоне и в контекстном меню выполните команду Обновить.
Рис. 2. Информация, полученная с помощью веб-запроса
Если вы не собираетесь создавать обновляемый запрос, укажите это в шаге 5 приведенного выше порядка действий. В диалоговом окне Импорт данных нажмите кнопку Свойства и снимите флажок Сохранить определение запроса.
Встроенная в Excel возможность работы с веб-запросами позволяет находить в HTML-документе таблицы (обозначаемые HTML-тегом