............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

Agilizar comparar valores de dos columnas

Ver el tema anterior Ver el tema siguiente Ir abajo

Agilizar comparar valores de dos columnas

Mensaje por primpal el Mar Feb 01, 2011 6:43 am

Buenos días.
Primeramente decir que apenas estoy iniciandome en macros y por tanto pedir disculpas si lo que pido no se puede o debe hacer.

Tengo un proyecto que estoy realizando y debo comparar los valores de dos columnas en una hoja y presentar el resultado en otra hoja.
Lo tengo resuelto con una instrucion for pero por la cantidad de datos se me ralentiza un poco(bastante para mi) cada vez que cambio de hoja en el proyecto, o llamo al modulo para ejecutarlo. Ademas de que en el proyecto se visualiza la ejecucion a pesar de Application.ScreenUpdating = False.

Solicito vuestra ayuda para mejorar/agilizar el codigo.

Agradeceros la ayuda que podais darme.
Saludos.
Pd:Adjunto parte de archivo.



primpal

Masculino Cantidad de envíos : 10
Edad : 56
Ciudad - Pais : Madrid - Esàña
Version de Excel : 2003
Fecha de inscripción : 19/11/2010

Volver arriba Ir abajo

Re: Agilizar comparar valores de dos columnas

Mensaje por moises melgar el Mar Feb 01, 2011 1:07 pm

Voy a Checar que pasa con tu archivo... pero por el momento no lo checare lo hare despues del trabajo ya que tengo muchos pendientes si puedo me dare un tiempo a la hora de comer pero es mas seguro que suba mi comentario mañana

Imagino que algun otro usuario ya checo y pueda entregar resultados mas rapidos, de todos modos mañana comento lo que encontre.
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 526
Edad : 28
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Agilizar comparar valores de dos columnas

Mensaje por primpal el Miér Feb 02, 2011 6:28 am

Gracias por tu interes.

Salu2.

primpal

Masculino Cantidad de envíos : 10
Edad : 56
Ciudad - Pais : Madrid - Esàña
Version de Excel : 2003
Fecha de inscripción : 19/11/2010

Volver arriba Ir abajo

Re: Agilizar comparar valores de dos columnas

Mensaje por GalileoGali el Miér Feb 02, 2011 7:57 am

En el Módulo Thisworkbook
Código:
Private Sub Workbook_Open()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
sh.Protect Password:="1234", userinterfaceonly:=True
Next sh
ActiveWorkbook.UpdateLinks = xlUpdateLinksAlways
'Application.Visible = False
On Error Resume Next
Call Buscar_MINIMOS
'Application.Visible = True
End Sub

I) Analizar la verdadera necesidad del evento WorkSheet_Activate
es decir :¿siempre tiene que activarse? no puede regularse con un simple boton la ejecucion de Buscar? Minimos, que ya se hace
1) al abrir el Archivo (Workbook_Open)
2) Cada vez que se correr la Macro, la llamada a Hoja8.select, activa WorkSheet_Activate, que activa la macro, donde esta hoja8.select que activa Worksheet_Activate, esto es un Loop infinito. Conclusion: en tu criterio, queda o no queda la Wksh_Act?

II) qué agrega Application.Visible = True/False ???
un pestañeo?. Lo saqué porque no encuentro razones para mantener ese recurso

tu macro en el Modulo correspondiente

Código:
Sub Buscar_MINIMOS()
Application.ScreenUpdating = False
On Error Resume Next

Hoja8.Range("D17:F1000").ClearContents
Dim i As Integer, j As Integer, final As Integer
'Sheets("INGREDIENTES").Select
 j = 17
 i = 2
 For i = 2 To 1000
    If Sheet1.Cells(i, 3) = "" Then
        final = i - 1
        Exit For
    End If
    Next
Application.Calculation = xlCalculationManual
 For i = 2 To final
    If Sheet1.Cells(i, 4).Value < Sheet1.Cells(i, 5).Value Then
        Hoja8.Cells(j, 4).Value = Sheet1.Cells(i, 3).Value
        Hoja8.Cells(j, 6).Value = Sheet1.Cells(i, 4).Value
        j = j + 1
    End If
 Next
 Application.Calculation = xlCalculationAutomatic
 'MsgBox "  minimoooo", vbOKOnly + vbInformation, "  **  min"
'ActiveSheet.Protect "1234"
End Sub

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Agilizar comparar valores de dos columnas

Mensaje por primpal el Miér Feb 02, 2011 8:53 am

Muchas gracias por tu analisis GalileoGali.

En mi proyecto, cuando desde otras hojas(userform) actualizo la Sheet1 y despues vuelvo a la Hoja8, necesitaba ver si habia cambios en los minimos, por eso el evento Activate.

Tus modificaciones funcionan a la perfeccion con lo que buscaba,..... pero intentando conocer algo mas:

Elimino de tu codigo para ThisWorksbook
'Dim sh As Worksheet
'For Each sh In ActiveWorkbook.Worksheets
'sh.Protect Password:="1234", userinterfaceonly:=True
'Next sh
(pues no necesito proteger todas las hojas) y, ya no me actualiza cuando paso de una hoja a otra ?????

Tampoco acabo de asimilar el porque de:
Application.Calculation = xlCalculationManual

En cualquier caso, muchas gracias por la atencion y solucion aportada . Funciona de acuerdo a lo buscado.

Salu2.



primpal

Masculino Cantidad de envíos : 10
Edad : 56
Ciudad - Pais : Madrid - Esàña
Version de Excel : 2003
Fecha de inscripción : 19/11/2010

Volver arriba Ir abajo

Re: Agilizar comparar valores de dos columnas

Mensaje por GalileoGali el Miér Feb 02, 2011 12:43 pm

Si resulta útil pues deja el evento Activate

Thisworkbook
Puedes modificar la secccion
que citas por esto
Hojaqueseprotege.Protect Password:="1234", userinterfaceonly:=True

Se nota que VBA ya has empezado a manejarlo: preguntop entonces:
¿Viste la ayuda de VBA para Calculation y Protect userinterfaceonly?

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Agilizar comparar valores de dos columnas

Mensaje por primpal el Miér Feb 02, 2011 1:31 pm

He intentado buscarlo en la ayuda para VB como dices pero "No se encuentra".

Repito Maestro, Gracias por la atención.
Salu2.



primpal

Masculino Cantidad de envíos : 10
Edad : 56
Ciudad - Pais : Madrid - Esàña
Version de Excel : 2003
Fecha de inscripción : 19/11/2010

Volver arriba Ir abajo

Re: Agilizar comparar valores de dos columnas

Mensaje por moises melgar el Miér Feb 02, 2011 2:01 pm

Hola gali siempre tan util ahora muestro la mia
Primero determine cual era la necesidad y aunque me salga del tema nos limitamos en el primer bucle hasta 1000 valores y pense y si hay mas de 1000 valores por lo que decidi rehacer la macro en vez de
Código:
Range("D17:F1000").ClearContents
cambie por:
Código:
Hoja8.Range("D17:F" & Hoja8.Range("D17").End(xlDown).Row).ClearContents

aqui determino el nuero de fila de la ultima celda con:
Hoja8.Range("D17").End(xlDown).Row
y las uno a "D17:F" con "&"
y todo dentro de range().ClearContents

ok
de ahi decidi que aunque me gusten mucho los bucles.... mejor agrege una columna dentro de la hoja ingredientes donde coloque las diferencias y use formato condicional para los que sean menores a cero

luego la macro consiste en Filtrar y copiar los valores con criterio.

PD para localizar la ultima celda se puede usar:
Código:
Sheet1.Range("D" & Sheet1.Rows.Count).End(xlUp).##intruccion##(select,copy,activate,paste,ClearContents,etc)

donde Sheet1.Rows.Count ' numero de filas de la hoja de calculo Sheet1
Sheet1.Range("D" & Sheet1.Rows.Count) 'representa ultima celda de la columna D por eso es la "D"
al ser seguido por .End(xlUp) eso hace que excel use Ctrl + arriba para ir a la siguiente celda no vacia ( la cual seria la ultima con dato)

recuerden no confudir:
.end() para excel seria Ctrl + tecla direccional
.Offset(filas,columnas) para excel seria dezplazamineto a cuantas columnas(+ es la derecha, - isquierda) y cuantas filas (+ hacia abajo,-hacia arriba) se desea desplazar de la celda de referencia.
Cuidense foro
adjunto archivo
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 526
Edad : 28
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Agilizar comparar valores de dos columnas

Mensaje por primpal el Miér Feb 02, 2011 2:12 pm

Muchas gracias por tu solucion y explicacion Moises(asi, paso a paso vamos aprendiendo).
Tu archivo me da "Error en el metodo Autofilter de la clase Range".

Yo uso v2003 y tu archivo es de v2007(creo)¿Puede ser por eso?.
Aun asi entiendo lo que me has enviado .
Repito muchas Thanks , Masters.

Salu2.

primpal

Masculino Cantidad de envíos : 10
Edad : 56
Ciudad - Pais : Madrid - Esàña
Version de Excel : 2003
Fecha de inscripción : 19/11/2010

Volver arriba Ir abajo

Re: Agilizar comparar valores de dos columnas

Mensaje por moises melgar el Miér Feb 02, 2011 2:28 pm

ahh 2003, disculpa no me fije en la version de excel que usas
la mia es 2007, dejame modificarla para que se pueda usar en 2003
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 526
Edad : 28
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Agilizar comparar valores de dos columnas

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.