Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

formula-codice vba

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: formula-codice vba

Postdi Anthony47 » 28/09/13 01:26

Per ora posto questa versione della sub Dati, che dovrebbe sostituire la versione presente nel file che hai pubblicato
Codice: Seleziona tutto
Sub Dati()
'
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Sheets("Foglio2")
Dim t As Date
Dim I As Integer
Dim X As Integer
Dim Y As Integer
Dim Headr As Long
t = Now

I = 1
X = 1
Y = 1
'Headr = 0

Application.ScreenUpdating = False
Range("B21").Select
'Imposta la serie 1, 2, ... in B21 e sottostanti
    ActiveCell.Resize(10000, 1).ClearContents    'Prima azzeriamo la serie presente
    ActiveCell.FormulaR1C1 = "1"
    ActiveCell.AutoFill Destination:=ActiveCell.Resize([B5], 1), Type:=xlFillSeries

   
     For I = 1 To [B4]
 
      ActiveCell.Offset(0, 3).Range("A1").Select
      ActiveCell.FormulaR1C1 = "=COUNTIF(Foglio1!R21C:R3000C,Foglio2!RC2)"
 
 
'''CORTESEMENTE SE ANCHE QUESTA FORMULA ME LA TRASFORMATE IN CODICE
 
     Next I

'FAREMO UN UNICO COPIA /INCOLLA VALORI, ALLA FINE
Cells(ActiveCell.Row, 2).Select
'COPIAMO LE FORMULE DELLA PRIMA RIGA SULLE RIGHE SOTTOSTANTI:
ActiveCell.Offset(0, 1).Resize(1, [B4] * 3 + 10).Copy _
    Destination:=ActiveCell.Offset(1, 1).Resize([B5] - 1, 1)

Calculate
'COPIA /INCOLLA-VALORI FINALE:
Range("A21").Resize([B5], 1).EntireRow.Copy
Range("A21").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Application.CutCopyMode = False

Range("A1").Select

Application.ScreenUpdating = True
MsgBox Format(Now - t, "HH:MM:SS"), vbInformation, "CODICE ESGUITO ...IN"
End Sub

La serie 1,2,3,.. l' ho creata con l' istruzione ActiveCell.AutoFill Destination:=ActiveCell.Resize([B5], 1), Type:=xlFillSeries

Poi ho creato una sola riga di formule, e l' ho copiata nelle righe sottostanti.

Infine ho trasformato tutto in Valori, con un solo Copia /Incolla speciale-valori.

I tempi di esecuzione sono di pochi secondi, penso che sia sufficiente per le tue esigenze.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Sponsor
 

Re: formula-codice vba

Postdi giorgioa » 28/09/13 06:38

Salve e buongiorno,

che ti dicevo?, è meglio postare il file e grazie a scossa che mi ha convinto.
Il mio proposito era quello di comprendere a risolvere anche il seguito della macro.
Qualcosa l'ho capita ma mi devo vedere meglio cosa e come ai impiegato
il listato, parlo per il futuro.
Con riferimento a: che ti dicevo?... è solo una battuta e riferita a me medesimo.
Ora che mi hai risolto questo puoi passare a risolvere il foglio1?
Qualora puoi andare avanti ti accenno brevemente cosa fa il foglio1
Intanto non ho capito perchè al richiamo delle date non scrive le date esatte,
pur avendo formattato sia la colonna archivio A che la colonna foglio1 in
date in cifre;
poi come vedi la colonna B svolge la stessa funzione di colonna B -foglio2;
la formula di colonna C forse la puoi unificare con quella di colonna E
NB il fatto che la formula di colonna C abbia dati che vanno da 1 a 10(10 conta.se)
è perchè si prevede che i dati delle prime 10 righe possono aumentare come
diminuire rispetto a quelli che ci sono ora ma sempre da 1 a 10 righe.

Per la prima parte i tempi di sviluppo sono eccezionalmente diminuiti
cioè da quasi 3 minuti sono scesi a secondi 6-7 secondi, ora rimane appunto
questa del foglio 1 che mi porta via 6-7 minuti.
Vedi cosa puoi fare.

un saluto e tanti grazie
giorgioa
Utente Senior
 
Post: 544
Iscritto il: 16/04/12 15:00

Re: formula-codice vba

Postdi giorgioa » 28/09/13 07:38

Ciao,

aggiungo a quanto detto nel messaggio precedente,
"da sistemare il foglio1" che i dati ottenuti dalle
formule (risultato finale) vanno posti nella colonna E
in quanto la macro dati attinge i dati da quella colonna.

Una precisazione.

Ciao
giorgioa
Utente Senior
 
Post: 544
Iscritto il: 16/04/12 15:00

Re: formula-codice vba

Postdi Anthony47 » 29/09/13 21:56

Non ho nessuna idea di come i dati finiscono in Foglio1, per cui non so cosa potrei fare, ne' vorrei mettermi a leggere tutte le macro per farmi una idea :D
Ti chiederei quindi di spiegare piu' in dettaglio le cose.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: formula-codice vba

Postdi giorgioa » 29/09/13 22:32

Salve Anthony,

Giusto che non puoi stare a studiare cosa avviene,
volevo solo l'OK se si può andare avanti,
Del foglio1 parliamo della macro Sistema:
in colonna A chiaramente c'è solo =archivio"A21 (qui non riesco a capire perchè non mi rende i dati esatti)
in colonna B è lo stesso argomento trattato in Foglio2 =b20+1.(stando in B21)
in colonna C ci sono 10 conta.se che vanno a leggere in archivio se dei dati posti nelle righe 1 a 10 ci sta
il punteggio richiesto in B13 e se trova il punteggio richiesto scrive 0(zero) mentre se il punteggio è diverso di B13
scrive C20+1 stando in C21;
la colonna D è vuota;
in colonna E se in C trova 0 scrive il numero che sta sopra lo 0(zero), praticamente segnala quanto ha fatto
di ritardo ;
Commento sulla formula in C; ci sono dieci conta.se perchè le righe in testa ora sono 6 ma potrebbero aumentare
oppure diminuire, per cui per non manomettere continuamente conta se (togliere od aggiungere a causa
dell'aumento di dati nelle prime 1o righe nella macro come formula devono rimanere 10 conta.se.

Aspetto eventuali chiarimenti,
Ciao
giorgioa
Utente Senior
 
Post: 544
Iscritto il: 16/04/12 15:00

Re: formula-codice vba

Postdi giorgioa » 30/09/13 14:34

Salve Anthony,

come si dice di necessità virtù,
nel senso che mi sono dato da fare,
ho preso spunto dai dati della macro Dati che mi hai sistemato in modo eccellente
ora quello che è rimasto da sistemare è perchè quando prende i dati di colonna
A dell'archivio non scrive i dati esatti cioè le date e poi una piccola cosa ancora
cioè =Archivio!A21, la colonna è stata formattata in personalizzata con gg/mm/aaaa

stando in foglio2 entro nel visual basic, entro nella macro sistemi di foglio1 perchè
con F8 non va a scrivere in foglio1?
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Sheets("Foglio1")
e credo di togliere il disturbo,

Saluti
giorgioa
Utente Senior
 
Post: 544
Iscritto il: 16/04/12 15:00

Re: formula-codice vba

Postdi Anthony47 » 01/10/13 03:29

Bravo per aver fatto da solo... comunque ti propino lo stesso la mia variante della Sub Sistema(), che come hai intuito ricalca quanto fatto sulla Sub Dati:
Codice: Seleziona tutto
Sub Sistema()
'Dim X As Integer
Dim Y As Integer
'Dim XY As Integer
Dim t As Date
'X = 1
'Y = 1
'XY = 1
t = Now

Application.ScreenUpdating = False
Application.Calculation = xlCalculationAutomatic
'
Range("A21").Select
'Copiare finte date da Archivio
Selection.Resize([B14], 1).FormulaR1C1 = "=Archivio!RC[0]"  ' Era =Archivio!RC[1], Errata
'
Range("B21").Select
'Imposta la serie 1, 2, ... in B21 e sottostanti
    ActiveCell.Resize(10000, [B17] * 3 + 10).ClearContents 'Prima azzeriamo la serie presente
    ActiveCell.FormulaR1C1 = "1"
    ActiveCell.AutoFill Destination:=ActiveCell.Resize([B14], 1), Type:=xlFillSeries
'
Range("C21").Select
'Mettiamo le N formule in riga 21
For Y = 1 To [B17]
    Selection.FormulaArray = _
        "=IF(SUM(COUNTIF(Archivio!RC3:RC22,R1C:R10C))=R13C2,0,R[-1]C+1)"     '<<La formula e' modificata con Array
    ActiveCell.Offset(0, 2).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-2]=0,R[-1]C[-2],"""")"
    ActiveCell.Offset(0, 1).Range("A1").Select
Next Y
'
Cells(ActiveCell.Row, 2).Select
'COPIAMO LE FORMULE DELLA PRIMA RIGA SULLE RIGHE SOTTOSTANTI:
ActiveCell.Offset(0, 1).Resize(1, [B17] * 3 + 10).Copy _
    Destination:=ActiveCell.Offset(1, 1).Resize([B14] - 1, 1)
'
Calculate
'COPIA /INCOLLA-VALORI FINALE:
Range("A21").Resize([B14], 1).EntireRow.Copy
Range("A21").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'
Application.ScreenUpdating = True
MsgBox Format(Now - t, "HH:MM:SS"), vbInformation, "CODICE ESEGUITO IN......"
'
End Sub
Si esegue in molto meno di 6-7 minuti...

Non ho capito l' ultima domanda posta, " perchè con F8 non va a scrivere in foglio1?". Con le istruzioni che elenchi (intendo la Dim Ws1 e la Set Ws1) non c' e' niente che dovrebbe scrivere in Foglio1.

Poni anche una domanda sulla data che non viene riportata correttamente da Archivio in Foglio1; il motivo era che la tua ActiveCell.FormulaR1C1 = "=Archivio!RC[1]" applicata ad esempio in A21 vai a prelevare il contenuto di B21 ("C[1]); l' ho corretta nella macro di sopra.
Tieni inoltre presente che in Archivio non hai delle date ma delle stringhe in cui e' scritta una data; se servono solo per un' occhiata va bene cosi', ma se fai delle elaborazioni basate su quelle date allora avrai dei problemi.
Infine ho eliminato la formula con 10 Conta.se sostituendola con una piu' corta in forma di matrice.

Per ora puo' bastare cosi'...

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: formula-codice vba

Postdi giorgioa » 01/10/13 06:14

Ciao Anthony,

ho appena copiato il tuo listato, adesso lo provo
ma sicurissimo che andrà bene.

Dire grazie è poco e ringrazio anche chi apparentemente non vi
ha partecipato ma ha dialogato, per esempio a scossa che mi ha
convinto a presentare il problema dal vivo e perchè no anche al
bravo Flash, perche alla fine è stata in un certo senso, seguita
la sua strada.

Quindi ip dico (tranne un bug)
[RISOLTO],

Ancora saluti
giorgioa
Utente Senior
 
Post: 544
Iscritto il: 16/04/12 15:00

Re: formula-codice vba

Postdi giorgioa » 01/10/13 15:21

Salve Anthony,

ho sistemato le macro che mi hai postato, nel senso di eliminare righe inutili
mentre per le date ho impostato un copia e incolla-valori e non c'è più il problema.

Per tutti e 2 i fogli complessivamente (che poi dipende se aggiungo dati come ho
fatto per prova) e l'elaborazione complessiva, perchè il foglio2 dipende dal foglio1
me la cavo con 3,5.
Meglio di così.

Questo è solo un doveroso ringraziamento.
Saluti
giorgioa
Utente Senior
 
Post: 544
Iscritto il: 16/04/12 15:00

Re: formula-codice vba

Postdi Anthony47 » 02/10/13 00:58

me la cavo con 3,5
3,5 che cosa? Minuti!!? Solo se le altre elaborazioni portano via 3 minuti, perche' le due macro che abbiamo rivisto richiedono in tutto 20-25 secondi....
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: formula-codice vba

Postdi giorgioa » 02/10/13 06:39

Salve Anthony,

si parlo di minuti solo che ad esempio devo usare il trucco di eliminare dati
nell'altro foglio cioè per primo devo elaborare la macro del foglio1 e quindi mi
elimino i dati del foglio 2 (quelli vecchi) perchè prima la macro del foglio 2 ci impiegava una 30ina di secondi
mentre ora si è capovolta la situazione cioè che il foglio1 è più veloce del 2.
Se mi sono spiegato cmq ad ogni buon conto ridico meglio di così nel senso
che prima dell'approccio con te, ci impiegava complessivamente più di 30 minuti.

Spero di non farti perdere tempo con queste chiacchiere e ti
saluto e ti auguro una buona giornata.
giorgioa
Utente Senior
 
Post: 544
Iscritto il: 16/04/12 15:00

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "formula-codice vba":


Chi c’è in linea

Visitano il forum: Nessuno e 17 ospiti