Ciao. Credo che per una soluzione ottimale ci voglia una macro, ma siccome io non so scrivere il codice ti propongo intanto una soluzione con due formule.
Supponendo che nel Foglio1 ci siano i dati scaricati da internet, nel foglio 2 in A1 metti
=SE(E(RESTO(RIF.RIGA(A1);16)>=3;RESTO(RIF.RIGA(A1);16)<14);SCARTO($Foglio1.$B$2;;RESTO(RIF.RIGA(A1);16)-2);SE(RESTO(RIF.RIGA(A1);16)=1;"Estrazione numero "&SCARTO($Foglio1.$A$2;QUOZIENTE(RIF.RIGA(A1)-1;16)+1;)&" di "& TESTO(SCARTO($Foglio1.$A$2;QUOZIENTE(RIF.RIGA(A1)-1;16)+1;1);"gggg gg mmmm aaaa");""))
e tiri in basso per quanto ti può servire.
Poi in B2 metti
=SE.ERRORE(SE(E(RESTO(RIF.RIGA(A1);16)>=3;RESTO(RIF.RIGA(A1);16)<14);ESPR.REG(SCARTO($Foglio1.$B$2;(QUOZIENTE(RIF.RIGA(A1)-1;16)+1);RESTO(RIF.RIGA(A1);16)-2);"[0-9]{1,}";;RIF.COLONNA(A1));"");"")
e tiri a destra di 5 colonne e in basso.
Il file si aggiorna man mano che aggiungi o cambi i dati nel Foglio1
Cambio visualizzazione estrazioni lotto.ods (57.5 KB)
Una buona giornata a tutti gli utenti di questo Forum
Salve Gioh661. Ok,provo
Concordo con quanto detto da gioh, se vuoi posso allegarti una soluzione con macro.
Saluti
Ciao Gaetano. Sì,allega pure,grazie
I dati vengono inseriti nel Foglio3
Sub Main
Doc = ThisComponent
ShOr = Doc.Sheets.GetByName("Foglio1")
ShDest = Doc.Sheets.GetByName("Foglio3")
c = ShDest.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow
ShDest.getCellrangeByName("A1:H"+LastRow+1).ClearContents(1+4)
c = ShOr.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow
LastCol = c.RangeAddress.EndColumn
RigaIn = 0
Col = 0
Giorni = Array ("Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica")
Mesi = Array("GENNAIO", "FEBBRAIO", "MARZO", "APRILE", "MAGGIO", "GIUGNO", "LUGLIO", "AGOSTO", "SETTEMBRE", "OTTOBRE", "NOVEMBRE", "DICEMBRE")
Numero = 1
For i = LastRow To 2 Step - 1
cont = 0
Nestr = ShOr.GetCellByPosition(0, i).String 'Numero estrazione
Data = DateValue(ShOr.GetCellByPosition(1, i).String)
Stringa = "Estrazione numero " + Nestr + " di " + Giorni(WeekDay(Data)-2) + " " + Day(Data) + " " + Mesi(Month(Data)-1) + " " + Year(Data)
ShDest.GetCellByPosition(Col, RigaIn).String = Stringa
ShDest.GetCellByPosition(7, RigaIn).String = Numero
Numero = Numero + 1
For y = 2 To LastCol
cont = cont + 1
Ruota = ShOr.GetCellByPosition(y, 1).String
NumEstr() = Split(ShOr.GetCellByPosition(y, i).String, " ")
ShDest.GetCellByPosition(Col, RigaIn+1+cont).String = Ruota
For num = 0 To Ubound(NumEstr)
ShDest.GetCellByPosition(Col+1+num, RigaIn+1+cont).String = NumEstr(num)
Next num
Next y
RigaIn = RigaIn + 16
Next i
End Sub
Ciao,funziona e tutto mi si aggiorna in Foglio 3. Grazie mille. Il foglio 2 a cosa serve ? Giusto nel caso volessi modificare il codice da Foglio3 a Foglio2 concernente l’aggiornamento ?
A nulla, era una copia che avevo fatto dell’altro tuo file per avere in un unico file i dati origine e i dati finali, puoi eliminarlo oppure eliminare il Foglio3 e lasciare il Foglio2, però in questo caso la macro và modificata come bene puoi intuire ShDest = Doc.Sheets.GetByName("Foglio3")
diventa ShDest = Doc.Sheets.GetByName("Foglio2")
o puoi mettere il nome che più ti piace
Perfetto,grazie
Ciao Gaetano, (a Gio e a tutti gli altri utenti del Forum naturalmente). Mi sono accorto soltanto ora che riguardo la macro che mi hai inviato,persiste sempre un piccolo intoppo concernente l’allineamento dei numeri,che solitamente (di default) dovrebbe essere come nella foto 1,e invece dopo l’esecuzione del codice rimangono nella posizione inversa (opposta) come in foto 2. In Libre Office questo purtroppo mi crea dei problemi nei passaggi successivi in quanto la Formattazione Condizionale non riconosce la diversa collocazione dei valori e di conseguenza la suddetta non si attiva. So che può sembrare una banalità ma è realmente così. Provando tra l’altro a fare l’allineamento manuale (da destra a sinistra o anche viceversa) non cambia nulla. Riattivando la macro,la FC continua a non funzionare. Può essere tutto ciò sia causato da un processo di incompatibilità fra le estrazioni che vengono scaricate in formato Excel e lo step successivo che trasferisce i dati in Libre Office ? Non so. Ti domando se fosse possibile a questo punto modificare lievemente la macro al fine di eliminare forse questo inghippo e far sortire i numeri come in foto 1. Ho preso a riferimento il tuo ultimo file e quindi ho evitato di mandarlo di nuovo. Grazie e buona giornata
Ciao, dovrebbe questa modifica
ShDest.GetCellByPosition(Col+1+num, RigaIn+1+cont).String = NumEstr(num)
DIVENTA
ShDest.GetCellByPosition(Col+1+num, RigaIn+1+cont).Value = NumEstr(num)
Ciao,scusa non è cambiato nulla. Ho sostituito come hai detto tu. Mi dà questa schermata comparendomi lo zero (0) in colonna G
Per lo zero finale cambia in questo modo
For num = 0 To Ubound(NumEstr) - 1
ShDest.GetCellByPosition(Col+1+num, RigaIn+1+cont).Value = NumEstr(num)
Next num
Il Foglio3 eliminalo e inseriscine uno nuovo sempre Foglio3
Allego file
archivio estrazioni originale da internet.ods (28.5 KB)
Ok,va bene
E’ meglio fare diversamente per evitare qualsiasi errore, allego la macro modificata.
Sub Main
Doc = ThisComponent
ShOr = Doc.Sheets.GetByName("Foglio1")
ShDest = Doc.Sheets.GetByName("Foglio3")
c = ShDest.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow
ShDest.getCellrangeByName("A1:H"+LastRow+1).ClearContents(1+4)
c = ShOr.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow
LastCol = c.RangeAddress.EndColumn
RigaIn = 0
Col = 0
Giorni = Array ("Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica")
Mesi = Array("GENNAIO", "FEBBRAIO", "MARZO", "APRILE", "MAGGIO", "GIUGNO", "LUGLIO", "AGOSTO", "SETTEMBRE", "OTTOBRE", "NOVEMBRE", "DICEMBRE")
Numero = 1
For i = LastRow To 2 Step - 1
cont = 0
Nestr = ShOr.GetCellByPosition(0, i).String 'Numero estrazione
Data = DateValue(ShOr.GetCellByPosition(1, i).String)
Stringa = "Estrazione numero " + Nestr + " di " + Giorni(WeekDay(Data)-2) + " " + Day(Data) + " " + Mesi(Month(Data)-1) + " " + Year(Data)
ShDest.GetCellByPosition(Col, RigaIn).String = Stringa
ShDest.GetCellByPosition(7, RigaIn).String = Numero
Numero = Numero + 1
For y = 2 To LastCol
cont = cont + 1
Ruota = ShOr.GetCellByPosition(y, 1).String
NumEstr() = Split(Trim(ShOr.GetCellByPosition(y, i).String), " ")
ShDest.GetCellByPosition(Col, RigaIn+1+cont).String = Ruota
For num = 0 To Ubound(NumEstr)
ShDest.GetCellByPosition(Col+1+num, RigaIn+1+cont).Value = NumEstr(num)
Next num
Next y
RigaIn = RigaIn + 16
Next i
End Sub
PS: La spunta di soluzione non và messa sul tuo ultimo messaggio.
Guarda se la spunta adesso va bene per favore
Ok, sulla macro finale cioè quella corretta.
Perfetto,grazie
Caro Gaetano (ma la domanda è rivolta anche a Gio e ad altri ovviamente),scusa se riapro un attimino questo argomento. Riesci a trovarmi un modo per invertirmi la tabella delle estrazioni da questo foglio allegato ? In pratica dalla più piccola (111) alla più grande (121) in modo ascendente. Come vedi adesso sono in forma discendente. Grazie,ciao
Invertire la tabella.ods (22.6 KB)
Non posso aprire il file ma credo ti basti invertire il ciclo for.
For i = LastRow To 2 Step - 1 diventa
For i = 2 to LastRow.
PS: Novarest non dovresti postare lo stesso problema su due Forum diversi