Limite el uso de CPU de Excel


31

¿Hay alguna forma de limitar la cantidad de uso de CPU a la que Excel tiene acceso cuando se ejecuta? Tengo un script VBA que calcula un montón de fórmulas de matriz gigante. El cálculo completo lleva unos 20 minutos usando el 100% de mi CPU, pero no puedo usar mi máquina durante el tiempo y prefiero que se ejecute en segundo plano con un uso de CPU del 50% para poder continuar haciendo otras cosas. ¿Alguna sugerencia?

Mi sistema operativo es Windows 7 Enterprise de 64 bits y la versión de Excel es 2007-32 bit


1
Windows? ¿Cual version?
DavidPostill

Windows 7. Lo agregaré a la publicación
learningAsIGo

8
¿Obtener una CPU multinúcleo? Si ya tiene uno (¿quién no?) Y Excel está utilizando todos los núcleos (que no sabía que Excel podría hacer), configure su afinidad en el Administrador de tareas.
user253751

2
Esto no responde la pregunta, pero asegúrese de apagar las actualizaciones de la ventana antes de comenzar a calcular y actualizar miles de celdas. Si tiene gráficos, apáguelos también. VBA es lento, pero cuando es realmente lento, generalmente es uno o ambos de los culpables.
Coxy

1
@cat: No, un uso de CPU del 100% en Windows Task Manager significa 100% en todos los procesadores lógicos. Si solo se llena un núcleo, será del 25% (en un núcleo dual común con hiperprocesamiento) o ~ 36% (refuerzo turbo).
Martheen Cahya Paulo

Respuestas:


54

Si se llama a una función VBA desde varias fórmulas o si su secuencia de comandos genera o fuerza el recálculo de varias fórmulas, esto definitivamente debería hacer uso de la función de cálculo de subprocesos múltiples de Excel. Respectivamente, esto ejecutaría múltiples instancias de su función VBA para cada fórmula, o volvería a calcular varias celdas simultáneamente mientras su script vba se ejecuta en un solo hilo.

Puede limitar el número de hilos utilizados por Excel para recalcular fórmulas en Opciones de Excel ... Pestaña Avanzada ... sección Fórmulas.

ingrese la descripción de la imagen aquí


El sub VBA no es el problema, es la fórmula de matriz de Excel que genera el código VBA.
learningAsIGo

@learningAsIGo Correcto, simplifiqué mi respuesta. Háganos saber si establecer el número de hilos en 1 ayuda.
mtone

1
Esto parece haber hecho el truco. Lo configuré en 3 núcleos y alcanza un máximo del 75% de la CPU, lo que me deja mucho espacio para hacer otras cosas. ¡Gracias!
learningAsIGo

27

En lugar de reducir la prioridad, intente cambiar la afinidad en el Administrador de tareas. Si tiene más de 1 CPU, puede limitar la cantidad de CPU que usará Excel. Esto liberará a las otras CPU para trabajar en otras cosas.

Haga clic con el botón derecho en Excel en la pestaña Procesos y seleccione Establecer afinidad. Elija CPU (s) donde desea que se ejecute Excel.


3
Tenga en cuenta que, por afinidad, Windows considera que cada núcleo también es una CPU. (Entonces esto funcionaría si tiene un núcleo dual o cuádruple).
jpmc26

1
Bueno, si hablamos específicamente de núcleos, ¿por qué no subprocesos HyperThreading? También son CPU lógicas distintas. Es decir, una CPU de cuatro núcleos con HT tendrá 8 CPU lógicas.
Ruslan

Hago esto todo el tiempo cuando ejecuto HandBrake y solo quiero navegar por Internet durante una hora sin pausar o detener el proceso de transcodificación. Creo que valdría la pena mencionar que después de algún tiempo los núcleos vuelven a lanzarse al programa y la afinidad se "restablece", al menos me sucede con el freno de mano.
MonkeyZeus

2
@MonkeyZeus Por lo general, la afinidad no se guarda cuando sale un proceso. Solo se aplica al proceso que se está ejecutando actualmente. Podría ser que HandBrake generara nuevos procesos en sí o que comenzaras otros nuevos.
jpmc26

@ jpmc26 ¡Es bueno saberlo! Definitivamente no comencé un nuevo proceso por mí mismo, por lo que debe estar generando por sí solo.
MonkeyZeus

7

Puede intentar reducir la prioridad del proceso de Excel, abriendo el administrador de tareas, cambiando a la pestaña "Detalles" o "Procesos" (dependiendo de su versión de Windows), haciendo clic derecho en el proceso de excel.exe y seleccionando un menor prioridad Esto debería dar más tiempo de CPU a otros procesos.


1
Parece que no funciona: establecí la prioridad en muy baja y todavía se retrasa la computadora.
learningAsIGo

1
¿Quizás intente aumentar la prioridad de su navegador web, o lo que sea que intente hacer al mismo tiempo? Encontré esta discusión sobre cuán efectivo es cambiar las prioridades .
Slithy Toves

3
@SlithyToves: Eso realmente no debería importar. La prioridad determina qué programa obtiene la CPU, si hay múltiples candidatos. Establecer Excel en muy bajo significa que solo obtiene un segmento de CPU cuando todos los demás programas están terminados. Sin embargo, cuando Excel hace obtener una tajada de la CPU, no va a renunciar a esa rebanada. Simplemente perderá la competencia para el próximo segmento de tiempo de CPU.
MSalters

3

Hay funciones de suspensión y espera disponibles en VBA o mediante una declaración. Sin embargo, la "regla general demasiado simplista" es nunca usar Sleep (). (google '"nunca use la programación sleep ()")

Página del documento para Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Tenga en cuenta que Dormir y esperar hará que Excel deje de responder durante el tiempo que especifique y esto puede causar "naufragios de trenes".

Si su cálculo implica un ciclo de algún tipo, entonces una forma de manejar esto para su propósito específico (perder el tiempo de cálculo para la disponibilidad de la CPU) es hacer una función especial de espera propia que, por ejemplo, haga bucles DoEvents () durante 1 segundo y Luego regresa.

DoEvents básicamente le dice a su código / intérprete que deje el tiempo para el sistema operativo, etc. Definitivamente hará que su código tarde más. También puede permitirle editar la hoja de trabajo mientras se realiza el cálculo, por lo que su kilometraje puede variar. Prueba.

Ver, por ejemplo, https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba



0

Tuve el mismo problema cuando mi computadora portátil tenía 4 GB de memoria. Tan pronto como lo actualicé a 16 GB, el problema se detuvo. Solo otra posible solución.


0

Agregue las siguientes 2 líneas en algún lugar cerca del comienzo de su macro:

'Turn off screen updating

 Application.ScreenUpdating = False

Y estas 2 líneas cerca del final:

'Turn screen updating back on

 Application.ScreenUpdating = True

Entonces tendrá menos trabajo que hacer mientras haces otra cosa.


-2

Si está utilizando una oficina de 32bi en un sistema operativo de 64 bits, debe usar esta aplicación: http://www.ntcore.com/4gb_patch.php

Esta aplicación permitirá que Excel o cualquier otra oficina de 32 bits use mo


La pregunta es sobre la limitación de la CPU, su respuesta es sobre la activación de AWE en aplicaciones que probablemente ni siquiera aprovecharán AWE.
Martheen Cahya Paulo

-5

Use OpenOffice o LibreOffice: su poder de scripting es mucho más efectivo que el de MS, y literalmente puede tener un "acelerador" en sus cálculos.

EDITAR: ¿Por qué votar a favor? eche un vistazo al manual y compruébelo usted mismo. Puede convertir sus cálculos a Java y estar bien con todo el poder de aceleración de la JVM, por ejemplo.


3
No voté en contra, pero supongo que es porque usted propuso una solución alternativa en lugar de una solución a la pregunta directa formulada en el OP: "¿Hay alguna forma de limitar la cantidad de uso de CPU a la que Excel tiene acceso cuando se ejecuta? "
Monkpit

@Monkpit mi historia con OpenOffice comenzó a partir de un problema similar, la portación tardó aproximadamente una semana para todos los documentos que teníamos, pero después de eso he emitido una opinión, que nunca volveré a usar MS Office.
Alexey Vesnin

OpenOffice es profundamente superior a Office por la razón de que el 99% de las personas usarán Office sobre Libre, por lo que los desarrolladores (probablemente como este tipo). Por eso voté en contra.
Thomas Shera

@ThomasShera Bueno, no puedo entender nada, ¿ por qué durante tantos años, los chicos de Microsoft no pueden simplemente arreglar las cosas ? No, no se necesitan cosas nuevas, ni complementos, solo haga que su producto realmente funcione ...
Alexey Vesnin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.