Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Importare (una) tabella da web

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: Importare (una) tabella da web

Postdi Anthony47 » 08/03/17 12:57

Non ho capito se hai risolto tutto o se...

Per le istruzioni su come allegare una immagine:
viewtopic.php?f=26&t=103893&p=605488#p605488

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17442
Iscritto il: 21/03/06 16:03
Località: Ivrea

Sponsor
 

Re: Importare (una) tabella da web

Postdi Gianca532011 » 08/03/17 21:33

Ho risolto "ni" ovvero ho qualche dubbio sulla macro di ricerca ultima dell'ultima riga / colonna in un intervallo composto da più colonne, questa utilizzata - copiata di sana pianta - non l'ho capita, magari se hai qualcosa di alternativo oppure me la confermi come efficienza ...

Codice: Seleziona tutto
With Cells.SpecialCells(xlCellTypeConstants).Areas
  riga = .Item(.Count)(.Item(.Count).Count).Row
   colonna = .Item(.Count)(.Item(.Count).Count).Column
   valore = Cells(riga, colonna).Text
End With


Poi mi succede un fatto strano, rimuovendo la riga di cancellazione mi aspettavo che i dati, attivando la macro "DoAll" andassero a sommarsi a partire dall'ultima colonna piena , ma ciò non avviene , sembra che si sovrappongono senza quindi aggiungere nuove colonne . Lo scopo sarebbe di realizzare uno "storico" dati nel tempo .

Codice: Seleziona tutto
Sub doAll()
Dim i As Long
Application.ScreenUpdating = False
'Sheets("Riepilogo").Range("B1").Resize(200, 250).ClearContents   '*** AZZERA Riepilogo
With Sheets("Lista")
    For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
        TestDownloadFromYahoo1 (.Cells(i, 1))
        nextc = Sheets("Riepilogo").Cells(1, Columns.Count).End(xlToLeft).Column + 1
        Range(Range("B1"), Range("B200").End(xlUp)).Copy Sheets("Riepilogo").Cells(1, nextc)
    Next i
   .Select
End With
Application.ScreenUpdating = True
MsgBox ("Aggiornamento completato...")
End Sub
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 252
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 09/03/17 10:04

Per la seconda domanda :
rimuovendo la riga di cancellazione mi aspettavo che i dati, attivando la macro "DoAll" andassero a sommarsi a partire dall'ultima colonna piena

ho scoperto una mia " ingenuita" - leggi ca..ta - ovvero avevo inserito in tre celle 1,120 una verifica degli scostamenti effettuati
Codice: Seleziona tutto
 Cells(1, 120).Value = riga  ' ultima cella andata "sotto" rispetto alle altre
 'Cells(1, 121).Value = colonna ' colonna interessata
 Cells(1, 122).Value = differenza ' delta righe "sotto"
 

ovvio, quindi, che la macro mi scrivesse dopo queste celle occupate. :oops: una volta messi gli apici , tutto OK
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 252
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 09/03/17 16:42

Ma quanti problemi !!!!!! Esiste modo di allineare i dati importati (colonne) a una cella capostipite di colonna ?

In pratica mi succede che importando dal sito a volte abbia le colonne una alta e una più bassa e questo problema dovrei averlo aggiustato con l 'ultima macro di cui al post precedente , ora però ho anche scoperto che talvolta tutte le righe sono si allineate ma piu basse di 3-4 righe rispetto alla colonna 1 con specifiche.

Allego immagine . http://www.filedropper.com/mordina2

Ho anche improvvisato una macro che mi da' alcune coordinate ma non riesco a concluderla, ovvero a spostare tutta l'area più sopra di n righe.

questa la macro fin qui improvvisata:
Codice: Seleziona tutto
Sub M_ordina2()
Dim sh As Worksheet
Dim riga As Long

Dim colonna As Long
Dim differenza As Long

   Set sh = ThisWorkbook.Sheets("Riepilogo")
   Sheets("Riepilogo").Activate
   lastCol = ActiveSheet.Range("b21").End(xlToRight).Column
   lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
    ActiveSheet.Range("b2", ActiveSheet.Cells(lastRow, lastCol)).Select
  colonna = lastCol
  riga = lastRow

differenza = (riga - 72)  ' 71 + 1 riga vuota in cui 71 è il valore standard delle righe ( se il sito non cambia impaginazione.
Cells(2, 12).Value = riga  ' ultima cella andata "sotto" rispetto alle altre
Cells(2, 13).Value = colonna ' colonna interessata
Cells(2, 14).Value = differenza ' delta righe "sotto"

'Range(Cells(differenza, colonna), Cells(riga, colonna)).Select

'Range(Cells(riga - 71), colonna), Cells(riga, colonna)).Select
   'Selection.Cut
   'Cells(3, colonna).Select
    'ActiveSheet.Paste
   
MsgBox ("colonna pareggiata")
Set sh = Nothing
End Sub
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 252
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Anthony47 » 10/03/17 01:44

Premesso che ti ho perso un paio di messaggi fa, quindi potrei non aver capito l'esigenza attuale.
Se hai scoperto che non e' vero che le risposte hanno formati (numero di righe) diverse allora
-crea in colonna A un elenco di campi che includa tutte le possibili situazioni
-Poi modifica la Sub doAll sostituendo la riga
Range(Range("B1"), Range("B200").End(xlUp)).Copy Sheets("Riepilogo").Cells(1, nextc)
con
Codice: Seleziona tutto
        Sheets("Riepilogo").Cells(1, nextc).Value = ActiveSheet.Name


In questo modo la macro non copiera' piu' su Riepilogo i valori importati dalle query, ma solo il nome foglio in riga2

Sara' cosi' possibile portare i dati su Riepilogo tramire Cerca.Vert, usando in B3 la formula
Codice: Seleziona tutto
=SE(B$1<>"";CERCA.VERT($A3;INDIRETTO("'"&B$1&"'!A:B");2;0);"")
La formula va quindi copiata versoil basso per tutte le righe che hano un nome campo, poi tutta la clonna di formule va copiata verso destra per un numero di posizioni pari alle colonne che si pensa saranno compilate.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17442
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare (una) tabella da web

Postdi Gianca532011 » 10/03/17 12:39

Perfetto, ho quindi imparato che ove il VBA non ce la fà o diventa troppo macchinoso , si può usare in abbinamento anche le formule Excel. Ho scritto si "può" ma forse era meglio si " deve" ?

L'ultimo consiglio- spero - in "riepilogo" importo le colonne titoli, basta premere il pulsante "aggiorna " e la serie si ripete tanto che l'elenco potrà fungere da "Storico" , ora però il problema : se volessi affiancare le colonne con gli stessi header , tanto da vere una sequenza temporale, come devo fare ? Che strategia consigli ?

Grazie e ciao






Ps. poi un giorno, se ne hai voglia, mi dirai come hai fatto ad avere acquisito tutta questa conoscenza; non c'è problema che tu non riesca a risolvere !!!! Se hai un metodo nascosto ....io, e altri 100000000000 siamo qui :)
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 252
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 10/03/17 21:17

Giusto per mia soddisfazione sono riuscito a concludere la macro con la quale riallineare una tabella dati a una cella = costante , tenendo conto di quanto la tabella sia shiftata in basso . Mi è sembrato di tornare agli esercizi di matematica sui punti di una retta su un piano cartesiano etc.etc Bei ricordi :cry: ( senilità precox ?? ) boh!!
Comunque ecco alla vs critica.

Codice: Seleziona tutto
Sub M_ordina2()
Dim sh As Worksheet
Dim riga As Long
Dim origineR As Long
Dim colonna As Long
Dim differenza As Long

   Set sh = ThisWorkbook.Sheets("Riepilogo")
   Sheets("Riepilogo").Activate
   lastCol = ActiveSheet.Range("b2").End(xlToRight).Column
   lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
    ActiveSheet.Range("b2", ActiveSheet.Cells(lastRow, lastCol)).Select
  colonna = lastCol
  riga = lastRow

differenza = (riga - 71) ' 71 è il valore standard delle righe ( se il sito non cambia impaginazione.)
origineR = 3 + differenza ' k = 3 riga di partenza con 2 di colonna

 
'Cells(2, 12).Value = riga  ' ultima cella andata "sotto" rispetto al riferimento (71)
'Cells(2, 13).Value = colonna ' colonna interessata
'Cells(2, 14).Value = differenza ' delta righe "sotto"
'Cells(2, 15).Value = origineR   ' serve per definire il "punto" di partenza ove fare la copia dei dati shiftati piu in basso


Range(Cells(origineR, 2), Cells(riga, colonna)).Select
 Application.CutCopyMode = False
   Selection.Cut
  Range("B3").Select
   ActiveSheet.Paste
MsgBox ("colonne allineate")

Set sh = Nothing
Range("a1").Select
End Sub
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 252
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 12/03/17 17:24

Ciao, sono ancora qui 8)
L'ultimo consiglio- spero - in "riepilogo" importo le colonne titoli, basta premere il pulsante "aggiorna " e la serie si ripete tanto che l'elenco potrà fungere da "Storico" , ora però il problema -modificato : se volessi trasferire le colonne con gli stessi header, E affiancare quelli identici es : Cisco, Cisco, cisco , Ima, ima, etc tanto da vere una sequenza temporale, come devo fare ?

Ho trovato una macro che, opportunamente modificata mi dà le coordinate delle celle di riga A1 : Z1 dove risiedono le denominazioni dei titoli che si ripetono :
A1 -12/03/2017 B1Cisco -C1 Ima -D1 DataLogic -E1 Prysmian - F1 coca Cola - G1Cisco Ima DataLogic Prysmian Cisco Ima DataLogic Prysmian coca Cola

all'interno delleo stesso ciclo vorrei dirgli di copiare Tutta la colonna nella prima colonna libera del foglio "Storico" , poi prosegue con la ricerca , trova la seconda identità , la copia e cosi via . per ora in manuale ma poi turtto ciò vorrei realizzarlo in automatico.

Comunque il primo problema sul quale mi sono fermato è l'errore 424 su questa istruzione
- rifCella.EntireColumn.Copy

qui il codice :

Codice: Seleziona tutto
Sub CercaParola()
'dichiarazione variabili
Dim CL As Object
Dim Zona

Dim Dimmi As String
Dim rifCella As Variant
Dim Stringa, Parola, Dove
Dim Sh As Worksheet
    Set Sh1 = ThisWorkbook.Sheets("Riepilogo")
    Set Sh2 = ThisWorkbook.Sheets("Storico")

'impostiamo con "Zona" l'UsedRange del foglio1 (tutte le celle con dati)

Set Zona = Worksheets("Riepilogo").Range("B1:Z1")
Set Zona = Sh1.UsedRange
'con "Dimmi" tramite l'inputbox, memorizziamo la parola da cercare
Dimmi = InputBox("Cosa  Cerchi?", "Inserisci la parola da cercare")
If Dimmi = "" Then Exit Sub  'se non scriviamo niente o premiamo Annulla, si esce dalla routine
'iniziamo il ciclo per "spazzolare" tutta l'area identificata con "zona"
For Each CL In Zona
' "Stringa" è la stringa DOVE cercare è sarà il testo contenuto nella cella (CL) ora spazzolata
Stringa = CL.Value
'con Parola abbiamo la parola da cercare nella stringa, reperita con Dimmi (InputBox)
Parola = Dimmi
'con Dove otteniamo la posizione di Parola all'interno di Stringa tramite InStr
Dove = InStr(Stringa, Parola)
'se Dove esiste, allora
If Dove Then
rifCella = CL.Address(rowabsolute:=True, columnabsolute:=True)
MsgBox ("trovato  ") & rifCella                      ' fino a qui tutto OK

Sheets("Riepilogo").Activate               'Mia aggiunta
Dim UC, UR
UC = Cells(2, Cells.Columns.Count).End(xlToLeft).Column + 1 'prima colonna disponibile
UR = Range("B" & Rows.Count).End(xlUp).Row + 1 ' prima riga disponibile

If rifCella <> "" Then
rifCella.EntireColumn.Copy   <<<<< maledetta! e qui che si inchioda
 Sheets("Storico").Activate
    Cells(2, UC).Select
        ActiveSheet.Paste
        End If

Dim dammi As Integer
dammi = MsgBox("Proseguire la ricerca ?", vbYesNo)
'se la risposta sarà no
If dammi = vbNo Then
'si seleziona la cella
CL.Select
Exit Sub 'e si esce dalla routine
End If
'nel caso si sia risposto Si, di voler continuare, si prosegue al Next che continua il ciclo fino alla 'fine di "Zona"
'impostiamo anche un controllo che ci avvisi quando avremo "spazzolato" l'ultima cella di "zona" 'che la ricerca è terminata.
If CL = Zona.SpecialCells(xlCellTypeLastCell) Then GoTo 10
End If

Next
10:
MsgBox "Ricerca Terminata"
End Sub
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 252
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 13/03/17 08:16

Questa macro è la precedente con modifiche, riporta correttamente la colonna "cisco" sullo storico, però non affianca lateralmente :evil: le colonne con identico header. Dove sbaglio ?

Codice: Seleziona tutto
Sub CercaParola()
Dim CL As Object
Dim Zona
Dim Dimmi As String
Dim rifCella
Dim Stringa, Parola, Dove
Dim Sh As Worksheet
    Set Sh1 = ThisWorkbook.Sheets("Riepilogo")
    Set Sh2 = ThisWorkbook.Sheets("Storico")

'impostiamo con "Zona" l'UsedRange del foglio1 (tutte le celle con dati)
Set Zona = Worksheets("Riepilogo").Range("B1:Z1")
Set Zona = Sh1.UsedRange
'con "Dimmi" tramite l'inputbox, memorizziamo la parola da cercare
Dimmi = InputBox("Cosa  Cerchi?", "Inserisci la parola da cercare")
If Dimmi = "" Then Exit Sub  'se non scriviamo niente o premiamo Annulla, si esce dalla routine
'iniziamo il ciclo per "spazzolare" tutta l'area identificata con "zona"
For Each CL In Zona
' "Stringa" è la stringa DOVE cercare è sarà il testo contenuto nella cella (CL) ora spazzolata
Stringa = CL.Value
'con Parola abbiamo la parola da cercare nella stringa, reperita con Dimmi (InputBox)
Parola = Dimmi
'con Dove otteniamo la posizione di Parola all'interno di Stringa tramite InStr
Dove = InStr(Stringa, Parola)
'se Dove esiste, allora
If Dove Then
rifCella = CL.Address(rowabsolute:=False, columnabsolute:=False)
MsgBox ("trovato  ") & rifCella

Sheets("Riepilogo").Activate
Range(CL, CL.End(xlDown)).Select

If rifCella <> "" Then
Columns(CL.Column).EntireColumn.Copy Destination:=Sheets("Storico").Range("B1")
Sheets("Storico").Activate
Dim UC As Long, UR As Long
UC = Range("B1" & Columns.Count).End(xlToLeft).Column + 1 'prima colonna disponibile
UR = Range("B" & Rows.Count).End(xlUp).Row  ' prima riga disponibile
Dim CLAdress As Range
    Cells(3, UC).Select
        'ActiveSheet.Paste
        End If

Dim dammi As Integer
dammi = MsgBox("Proseguire la ricerca ?", vbYesNo)
'se la risposta sarà no
If dammi = vbNo Then
'si seleziona la cella
CL.Select
Exit Sub 'e si esce dalla routine
End If
'nel caso si sia risposto Si, di voler continuare, si prosegue al Next che continua il ciclo fino alla 'fine di "Zona"
'impostiamo anche un controllo che ci avvisi quando avremo "spazzolato" l'ultima cella di "zona" 'che la ricerca è terminata.
If CL = Zona.SpecialCells(xlCellTypeLastCell) Then GoTo 10
End If

Next
10:
MsgBox "Ricerca Terminata"
End Sub


Non vorrei aggiungere un ulteriore e forse inutile ciclo for , ma che l'affiancamento avvenga in" coda" alla rilevazione di una seconda o terza o... colonna pari titolo, cosa questa che la macro già provvede a fare.
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 252
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Anthony47 » 13/03/17 13:26

Come detto, ti ho perso vari messaggi fa, quando il problema era inserire in foglio Riepilogo i risultati delle query dei vari titoli.
Ora parli di "storico" ma non ho capito cosa intendi, tanto meno ho capito come hai cercato di farlo...
Avatar utente
Anthony47
Moderatore
 
Post: 17442
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare (una) tabella da web

Postdi Gianca532011 » 13/03/17 15:07

Non riuscendo a risolvere l'accostamento delle colonne (titoli) pari riferimento su Riepilogo , ho creato un terzo foglio, lo storico appunto. Qui con la macro del post mio ultimo sopra faccio la ricerca dei titoli che si ripetono su foglio "riepilogo" e poi ( questa è l'intenzione) li metto in[b] ordine ma affiancati per Header uguali [/b,] alla fine lo "storico" mi fa vedere i titoli secondo una progressione temporale , che non è in funzione di una data ma di quando li ho scaricati è inseriti in riepilogo.

Se non sono stato chiaro allego file ad oggi realizzato. ciao
la macro dello "storico" , per ora è da lanciare manualmente, poi diventerà da bottone.

ciao

http://www.filedropper.com/yahoo74p
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 252
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 16/03/17 20:14

Alla fine " siamo riusciti" a concludere l'annosa questione .
Allego il file finale, e ringrazio tutti coloro che mi hanno aiutato .


http://www.filedropper.com/yahoo7end
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 252
Iscritto il: 27/05/11 10:18

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "Importare (una) tabella da web":


Chi c’è in linea

Visitano il forum: Nessuno e 32 ospiti