Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Formula per percentuale

Ultimo Aggiornamento: 08/05/2023 10:58
Post: 7.237
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
04/05/2023 08:48

Ciao mi occorrerebbe una formula che calcoli la percentuale, ma non so come spiegarla, so che la percentuale si calcola facendo la differenza tra 2 numeri

una cella mi deve portare il valore percentuale, pero dovrebbe essere calcolata con un ciclo For...next

for x = 1 to y

la cella in oggetto mi dovrebbe portare un valore da 1 a 100 in base ad i valori x e y, cioè più sale x più aumenta la percentuale finche sarà 100% quando x sarà uguale ad y, non so se sono riuscito a spiegarmi

Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 2.950
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Veteran
365
OFFLINE
04/05/2023 09:00

No🤣

scrivi quattro righe di esempio della struttura
Post: 7.237
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
04/05/2023 09:56

Ciao Federico grazie per la risposta, girando sul web ho visto uno short di Emmanuele Vietti riguardo ad un grafico ad anello.

Pensandoci bene a volte ho delle macro che ci mettono alcuni minuti per eseguirle, ho già una macro che mi mette una barra di riempimento in basso a sx nella barra di stato, come vedi, per vedere l'esecuzione della macro.



però sarebbe carino cambiarla con un anello che si completa al completamento della macro, perche pure se non ce niente non sai se la macro sta lavorando e quando tempo ci metterà per finire.

ho preparato un file, che allego, il valore incremetale della percentuale andrebbe nella cella gialla B2, ma potrebbe essere qualsiasi cella

ho creato una macro per il conteggio temporizzata che si blocca ogni volta per 5 secondi, non funziona a dovere perche non mi fa vedere lo scorrimento dell'anello, ma è un fatto secondario al momento, troverò il modo di visualizzarlo.

metti un valore manualmente in b2 e vedrai, al momento il ciclo va da 1-x a 100-y ma potrebbe anche essere 1-10 oppure 1-20000 o ancora 1-3543 mi serve una formula che questi 2 valori x-y li riporti come da 1 a 100 ed inserirei il valore in B2 per alimentare il grafico, maggiormente il valore x dovrebbe andare da 1 a 100, visto che è quello da visualizzare

non so se la spiegazione sia stata esauriente.

Ciao By Sal (8-D

[Modificato da by sal 04/05/2023 10:05]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 601
Registrato il: 02/04/2018
Città: PESCARA
Età: 75
Utente Senior
EXCEL 2016 - SPREAD32
OFFLINE
04/05/2023 10:29

Ciao Sal

spero che Federico mi permetta di inserirmi
da quello che scrivi io non ho capito niente
comunque per vedere se per sbaglio ho indovinato qualcosa inserisci un tuo valore in G2 , e non in B2
e modifica un po' la tua macro così

macro
Option Explicit
Sub ritardo()
Dim x
Dim y
y = Range("G2")
For x = 0 To 100 Step 5
  Cells(2, 2) = x
  Cells(2, 7) = y / 100 * x
  Application.Wait (Now + TimeValue("0:00:01"))
  DoEvents
Next x
End Sub


vediamo se è quello che vuoi tu, altrimenti scusatemi entrambi

Leo

LEO
https://t.me/LordBrum
Post: 7.238
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
04/05/2023 19:24

Ciao Leo non devi scurarti ognuno può intervenire con il proprio consiglio, ora provo e vediamo se va bene

Ciao Salvatore (8-D

se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 1.103
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Veteran
Excel2019
OFFLINE
05/05/2023 19:36

Ciao

@by sal
Salvatore, ti do uno spunto (ma è solo uno spunto, bada bene)
Clicca sul pulsante in verde.

Fai sapere. Ciao,
Mario
Post: 3.492
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
06/05/2023 09:45

ciao Salvatore

ti ellego il file che normalmente utilizzo per le progr. bar.

Ce ne sono di due tipi: quella classica con userForm (cui vengono tolti i bordi) ed un'altra grafica sul foglio.

In L2 inserisci il valore alto del loop ...

saluti

relativamente a rapportare a 100 la tua "Y":

For i = 1 To Y
Incremento = i / Y
Progressivo_Percentuale = Round(Incremento * 100, 0)

comunque lo vedi nel file
[Modificato da dodo47 06/05/2023 09:51]
Domenico
Win 10 - Excel 2016
Post: 1.104
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Veteran
Excel2019
OFFLINE
06/05/2023 10:19

Ciao

@dodo47
Domenico, perfetto!!!! E non poteva essere altrimenti.

Ma mi chiedo, e vi chiedo, come fare quando NON si conosce a priori il tempo che impiegherà una macro a svolgere il proprio lavoro?
Per es. sto aprendo un altro file. Quanto tempo impiegherà? Quanto tempo la "progress" deve restare in funzione?
Se non ricordo male da qualche parte avevo letto che c'è un modo di conoscere già all'inizio il tempo di download.

Ciao a tutti, Mario
Post: 3.493
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
06/05/2023 10:32

Ciao Mario

se guardi questa sub, per esempio:
Sub ProgGraf()
Dim mProgr As Object, mLoop As Double, Increment As Double, ProgPerc As Double
Range("b2") = 0
mLoop = Range("L2") 'indice alto del loop
For i = 1 To mLoop
Increment = i / mLoop
ProgrPerc = Round(Increment * 100, 0)
Range("b2") = ProgrPerc / 100
DoEvents
ActiveSheet.ChartObjects("mProgr").Chart.Refresh
DoEvents
For j = 1 To 1000000
Next
Next
End Sub

la parte in grasssetto corrisponde a tutte le operazioni (ByStep)che la macro deve fare (aggiornamenti-formule-etc-etc) prima di passare al successivo incremento della barra.

Questo nel caso ci fosse un ciclo for...next tipo quello della suddetta sub (For i = 1 To mLoop)

Se non c'è, bisogna vedere cosa fa la macro, se per esempio aggiorna n files, prima va calcolato il numero di files ed il loop si baserà su quello.

Forse da qualche parte ho una Prog.Bar basata sul tempo.....se la trovo la pubblico.

cari saluti





[Modificato da dodo47 06/05/2023 12:06]
Domenico
Win 10 - Excel 2016
Post: 7.240
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
06/05/2023 11:32

Ciao Domenico, Grazie per il file, la menu bar con il form la sapevo già, mi hai risparmiato tempo per quella con il grafico

io invece uso spesso la StatusBar, con una macro non troppo invasiva, questo il risultato col funzionamento



questa la macro usata

Sub BarP(Progress, TotalSteps, Testo) 'tutt'è due as long inserisce una progressbar
Dim Progress_Char As String
Dim Space_Char As String
Dim Start_Char As String
Dim End_Char As String
Dim CompletedSteps As Long
Dim RemainingSteps As Long

Const MaxWidth = 40
CompletedSteps = Progress / TotalSteps * MaxWidth
RemainingSteps = MaxWidth - CompletedSteps
Start_Char = "[ "
End_Char = " ] "
Progress_Char = "|"  ' [||||  ]
'Progress_Char = ":" ' [::::  ]
Space_Char = " "
Application.StatusBar = Start_Char & WorksheetFunction.Rept(Progress_Char, Round(CompletedSteps, 0)) & _
  WorksheetFunction.Rept(Space_Char, Round(RemainingSteps, 0)) & _
  End_Char & Round(CompletedSteps / MaxWidth * 100, 0) & "% " & Testo
DoEvents
'Se si desidera solo un messaggio e nessun bar animato quindi utilizzare questa linea
' Application.StatusBar = Round (passaggi completati / Max larghezza * 100, 0) e "% Complete"
End Sub


come vedi mi indica anche quale archivio sta lavorando, e molto facile da usare, basta inserirla nel ciclo For..Next cosi

For x = 2 To Ur(Sh7.Name, 7) 
  BarP x, Ur(Sh7.Name, 7), "Scrivo gli ospiti"


dove la x è il contatore, Ur(Sh7.Name, 7) è una funzione per l'ultima riga e dopo viene il messaggio da visualizzare

la inserisco solamente se il ciclo è lungo, non vale la pena per i cicli brevi, non si riuscirebbe nemmeno a vederla

ora vedo come sfruttare il tuo grafico.

Ciao e grazie per il file, By Sal (8-D


[Modificato da by sal 06/05/2023 11:34]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 3.494
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
06/05/2023 13:14

@Mario

ciao
non ho trovato nei miei archivi quanto detto....

Se fai un esempio (a parole naturalmente) di cosa potrebbe fare una macro per durare molto e senza che abbia un loop, forse si riesce a venirne a capo.

saluti




[Modificato da dodo47 06/05/2023 13:14]
Domenico
Win 10 - Excel 2016
Post: 1.105
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Veteran
Excel2019
OFFLINE
06/05/2023 14:29


@dodo47

Ciao Domenico.
Molto tempo fa feci un lavoro per un mio parente commerciante. In un Foglio principale vi è l'elenco dei Fornitori (poco meno di 150) ed ognuno di loro presenta da una decina ad oltre 5000 prodotti. Per non creare un file con 150 fogli (ognuno con una diversa lunghezza in righe) optai per la creazione di tanti file quanti sono i Fornitori ed ognuno, ovviamente, col proprio numero di prodotti in un unico Foglio.
Dal Foglio principale "richiamo" il Fornitore. Ed ecco il punto: se il fornitore ha un numero limitato di prodotti, l'apertura del file è .... istantanea (quasi) mentre impiega un po' di tempo (anche parecchi secondi) se i prodotti sono tanti, come più sopra detto.
A suo tempo (non avevo le conoscenze di oggi) adottai un escamotage: una UserForm con la dicitura "Attendere, prego. Sto lavorando" che alla fine del download scompare.
Non ho provato a modificare il file (anche perchè va bene e non vorrei creare problemi all'Utente) inserendo una Progress.
Mi piacerebbe, però, capire come realizzarla.

Spero sia tutto chiaro e grazie per l'attenzione.
Ciao,
Mario
Post: 7.241
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
06/05/2023 16:23

Ciao Marius, forse si può fare, ma con le formule, il mio problema è a conoscenza di tutti, credo che basterebbe moltiplicare il tempo di 1 ciclo per il max del ciclo e si avrebbe il tempo di esecuzione totale, logicamente il tempo di 1 ciclo sarebbero millesimi di secondo o anche meno.

a questo punto basta contare il tempo di esecuzione in progressione con un timer e sottrarlo al tempo totale calcolato, a questo punto avremo quanto manca alla fine della macro o veramente del ciclo di quella macro perche se sarebbero più cicli separati non si potrebbe avere il tempo totale.

vedo se riesco a realizzarlo.

P.S. non avevo visto che mi avevi risposto prima di Domenico ora guardo

Ciao By Sal (8-D
[Modificato da by sal 06/05/2023 16:24]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 2.951
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Veteran
365
OFFLINE
06/05/2023 18:01

ciao
spiace non partecipare
ma non ho capito cosa devi fare con la formula
😞
Post: 3.495
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
06/05/2023 18:19

@Mario
ciao

basta che conti quanti file devi eleborare e poi assegni a mLoop tale numero

'con una semplice dir conti quanti file ci sono nella cartella
Filename = Dir(TuaCartella & "\*.xls*")
Do While Filename <> ""
    Count = Count + 1
    Filename = Dir()
Loop
mLoop = Count '<<<<<<<<<<<<<<<<<<<<<<<<<<

'CICLO LETURA A APERTURA FILES (anche con Dir o, meglio con _
' CreateObject("Scripting.FileSystemObject")


for each file......
     i = i + 1
    apri file.....
    fai quello che devi fare
    
    
    Increment = i / mLoop
    BarWidth = PrBarW * Increment
    ProgrPerc = Round(Increment * 100, 0)
    ProgressUF.bar.Width = BarWidth
    ProgressUF.Border.Caption = ProgrPerc & "% Complete"
    DoEvents
    chiudi il file

Next


saluti




[Modificato da dodo47 06/05/2023 18:27]
Domenico
Win 10 - Excel 2016
Post: 7.242
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
06/05/2023 18:34

Ciao Federico, ho detto formula per indicare quale tipo di calcolo applicare per poi tradurla per il vba, non una formula excel.

con la matematica sono rimasto al conteggio delle dita, per poi arrivare a 10 e dire "molti" quanto il numero è più grande 🤣🤣

Ciao Salvatore (8-D
[Modificato da by sal 06/05/2023 18:35]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 1.106
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Veteran
Excel2019
OFFLINE
06/05/2023 18:46

Ciao a tutti

Vedo, con piacere, che le fila si ingrossano.

Sicuramente mi sono spiegato male. Nel lavoro che ho fatto per il mio parente viene aperto un file alla volta, ci si lavora sopra (carico, scarico, aggiornamento prezzi, ecc.). Quindi salva e riappare la videata principale in cui si sceglie altro fornitore.
Non avrebbe senso "contare quanti file devi elaborare". Primo perchè non lo so. Può darsi che si debba lavorare su un solo fornitore oppure su dieci. Secondo perchè ne lavoro uno per volta, lo chiudo e ne apro un altro, se serve.

Ciao,
Mario

PS - Faccio un esempio banale. Nella cartella di download ognuno di noi ha dei files. Questa cartella evidenzia anche la "dimensione". Potrebbe servire questo parametro? E se sì, come si potrebbe fare per estrapolarlo e calcolare su questo il tempo necessario.
Post: 604
Registrato il: 02/04/2018
Città: PESCARA
Età: 75
Utente Senior
EXCEL 2016 - SPREAD32
OFFLINE
06/05/2023 19:21

ciao,anche se rispetto al vostro VBA io sono un vaso di coccio, mi permetto:
Un download manager decente per prima cosa rileva la lunghezza del file da scaricare.
Poi comincia e ad ogni istante misura la quantità scaricata nel tempo, la rapporta al totale e in questo modo predice ad ogni istante il tempo rimanente aggiornando proprio la previsione, e di solito indovina bene e la formula è semplicissima.
Per le esigenze dichiarate qui bisogna in qualche modo trovare un totale con cui fare a priori una proporzione
ricordiamoci però che la lunghezza di un xlsm o xls o xlsx non è come trattare i CSV fatti puramente di dati.
a voi l'incombenza

Leo

pure ipotesi
per piu files si potrebbe vedere quanto "costa" 1 file e moltiplicare per gli altri secondo la loro grandezza
oppure una macro intelligente potrebbe, la prima volta, scrivere il tempo da qualche parte, e nei successivi interventi ripartire col dato di quel tempo memorizzato,per predire comodamente, ma temo che si debba salvare il tempo impiegato la prima volta.
VBA non ne so

Leo
[Modificato da L2018 06/05/2023 19:33]

LEO
https://t.me/LordBrum
Post: 3.496
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
06/05/2023 20:34

Re:
Marius44, 06/05/2023 18:46:

Nel lavoro che ho fatto per il mio parente viene aperto un file alla volta, ci si lavora sopra (carico, scarico, aggiornamento prezzi, ecc.)

...e magari ti vai a prendere un caffè... eheheh.

Non è pensabile Mario, i fattori sono molteplici dalla potenza della macchina al tempo che impieghi a fare quello che devi...

E poi non ha senso, le progbar sono destinate ad un uso massivo da parte di un programma senza l'intervento dell'operatore, vedi per esempio quando installi un programma etc etc

saluti









[Modificato da dodo47 06/05/2023 22:02]
Domenico
Win 10 - Excel 2016
Post: 1.108
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Veteran
Excel2019
OFFLINE
07/05/2023 16:04

Buon pomeriggio a tutti

@dodo47
Sai che sono testardo e, secondo, me si può fare. Ecco come.
Nell'allegate vedrai che ci sono una cartella compressa con dentro il file Main ed una cartella ElencoFiles. In quest'ultima ci sono due files di differente pesantezza.
Apri il File "Main" e clicca sul pulsante "Avvia".
Vedrai che in col A verrà scritto il nome del primo file e in col.B la sua dimensione. Contemporaneamente si avvia la tua macro per il ProgrGraf.
Nel mio codice vedrai che a questo punto c'è uno STOP che ho remmato perchè qui ci dovrebbe andare il codice per aprire il file. Alla fine dell'apertura dovrebbe sparire il ProgrGraf e mostrare il file appena aperto.
Per una dimostrazione della veridicità della mia tesi ho inserito due file (ma non li apro) e vedrai che il ProgrGraf appare due volte e per tempi differenti.

Cosa ne pensi/pensate?
Ciao,
Mario
Post: 3.497
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
07/05/2023 17:03

Mario....stai barando" ?!!!

la progBar mostrata non è il tempo che ci mette excel ad aprire il file di x dimensioni, ma un loop qualsiasi basato si su una diversa durata, ma che nulla ha a che fare con i tempi di apertura del file, infatti tale loop viene eseguito completamente prima che il file venga aperto.

Purtroppo in vba (al contrario di vbNet) non c'è un evento After Open che forse in qualche modo si potrebbe sfruttare.


Non ho capito??

saluti



[Modificato da dodo47 07/05/2023 17:15]
Domenico
Win 10 - Excel 2016
Post: 1.109
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Veteran
Excel2019
OFFLINE
07/05/2023 17:16

Ciao Domenico

No, non credo di barare. Volevo solo far notare che il tempo di esecuzione della macro è bastato sulla dimensione del file.
Infatti il primo impiega qualche secondo, il secondo è quasi istantaneo. La tua casella gialla (per il loop) io non la tocco ma utilizzo la dimensione del file.

Ciao,
Mario
Post: 3.498
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
07/05/2023 17:24

Ciao Mario
Partiamo con un chiarimento di base:

- si vorrebbe una progBar per mostrare il tempo di apertura di un file

E' Così??

saluti



Domenico
Win 10 - Excel 2016
Post: 1.110
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Veteran
Excel2019
OFFLINE
07/05/2023 18:45

Ciao

Laconicamente, SI

Ciao,
Mario
Post: 3.499
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
08/05/2023 09:36

ciao

e come pensi di poterlo attuare ?

Anche se il loop corrisponde al size del file, nopn "scorre" unitamente alla sua apertura.

Sai cosa pensavo ? A mostrare il tempo trascorso (elapsed time) dal click per l'apertura alla sua completa disponibilità.

Al riguardo in particolare a intercettare la presenza del file $xxxxx che, come sai, è il temporaneo quando apri il file xxxxx; mi sembra che tale file venga "creato" appena il principale è disponibile, non prima.

saluti



Domenico
Win 10 - Excel 2016
Post: 1.112
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Veteran
Excel2019
OFFLINE
08/05/2023 10:24

Ciao

@dodo47
Domenico quello che mi piacerebbe è che un file come quello che t'ho detto come esempio, facesse "girare" il tuo "ProgrGraf" mentre sta cricando altro file e terminasse quando il detto file è caricato.

Ma forse (anzi certamente) sia "fuori tema" in questa discussione. Mi scuso con tutti.
Ciao,
Mario
Post: 3.500
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
08/05/2023 10:58

ciao Mario
si ho capito....forse con qualche API e comunque c'è da considerare anche che excel non è asincrono e può fare una cosa per volta

saluti




Domenico
Win 10 - Excel 2016
Vota: 15MediaObject5,00127 1
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Formula Conta.valori() [RISOLTO] (11 messaggi, agg.: 21/11/2023 16:01)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 11:48. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com