1. W jaki sposób pobrać dane ze strony internetowej do Excela?
W tym artykule dowiesz się w jaki sposób pobierać dane ze stron www do Excela bez VBA oraz z wykorzystaniem VBA. Excel bez instalacji dodatków posiada możliwość importu danych ze stron sieci web. By skorzystać z tej funkcjonalności wchodzimy w Excelu w zakładkę dane i w lewym górnym rogu ekranu klikamy Pobieranie danych zewnętrznych, a następnie Z sieci Web.

Po kliknięciu tej opcji powinno wyświetlić nam się okno przeglądarki, w której wpisujemy właściwy adres strony. Nie przejmuj się wyskakującymi błędami – one będą występować w tej przeglądarce. Nie jest to przecież Google Chrome. W momencie, gdy nasza strona jest już wgrana w Excelowej przeglądarce możemy od razu kliknąć przycisk Importuj w prawym dolnym rogu ekranu, co zaimportuje zawartość strony do arkusza Excel. Po kliknięciu przycisku importuj zostaniesz zapytany też, w które miejsce w skoroszycie chcesz pobrać zawartość strony.

Dane zaimportowane w ten sposób możesz już obrabiać w Excel w dowolny sposób. Podczas importu możesz także wybrać, czy zaimportowane dane powinny zawierać formatowanie strony, czy też powinny być zwykłym tekstem. Możesz to ustawić w prawym górnym rogu w opcjach przeglądarki:

2. Importowanie zawartości strony makrem VBA Excel
Jeśli chciałbyś zautomatyzować działanie importowania treści ze stron www do Excela, najlepiej skorzystać jest z VBA w Excelu. Makro oparte na VBA przyda się także, gdy Twoja strona ma wiele podstron, a Ty chcesz zaimportować je wszystkie. By zaimportować stronę web do Excela za pomocą VBA najlepiej, gdy nagrasz jednorazowo makro importujące stronę, a następnie przerobisz kod tego makra. Kod takiego makra dla mojej strony będzie wyglądał następująco:
'tomaszkenig.pl
Sub ImportStronWeb()
'
' ImportStronWeb Makro
'
'
With ActiveSheet.QueryTables.Add(Connection:="URL;https://tomaszkenig.pl", _
Destination:=Range("$A$1"))
'.CommandType = 0 ta linia została wykluczona
.Name = "tomaszkenig.pl"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End SubJak widzisz w powyższym kodzie linia .CommandType została zakomentowana. Mogła ona powodować błędy przy imporcie danych.
3. Zapętlenie kodu VBA – wgrywanie wielu podstron

Zapewne zastanawiasz się, w jaki sposób mógłbyś zaimportować dane ze stron www, które są zamieszczone na wielu podstronach, jak np katalog, bądź lista. Jest to oczywiście możliwe i nie wymaga dużego wysiłku. Jak widzisz linki na mojej stronie głównej wyglądają następująco:
- https://tomaszkenig.pl/page/2/
- https://tomaszkenig.pl/page/3/
- https://tomaszkenig.pl/page/4/
- (…)
- https://tomaszkenig.pl/page/n/
Nic prostszego, wystarczy zapętlić makro. Pamiętaj, że wgrywane do arkusza treści stron nie powinny na siebie nachodzić. Powinieneś wgrywać dane jedne pod drugimi. Możesz w tym wypadku zrobić przy pomocy pętli odstęp pomiędzy danymi w postaci liczby wierszy. Możesz też skorzystać z kodu makra wyszukującego ostatni wypełniony wiersz, który publikowałem w tym artykule: ostatni wiersz VBA. Teraz jedyne, co powinieneś zrobić to zapętlić kod i dodać licznik odnoszący się do numeru podstrony. Dla przykładu, gdybym chciał ściągnąć 8 kolejnych stron na moim adresie (tomaszkenig.pl), modyfikuję kod w następujący sposób:
Sub ImportStronWeb()
'
' ImportStronWeb Makro
'
'
Dim intLicznik As Long
intlicznikpodstron = 1 'np 8 podstron
intLicznikWierszy = 1 'np kolejne dane w odstępie 500 wierszy
Do While intlicznikpodstron < 8
With ActiveSheet.QueryTables.Add(Connection:="URL;https://tomaszkenig.pl/page/" & intlicznikpodstron & "/", _
Destination:=Range("A" & intLicznikWierszy))
' .CommandType = 0
.Name = "tomaszkenig.pl"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
intlicznikpodstron = intlicznikpodstron + 1
intLicznikWierszy = intLicznikWierszy + 500
Loop
End Sub
Podobne przykłady praktycznego użycia języka VBA w Excelu zamieszczam na tej stronie: VBA Przykłady. Przy okazji zapraszam do przejścia kursu VBA mojego autorstwa, znajdziesz go pod tym linkiem: Kurs VBA. Poniżej plik Excel z omawianym przykładem: