|
|
||||||||||||||||||
Tutti gli articoli | Tutte le notizie |
-
07-06-07, 11:03 #2
- Data Registrazione
- Mar 2007
- Messaggi
- 286
- Mentioned
- 0 Post(s)
- Quoted
- 8 Post(s)
- Potenza rep
- 14669950
OK, ho fatto la domanda e alla fine ieri sera con un pò di prove mi sono risposto da solo...
Un sito in grado di visualizzare dati "puliti" relativi alle quotazioni di un fondo è Yahoo.
L'URL che consente di recuperare le quotazioni è questa:
http://it.old.finance.yahoo.com/d/qu...1c1ohgv&e=.csv
Dove ovviamente CODICE_YAHOO va sostituto con il codice Yahoo del fondo, ETF o azione che si interessa reperire.
Questo è il frammento di codice VBA che consente di reperire una determinata quotazione e inserirla in una cella Excel:
CurrentInvestmentID = Range("A2")
CurrentInvestmentOutput = "B2"
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://it.old.finance.yahoo.com/d/quotes.csv?s=" & CurrentInvestmentID & "&f=sl1d1t1c1ohgv&e=.csv", _
Destination:=Range(CurrentInvestmentOutp ut))
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCell
.TablesOnlyFromHTML = False
.Refresh BackgroundQuery:=False
.SaveData = True
End With
Fatto questo bisogna fare un pò di pastrugni per decodificare automaticamente la stringa (che è in formato CSV e contiene tutti i dati separati da semicolon) risultante dalla query Web e copiare l'output in colonne separate, ma il codice non è particolarmente difficile.
Se qualcuno è interessato posso postare un foglio Excel di esempio con il codice della macro commentato...
-
07-06-07, 11:13 #3
- Data Registrazione
- May 2003
- Messaggi
- 2,380
- Mentioned
- 0 Post(s)
- Quoted
- 1 Post(s)
- Potenza rep
- 42949690
Ciao TheOrbix,
mi faresti un gra favore visto che anch'io stavo pensando di "costruirmi" una funzione simile per aggiornare le quotazioni di alcuni strumenti finanziari ma al momento non avrei idea di come fare...
Grazie mille.
Ciao.
T.
-
07-06-07, 11:33 #4
- Data Registrazione
- Apr 2006
- Messaggi
- 39,908
- Mentioned
- 21 Post(s)
- Quoted
- 2143 Post(s)
- Potenza rep
- 42949687
io uso borsaitaliana.it
-
07-06-07, 11:51 #5
- Data Registrazione
- Aug 2005
- Messaggi
- 143
- Mentioned
- 0 Post(s)
- Quoted
- 0 Post(s)
- Potenza rep
- 3666619
Anche a me farebbe piacere
-
07-06-07, 12:01 #6
- Data Registrazione
- Sep 2005
- Messaggi
- 11,673
- Mentioned
- 5 Post(s)
- Quoted
- 8 Post(s)
- Potenza rep
- 42949688
Originariamente Scritto da TheOrbix
Ciao
-
07-06-07, 12:32 #7
- Data Registrazione
- Jan 2005
- Messaggi
- 4,541
- Mentioned
- 9 Post(s)
- Quoted
- 634 Post(s)
- Potenza rep
- 42949689
Originariamente Scritto da TheOrbix
http://www.gummy-stuff.org/
Simple Download
se hai i settings in italiano puoi avere un prob con il separatore dei decimali
modifica il vba con il seguente
//----------------------
//Inizio modifica
'construct the URL for the query
qurl = "http://chart.yahoo.com/table.csv?s=" & Symbol
qurl = qurl & "&a=" & Month(StartDate) - 1 & "&b=" & Day(StartDate) & _
"&c=" & Year(StartDate) & "&d=" & Month(EndDate) - 1 & "&e=" & _
Day(EndDate) & "&f=" & Year(EndDate) & "&g=" & Range("E3") & "&q=q&y=0&z=" & _
Symbol & "&x=.csv"
Range("c5") = qurl
QueryQuote:
With ActiveSheet.QueryTables.Add(Connection:= "URL;" & qurl, Destination:=DataSheet.Range("C7"))
.BackgroundQuery = True
.TablesOnlyFromHTML = False
.Refresh BackgroundQuery:=False
.SaveData = True
End With
Range("C7").CurrentRegion.TextToColumns Destination:=Range("C7"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, other:=False
Range(Range("C7"), Range("C7").End(xlDown)).NumberFormat = "mmm d/yy"
' modified to transform "text" into "value";
' issue coming from the different decimal separators
For Each c In DataSheet.Range("D8:G500")
If Val(c.Value) <> 0 Then
c.Value = Val(c.Value)
End If
Next c
Range(Range("D7"), Range("G7").End(xlDown)).NumberFormat = "0.00"
Range(Range("H7"), Range("H7").End(xlDown)).NumberFormat = "0,000"
' modified to transform "text" into "value";
'issue coming from the different decimal separators
For Each c In DataSheet.Range("I8:I500")
If Val(c.Value) <> 0 Then
c.Value = Val(c.Value)
End If
Next c
//Fine modifica
//----------------------
C
-
07-06-07, 12:35 #8
- Data Registrazione
- Jan 2005
- Messaggi
- 4,541
- Mentioned
- 9 Post(s)
- Quoted
- 634 Post(s)
- Potenza rep
- 42949689
Originariamente Scritto da cammello
solo per dire che il file modificato è troppo grande per essere allegato, pure in formato zip.
C
-
08-06-07, 13:25 #9
- Data Registrazione
- Mar 2007
- Messaggi
- 286
- Mentioned
- 0 Post(s)
- Quoted
- 8 Post(s)
- Potenza rep
- 14669950
Originariamente Scritto da pf.fin
Testato e funzionante su Excel 2003 (Win) e Excel 2004 (Mac).
Quando si apre il foglio, Excel segnalerà che il foglio contiene una macro e chiederà se si vuole abilitare l'esecuzione della macro (il solito warning di prevenzione dai virus VBA). Ovviamente bisogna rispondere di sì... :-)
Non ho ancora provato a scaricare e testare il foglio suggerito da Cammello, ma in effetti avevo visto dei vecchi post in cui parlava di quelle macro di esempio. Il principio delle query web è ovviamente lo stesso, però credo che l'output prodotto fosse decisamente diverso dal mio esempio.
In ogni caso quando avrò un pò di tempo libero vedrò di fare qualche ulteriore esperimento...
-
08-06-07, 13:46 #10
- Data Registrazione
- Feb 2006
- Messaggi
- 3,107
- Mentioned
- 11 Post(s)
- Quoted
- 918 Post(s)
- Potenza rep
- 42949688
Originariamente Scritto da cammello
E pieno di files excel da "studiare":
http://www.gummy-stuff.org/Excel/
Interessante ai fini del thread la pagina:
http://www.gummy-stuff.org/macros.htm
Ciao!
Davide - GhibliUltima modifica di ghibli_70; 08-06-07 alle 13:51