Condividi:        

Continuazione Spezzoni Di Sestine

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

Continuazione Spezzoni Di Sestine

Postdi ikwae » 30/03/23 23:49

Ciao a tutti… Dovrei fare delle tabelle per ricavare dei filtri. Questi filtri poi verranno
applicati nei pronostici delle sestine per sviluppare i soliti 2.130 e passa fogli.

Per fare questo servono dati dalle sestine integrali. Io ho già tutto l’occorrente
delle sestine integrali, per recuperare i dati, ma mancano spezzoni specifici.

Ho una macro, recuperata in rete, che è ottima e lavora molto bene ma purtroppo
non sono riuscito a modificarla per avere spezzoni specifici di sestine.

Pertanto chiedo aiuto a tutti coloro che mi possono aiutare a modificare la
macro oppure un’altra macro che dovrebbe fare i seguenti passi:

1a) scrivo manualmente in C1 la sestina in singola cella.
2b) la macro di aiuto, legge la sestina e continua a scrivere le sestine fino alla riga C1.048.575.
3c) Arrivati alla riga C1.048.575 lasciare una colonna libera e continuare dalla E1 a scrivere sestine.
4d) Arrivati alla riga E1.048.575 lasciare una colonna libera e continuare dalla G1 a scrivere sestine.
5e) così di seguito fino alla fine del completamento delle sestine oppure finché pc e memoria ram lo permettono.

In allegato un file con due fogli “Esempio1” e “Esempio2”. Entrambi in C1 c’è una sestina una delle
622.614.630 in un’unica cella e a fianco, in colonna D, la prima delle colonne che il proseguo della
macro dovrebbe fare. Ringraziando anticipatamente tutti coloro che mi possono aiutare 73 ikwae
https://www.swisstransfer.com/d/36aaeb9 ... 539d6e7144

Codice: Seleziona tutto
Sub Generatore_Integrale_Di_Sestine_Unica_Cella()
Dim a, b, c, d, e, f, rg, Cc
rg = 1
Cc = 3 'INIZIA A SCRIVERE SEMPRE DALLA COLONNA C(c1)
contatore = 0 'CONTATORE DI COLONNE
Columns("B:XFD") = ""
    diff = ""
    Iniz = Time
Application.Calculation = xlCalculationManual
 For a = 1 To 85
   For b = a + 1 To 86
     For c = b + 1 To 87
       For d = c + 1 To 88
         For e = d + 1 To 89
           For f = e + 1 To 90
       
 If rg > 1048575 Then
     Cc = Cc + 2 '6ne in unica cella
      rg = 1

contatore = contatore + 1
If contatore = 594 Then GoTo 10 'SI FERMA QUANDO HA SCRITTO (tot) COLONNE
Cells(2, 1) = contatore 'monitor quante colonne ha scritto
Cells(4, 1) = a         'monitor la 1à cifra di ogni 6na
End If

'SCRIVE LA 6na IN UN'UNICA CELLA
  Cells(rg, Cc) = " " & a & " " & b & " " & c & " " & d & " " & e & " " & f

rg = rg + 1
                 Next
              Next
           Next
        Next
     Next
  Next
10
Application.Calculation = xlCalculationAutomatic
  Fine = Time
    diff = Format(Fine - Iniz, "hh:mm:ss")
    MsgBox ("Tempo impiegato   " & diff)
End Sub
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Sponsor
 

Re: Continuazione Spezzoni Di Sestine

Postdi Anthony47 » 31/03/23 14:54

Secondo me vuoi mandare in crash la tua macchina...

Prova questo codice, da inserire in un Modulo standard inizialmente vuoto:
Codice: Seleziona tutto
Dim Sex() As String, SexI As Long, TheEnd As Boolean
Dim WArr(1 To 6) As Long, LastN As Long, MaxL As Long, CurCol As Long
Dim myTim As Single

Sub Avvia()
Dim mySplit, I As Long
'
ReDim Sex(1 To 1000000, 1 To 1)
SexI = 0
TheEnd = False
mySplit = Split(Trim(Range("C1").Value), " ", , vbTextCompare)
For I = 0 To 5
    WArr(I + 1) = CLng(mySplit(I))
Next I
SexI = SexI + 1
Sex(SexI, 1) = Trim(Range("C1").Value)
LastN = 90
MaxL = 6
CurCol = 4
myTim = Timer
Call RecurRA(6)
Cells(1, CurCol + 2).Resize(1000000) = Sex
Cells(1, CurCol + 3).Resize(Rows.Count, 5).ClearContents
MsgBox ("Completato??!!")
End
End Sub



Sub RecurRA(myL As Long)
Do
    If WArr(myL) < (LastN + myL - 6) Then
        WArr(myL) = WArr(myL) + 1
        If myL = MaxL Then
            If SexI = 1000000 Then
                DoEvents
                CurCol = CurCol + 2
                Cells(1, CurCol).Resize(Rows.Count, 3).ClearContents
                Cells(1, CurCol).Resize(1000000) = Sex
                Debug.Print CurCol, Sex(1000000, 1), Format(Timer - myTim, "0.0")
                ReDim Sex(1 To 1000000, 1 To 1)
                SexI = 0
                If (CurCol Mod 20) = 0 Then
                    Stop                               '**** VEDI TESTO
                End If
                DoEvents
            End If
            SexI = SexI + 1
            Sex(SexI, 1) = WArr(1) & " " & WArr(2) & " " & WArr(3) & " " & WArr(4) & " " & WArr(5) & " " & WArr(6)
           
        Else
            WArr(myL + 1) = WArr(myL)
'            If myL < 5 Then DoEvents
        End If
    Else
        If TheEnd Then Exit Sub
        If myL > 1 Then
            Call RecurRA(myL - 1)
        Else
            TheEnd = True
        End If
    End If
    If myL < MaxL Then Exit Do
Loop
End Sub


Poi lancia la Sub Avvia
Questo scriverebbe blocchi da 1Mill righe, fintanto che si arriva all'ultima combinazione o fintanto che Excel non "schiatta".
Per evitare questo esito infauso, al momento il codice si ferma ogni circa 20 colonne scritte (vedi l'istruzione marcata ****); a quel punto puoi continuare la macro tramite F5 (si fermera' nuovamente dopo 20 colonne)

Non ho una strategia da suggerire per completare lo sviluppo, perche' non so cosa vorresti farci con questi numerelli.
L'unica opzione che vedo e' fermarsi dopo N colonne, salvare il file (con 20 colonne penso otterrai un file di almeno 100 Mbyte!); prendere nota dell'ultima combinazione sviluppata; chiudere excel e riavviarlo; riavviare il file partendo pero' dall'ultima combinazione precedente. E così via fintanto che non ti finisce la pazienza oppure lo spazio su disco.
In quel momento so che penserai a me...
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Continuazione Spezzoni Di Sestine

Postdi ikwae » 31/03/23 22:29

Gentilissimo Anthony sempre molto gentile a rispondermi….
Iniziamo dalle cose serissime.
@Anthony ha scritto
In quel momento so che penserai a me...
Da sempre le stesse cose una persona con tanta educazione, gentilezza e molta
“Santa Pazienza” aggiungo, sul Trono dell’Olimpo delle Macro.
Finisco di scrivere che da parte mia, una illimitata gratitudine tombale!

@Anthony ha scritto
Secondo me vuoi mandare in crash la tua macchina... fintanto che Excel non "schiatta".
Io ho già realizzato lo sviluppo integrale iniziando dalla sestina 1 2 3 4 5 6 ha impiegato diversi
giorni e quando è uscito il msgBox di completato io, stupidamente, ho immediatamente salvato
il lavoro ma il cursore ha iniziato a girare e non la finiva più e, purtroppo, ho dovuto resettare tutto.
Quindi ho rifatto la procedura annullando il salvataggio automatico e, dopo 594 colonne è apparso
ancora il messaggio di completo.
Con il mouse “lontanissimo” dall’icona del discetto di salvataggio ho applicato il piè colonna
numerandole tutte poi l’ho diviso in quattro parti salvando i file separatamente.

Per il collaudo, :D della tua magnifica macro, conoscendo già le potenziali del mio pc ho
all’istante commentato lo stop e ho mandato in esecuzione la macro.
Premessa dalla sestina 13 50 59 60 66 75 che di nr d’ordine è 384.827.026 quindi per arrivare
fino in fondo mancavano 237.787.604 milioni che diviso 1.000.000 sono 237,787 colonne.
L’ho lasciato lavorare ma dopo tre ore non sapendo a che punto è l’ho interrotto aveva già scritto
395 colonne ma una colonna piena e una vuota sono all’incirca la metà ne mancavano poche.
Infine ho salvato il tutto e si è creato un file di 1.124.119 KB (1,12 GB) che per i miei lavori è normalità.

Ho “allungato” il ciclo fino alla riga 1.048.575 e ho mandato in esecuzione la macro da completare
15 colonne e appena ha finito ho mandato in esecuzione la mia macro con i numeri d’ordine e
controllando a campione, con un magico programmino di nome Index, sia come numeri che come
sestine i conti tornano.
Inutile dire che la macro è meravigliosa ma non si capisce dove finisce la prima colonna per
aggiungere un rigo di codice a me indispensabili tipo
Cells(2, 1) = contatore 'monitor quante colonne ha scritto


@Anthony ha scritto
perche' non so cosa vorresti farci con questi numerelli.
Come seconda scelta è per preparare il file da allegare per la 2à richiesta di aiuto.
La 1à richiesta sarà sui fogli di lavoro.
Come prima scelta è quella di completare delle tabelle per ricavare dei filtri che poi vengono
applicati nei pronostici per trovare il “filotto” nelle estrazioni man mano che escono.

Ringraziandoti mille e mille volte per il tuo lavoro cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Continuazione Spezzoni Di Sestine

Postdi Anthony47 » 01/04/23 20:49

Non ho capito se hai risolto tutto; con questa variante scrivi 1040Kcelle per colonna (lo puoi impostare nella variabile ULimit), e riporti in A2 l'avanzamento (n° di colonne scritte)
Ho sempre impostato uno Stop dopo 50 colonne (uso Office a 32bit, io non mi posso permettere di più), se vuoi puoi eliminarlo come gia' sai fare.
Codice: Seleziona tutto
Dim Sex() As String, SexI As Long, TheEnd As Boolean
Dim WArr(1 To 6) As Long, LastN As Long, MaxL As Long, CurCol As Long
Dim myTim As Single
Dim ULimit As Long, cCnt As Long


Sub Avvia()
Dim mySplit, I As Long
'
ULimit = 1040000                        '<<< Quanti esiti in ogni colonna
Range("A2").Value = "Running..."
ReDim Sex(1 To ULimit, 1 To 1)
SexI = 0
TheEnd = False
mySplit = Split(Trim(Range("C1").Value), " ", , vbTextCompare)
For I = 0 To 5
    WArr(I + 1) = CLng(mySplit(I))
Next I
SexI = SexI + 1
Sex(SexI, 1) = Trim(Range("C1").Value)
LastN = 90
MaxL = 6
CurCol = 4
myTim = Timer
Call RecurRA(6)
Cells(1, CurCol + 2).Resize(ULimit) = Sex
Cells(1, CurCol + 3).Resize(Rows.Count, 5).ClearContents
Range("A2").Value = "Colonne completate: " & cCnt + 1
MsgBox ("Completato? Colonne: " & cCnt + 1)
End
End Sub



Sub RecurRA(myL As Long)
Do
    If WArr(myL) < (LastN + myL - 6) Then
        WArr(myL) = WArr(myL) + 1
        If myL = MaxL Then
            If SexI >= ULimit Then
                cCnt = cCnt + 1
                Range("A2").Value = "Colonne completate: " & cCnt
                DoEvents
                CurCol = CurCol + 2
                Cells(1, CurCol).Resize(Rows.Count, 3).ClearContents
                Cells(1, CurCol).Resize(ULimit) = Sex
                Debug.Print cCnt, CurCol, Sex(ULimit, 1), Format(Timer - myTim, "0.0")
                ReDim Sex(1 To ULimit, 1 To 1)
                SexI = 0
                If (CurCol Mod 100) = 0 Then
                    Stop                               '**** VEDI TESTO
                End If
                DoEvents
            End If
            SexI = SexI + 1
            Sex(SexI, 1) = WArr(1) & " " & WArr(2) & " " & WArr(3) & " " & WArr(4) & " " & WArr(5) & " " & WArr(6)
        Else
            WArr(myL + 1) = WArr(myL)
'            If myL < 5 Then DoEvents
        End If
    Else
        If TheEnd Then Exit Sub
        If myL > 1 Then
            Call RecurRA(myL - 1)
        Else
            TheEnd = True
        End If
    End If
    If myL < MaxL Then Exit Do
Loop
End Sub
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Continuazione Spezzoni Di Sestine

Postdi ikwae » 02/04/23 09:45

Gentilissimo Anthony :)
Ho scritto come limite massimo 1.048.575 righe e l’ho mandato in esecuzione e in pochi minuti
si è fermato allo stop e, in A2, la scritta Colonne completate: 48. Ho contato le colonne piene
e sono concorde con il numero scritto in A2 ossia 48.
Ho salvato il file e ha creato un file di soli 344.640 KB è da dire che io uso esclusivamente fogli
Excel Binari quindi i KB sono in percentuale minori rispetto ai fogli tradizionali con attivazione macro.
Purtroppo se si ferma allo stop non va fino in fondo alla macro e non esce fuori il msgBox del tempo
Impiegato per le elaborazioni.
Sarebbe molto bello se si possono impostare le colonne da codice così, alla fine delle colonne, arriva il
msgBox con il tempo impiegato.
Tuttavia è già troppo fin qui e non chiedo altro va benissimo così com’è.

@Anthony ha scritto
…uso Office a 32bit, io non mi posso permettere di più…
Se me lo permetti vorrei assemblare un I7 64 bit, di ultima generazione, con il sistema operativo
installato su una M.2 SSD PCle x4 NVMe sarà un “siluro”, non come le tue macro, ma si avvicina molto.
Finito di assemblarlo te lo porterei io stesso a destinazione e te lo regalerei stringendoti la mano
ringraziandoti per l’aiuto che dai a tutti noi utenti del Forum.
Se lo confermi domani mattina vado a comprare l’occorrente per l’assemblaggio.
Spero di cuore che tu accetti questo mio modesto regalo.
Per adesso ti ringrazio mille e mille volte per il tuo lavoro e il tempo che mi hai dedicato.
Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Continuazione Spezzoni Di Sestine

Postdi Anthony47 » 02/04/23 15:50

ikwae ha scritto:
Anthony ha scritto:…uso Office a 32bit, io non mi posso permettere di più…
Se me lo permetti vorrei assemblare un I7 64 bit, di ultima generazione, con il sistema operativo
installato su una M.2 SSD PCle x4 NVMe sarà un “siluro”, non come le tue macro, ma si avvicina molto.
Finito di assemblarlo te lo porterei io stesso a destinazione e te lo regalerei stringendoti la mano
ringraziandoti per l’aiuto che dai a tutti noi utenti del Forum.

Ti ringrazio per il pensiero, ma facevo riferimento ad Office 32 bit, che con 50 colonne da 1mill di righe va decisamente in crisi.

Il pc piu' robusto che uso e' un laptop HP Pavilion - 16-a0020nl, ha abbastanza potenza per quel che mi serve, ma anche su questo ho installato Office a 32bit, per compatibilita' con vecchi activex che nella versione 64bit non sono mai stati disponibili.
In realta' questo vincolo oramai non mi interessa piu', quindi certamente la prossima installazione sara' a 64bit.

Lo Stop dopo 50 colonne voleva essere una fermata per salvare il lavoro, cancellare le colonne e ripartire; se invece vuoi inserire un limite alle colonne da elaborare allora invece di Stop metti un End Sub.
Quando ai tempi, la macro "registra" l'avanzamento nella finestra Immediata del vba
Codice: Seleziona tutto
NumCol       Su colonna    Ultima Sestina             Sec dal via
7             18           45 53 57 60 68 70           37,1
8             20           46 52 61 69 75 82           42,9

In chiaro: 7° colonna, scritta su colonna 18=R, dopo 37.1 sec dal via
Se non sbaglio sono visibili le ultime 200 registrazioni (le precedenti vengono man mano perdute).

Per visualizzare la "finestra Immediata" del vba, usare la cpmbinazione Contr-g; oppure Menu /Visualizza /Finestra Immediata.
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Continuazione Spezzoni Di Sestine

Postdi ikwae » 02/04/23 19:37

Gentilissimo Anthony ho messo in atto le tue indicazioni e va molto bene così.
Specialmente la finestra immediata. Con info preziose.

Quindi adesso ho la macro per fare spezzoni a piacere e vorrei farti una
domanda tecnica, mi serve per i fare le tabelle, se volessi costruire una macro
veloce da leggere tutte le colonne da 1.048.575 righe per trovare un numero e
copiare delle celle e accodarle su un foglio specifico quale sarebbe meglio, sempre
teoricamente parlando, Excel preferisce una macro che legge 295 file (da 23 kb) con due
fogli ciascuno oppure una macro che legge 40 file (242 kb) con 20 fogli ciascuno?
È necessario aprirli oppure la macro può leggere i dati con i file chiusi.
Ringraziandoti infinitamente cordialmente ikwae…. Neanche due spaghettini sui Navigli?
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Continuazione Spezzoni Di Sestine

Postdi Anthony47 » 02/04/23 22:55

Per cercare le righe contenenti un numero io proverei a filtrare le singole colonne col criterio "Contiene il numero"

Teoricamente si puo' leggere il contenuto di un file senza aprirlo, usando formule; ma e' un processo molto lento per cui meglio non provarci.
E poiche' l'apertura di un file e' relativamente lenta, meglio aprirne pochi con tanti fogli...

Un giro tra il Pavese (abbastanza triste) e il Grande (abbastanza vivace) l'ho fatto mercoledì sera, ero con amici e non ti ho cercato :D
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Continuazione Spezzoni Di Sestine

Postdi ikwae » 03/04/23 08:36

Ho trovato in rete alcuni esempi sui filtri adesso provo e costruire le macro per renderle autonome.
Mille grazie per le tue preziosissime informazioni. :)
cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14


Torna a Applicazioni Office Windows


Topic correlati a "Continuazione Spezzoni Di Sestine":


Chi c’è in linea

Visitano il forum: Nessuno e 60 ospiti