Non sono un conoscitore delle PowerQuery, ne' mi pare lo siano gli altri frequentatori di questo forum; quindi non ti aiutero' (per incapacita') nell'apprendimento di questo strumento.
Mi limito quindi a suggerimenti basati su approccio tradizionale.
1) Se tu avessi
Office 365 allora potresti sfruttare il tipo dati "Azioni" per accedere a una serie di dati finanziari e di borsa abbastanza vario.
Ad esempio:
I dati in colonna D sono stati caricati come 4AIM, A2A, ENEL, etc; formattando i dati come "Azionari" (formato evidenziato nel circolo) sono stati espansi come li vedi.
A questo punto hai accesso a una serie di dettagli (oltre 20), sia di tipo societario che finanziario facilmente assemblabili. Non so se trovi parametri quali prox cedola, ultima cedola, scadenza, che tra l'altro sono propri di alcuni titoli, non di tutti)
2)
Oppure puoi usare la tecnica di "scraping" di siti web, usando la libreria mshtml.tlb per aprire la pagina web, cercare tramite i tag html una certa voce e importarla.
Sfortunatamente ogni sito ha bisogno di un approccio diverso, e la stabilita' di queste soluzioni dipendono dalla creativita' del gestore del sito (piu' e' alta e piu' spesso la struttura del sito viene modificata, richiedendo la revisione dil criteri di selezione).
A titolo di esempio, lavorando sul sito
http://www.borsaitaliana.it-Dato un foglio contenente in colonna A, da A2 verso il basso, il codice del titolo
-questo codice estrae dal sito le voci Descrizione, valore di Apertura, valore e ora di Ultimo scambio (altri valori possono essere estratti analogamente)
- Codice: Seleziona tutto
#If VBA7 Then '!!! ON TOP OF THE VBA MODULE !!!!
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
Sub ScanTitoli()
Dim IE As Object, myF As Object, myG As Object, I As Long
'
For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row
myUrl = "https://www.borsaitaliana.it/borsa/azioni/scheda/" & Cells(I, 1) & ".html" 'L'url della pagina da accedere
If InStr(1, myUrl, "http", vbTextCompare) = 1 Then
'Se url valido, apre tramite InternetExplorer...
If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = True '... rendi visibile IE
.navigate myUrl '....vai all'url
Sleep 100 '
Do While .Busy: DoEvents: Sleep (20): Loop 'Attesa not busy
Do While .readyState <> 4: DoEvents: Sleep (20): Loop 'Attesa document
End With
Sleep (100) 'Stabilizza
'Cerca le voci di interesse
Set myF = IE.document.getElementsByClassName("w-999")
Cells(I, "B").Value = myF(0).getElementsByTagName("a")(0).innerText 'Descrizione
Set myF = IE.document.getElementsByClassName("m-table")
Cells(I, "C").Value = CSng(myF(0).getElementsByTagName("td")(1).innerText) 'Apertura
Set myG = myF(3).getElementsByTagName("td")
Cells(I, "D").Value = CSng(myG(myG.Length - 2).innerText) 'ultimo, valore
Cells(I, "E").Value = myG(myG.Length - 3).innerText 'ultimo, orarioi
'etc
'etc
End If
Next I
'Chiusura
On Error Resume Next
IE.Quit
Set IE = Nothing
End Sub
La macro usa metodi e proprieta' resi disponibile dalla libreria mshtml.tlb (gli stessi peraltro usati da PowerQuery), per accedere alla pagina web del titolo, cercare tramite i tag e gli attributi html le voci di interesse e prelevarne il valore.
Il file dimostrativo e' scaricabile qui:
https://www.dropbox.com/s/85xypv4c29ndm ... .xlsm?dl=0(Foglio1: tipo dati Borsa; Foglio2: macro)
Per "esaminare" il codice html di una pagina web devi aprire la pagina, puntare l'elemento di interesse e poi tramite il menu di tasto dx usi il comando Esamina (Edge) o Ispeziona (Chome).
Ti segnalo anche che parecchie funzioni di calcolo di dati finanziari sono presenti in Google Spreadsheet (tramite la funzione GOOGLEFINANCE), piu' la possibilita' di estrarre da siti web molti dati tramite la funzione IMPORTXML, usando l' xPath dell'informazione desiderata.
Ad esempio
-se in A2 e' inserito l'url della pagina web di un titolo, es
https://www.borsaitaliana.it/borsa/azio ... 33417.html-allora questa formula restituira' il valore dell'ultimo scambio
=IMPORTXML(A2;"//*[@id=""fullcontainer""]/main/section/div[7]/article[1]/div/div[4]/table/tbody/tr[1]/td[8]/span/strong")
L'Xpath si puo' ottenere sempre tramite il processo di Esamina (o Ispeziona); poi, sul codice sorgente si seleziona l'informazione e tramite menu di tastodx si sceglie Copia /Copia xPath
L'xPath va poi inserito tra virgolette nelle formula, ed eventuali Virgolette presenti vanno raddoppiate.
Infatti nella formula di prima, l'xPath restituito era:
//*[@id="fullcontainer"]/main/section/div[7]/article[1]/div/div[4]/table/tbody/tr[1]/td[1]/span
Non sono riuscito ad avere lo stesso effetto tramite la funzione Excel FILTRO.XML (disponibile da Office 2013)
Quanto al mondo delle PowerQuery, segnalo con piacere il sito dell'amico "klingklang":
https://www.mondobi.it/ Ciao