Limita l'utilizzo della CPU Excel


31

C'è un modo per limitare la quantità di utilizzo della CPU a cui excel ha accesso durante l'esecuzione? Ho uno script VBA che calcola un sacco di formule di array giganti. L'intero calcolo richiede forse 20 minuti usando il 100% della mia CPU ma non riesco a usare la mia macchina nel tempo e preferirei farla funzionare in background con un utilizzo della CPU pari al 50% in modo da poter continuare a fare altre cose. Eventuali suggerimenti?

Il mio sistema operativo è Windows 7 Enterprise a 64 bit e la versione di Excel è 2007-32 bit


1
Finestre? Quale versione?
DavidPostill

Windows 7. Lo aggiungerò al post
learningAsIGo

8
Ottieni una CPU multicore? Se ne hai già uno (chi non lo fa?) Ed Excel utilizza tutti i core (cosa che non sapevo che Excel potesse fare), imposta la sua affinità in Task Manager.
user253751,

2
Questo non risponde alla domanda, ma assicurati di disattivare gli aggiornamenti delle finestre prima di iniziare a calcolare e aggiornare migliaia di celle. Se hai dei grafici, disattivali anche tu. VBA è lento, ma quando è davvero lento, di solito è colpa di uno o entrambi.
Coxy,

1
@cat: No, un utilizzo della CPU del 100% in Task Manager di Windows significa il 100% in tutti i processori logici. Se viene riempito solo un core, sarà del 25% (su un dual core comune con hyper threading) o ~ 36% (turbo boosting).
Martheen Cahya Paulo,

Risposte:


54

Se una funzione VBA viene chiamata da diverse formule o se lo script genera o impone il ricalcolo di più formule, questo dovrebbe sicuramente utilizzare la funzionalità di calcolo multi-thread di Excel. Rispettivamente, ciò eseguirà più istanze della funzione VBA per ciascuna formula o ricalcola più celle contemporaneamente mentre lo script vba è in esecuzione su un singolo thread.

È possibile limitare il numero di thread utilizzati da Excel per ricalcolare le formule nella sezione Opzioni di Excel ... Scheda Avanzate ... Formule.

inserisci qui la descrizione dell'immagine


Il sub VBA non è il problema, è la formula dell'array Excel che genera il codice VBA.
learningAsIGo

@learningAsIGo Bene, ho semplificato la mia risposta. Facci sapere se è utile impostare il numero di thread su 1.
mtone

1
Questo sembra aver fatto il trucco. L'ho impostato su 3 core e raggiunge il 75% della CPU, lasciandomi molto spazio per fare altre cose. Grazie!
learningAsIGo

27

Invece di ridurre la priorità, prova a modificare l'affinità nel Task Manager. Se hai più di 1 CPU, puoi limitare il numero di CPU che Excel utilizzerà. Ciò consentirà alle altre CPU di lavorare su altre cose.

Fai clic con il pulsante destro del mouse su Excel nella scheda Processi e seleziona Imposta affinità. Scegli CPU (e) in cui vuoi eseguire Excel.


3
Nota che per affinità, Windows considera ogni core anche una CPU. (Quindi funzionerebbe se hai un dual o quad core.)
jpmc26,

1
Bene, se si parla specificamente di core, perché non i thread di HyperThreading? Sono anche CPU logiche distinte. Vale a dire una CPU quad-core con HT avrà 8 CPU logiche.
Ruslan,

Lo faccio sempre quando eseguo HandBrake e voglio solo navigare in Internet per un'ora senza mettere in pausa o interrompere il processo di transcodifica. Penso che varrebbe la pena menzionare che dopo qualche tempo i core vengono rilasciati nuovamente nel programma e l'affinità si "ripristina", almeno mi succede con il freno a mano.
MonkeyZeus,

2
@MonkeyZeus In genere, l'affinità non viene salvata alla chiusura di un processo. Si applica solo al processo attualmente in esecuzione. È possibile che HandBrake stia generando nuovi processi o che tu ne abbia avviati di nuovi.
jpmc26,

@ jpmc26 Buono a sapersi! Sicuramente non ho avviato un nuovo processo da solo, quindi deve generarlo da solo.
MonkeyZeus,

7

Puoi provare a ridurre la priorità del processo excel, trovando l'apertura del task manager, passando alla scheda "Dettagli" o "Processi" (a seconda della versione di Windows), facendo clic con il tasto destro del mouse sul processo excel.exe e selezionando un priorità inferiore. Ciò dovrebbe dare più tempo alla CPU per altri processi.


1
Non sembra funzionare: ho impostato la priorità su un valore molto basso e resta ancora indietro rispetto al computer.
learningAsIGo

1
Forse prova ad aumentare la priorità del tuo browser web o qualsiasi cosa tu stia cercando di fare allo stesso tempo? Ho trovato questa discussione sull'efficacia delle priorità in evoluzione .
Slithy Toves,

3
@SlithyToves: Non dovrebbe importare davvero. La priorità determina quale programma ottiene la CPU, se ci sono più candidati. L'impostazione di Excel su un valore molto basso significa che ottiene una fetta della CPU solo quando tutti gli altri programmi sono terminati. Tuttavia, quando Excel fa ottenere una fetta della CPU, esso non rinunciare a quella fetta. Perderà solo la concorrenza per il prossimo intervallo di tempo della CPU.
Salterio

3

Ci sono funzioni Sleep e Wait disponibili in VBA o tramite una dichiarazione. Tuttavia, la "regola empirica troppo semplicistica" non è mai usare Sleep (). (google "" non usare mai sleep () "programmazione")

Pagina doc per Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Si noti che Sleep and Wait causerà la mancata risposta di Excel per la durata specificata e ciò può causare "rotture dei treni" della fascia oraria.

Se il tuo calcolo prevede un ciclo di qualche tipo, un modo per gestirlo per il tuo scopo specifico (perdere il tempo di calcolo per la disponibilità della CPU) è quello di creare una tua speciale funzione di attesa che, ad esempio, esegue il loop DoEvents () per 1 secondo e quindi ritorna.

DoEvents in pratica dice al tuo codice / interprete di rinunciare a tempo per il sistema operativo ecc. Ciò causerà sicuramente più tempo per il codice. Potrebbe anche consentire di modificare il foglio di lavoro mentre è in corso il calcolo, quindi la tua distanza potrebbe variare. Test.

Vedi, ad esempio, https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba



0

Ho avuto lo stesso problema quando il mio laptop aveva 4 GB di memoria. Non appena l'ho aggiornato a 16 GB, il problema si è fermato. Solo un'altra possibile soluzione.


0

Aggiungi le seguenti 2 righe da qualche parte vicino all'inizio della tua macro:

'Turn off screen updating

 Application.ScreenUpdating = False

E queste 2 righe verso la fine:

'Turn screen updating back on

 Application.ScreenUpdating = True

Avrà quindi meno lavoro da fare mentre fai qualcos'altro.


-2

Se stai usando un ufficio 32bi in un sistema operativo a 64 bit, dovresti usare questa app: http://www.ntcore.com/4gb_patch.php

Questa app consentirà a Excel o qualsiasi altro ufficio a 32 bit di utilizzare mo


La domanda riguarda la limitazione della CPU, la tua risposta è l'attivazione di AWE su app che probabilmente non trarranno vantaggio nemmeno da AWE.
Martheen Cahya Paulo,

-5

Usa OpenOffice o LibreOffice: il suo potere di scripting è molto più efficace di quello di MS, e puoi letteralmente avere un "throttle" nei tuoi calcoli.

EDIT: Perché downvote? dai un'occhiata al manuale e guarda tu stesso. Puoi convertire i tuoi calcoli in Java e andare bene con tutta la potenza di limitazione della JVM, ad esempio.


3
Non ho espresso il mio voto negativo, ma suppongo che sia perché hai proposto una soluzione alternativa anziché una soluzione alla domanda molto diretta posta nell'OP: "Esiste un modo per limitare la quantità di utilizzo della CPU a cui Excel ha accesso durante l'esecuzione? "
Monkpit,

@Monkpit la mia storia con OpenOffice è partita da un problema simile, il porting ha richiesto circa una settimana per tutti i documenti che avevamo, ma dopo che ho espresso un'opinione, non userò mai più MS Office.
Alexey Vesnin,

OpenOffice è profondamente superiore a Office per il motivo che il 99% delle persone utilizzerà Office su Libre, quindi gli sviluppatori (probabilmente come questo tipo). Ecco perché ho effettuato il downgrade.
Thomas Shera,

@ThomasShera Beh, non riesco proprio a capire - perché per così tanti anni i ragazzi di Microsoft non possono semplicemente sistemare le cose ? No, non sono necessarie nuove cose, nessun componente aggiuntivo - fai semplicemente funzionare il tuo prodotto ...
Alexey Vesnin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.