Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/10/2010, 09:24
andres265
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 13 años, 6 meses
Puntos: 0
buscar máximos en una macro mediante "cells.find" excel 2007

Hola a todos (as),

Estoy elaborando una macro (aclaro que no soy muy conocedor del tema) que busca los cinco valores máximos (en formato moneda) de una lista, copia ese valor y las dos celdas a la izquierda del mismo y los pega en otra hoja del mismo libro.

La búsqueda de de los máximos la hago mediante la función "LARGE" así ya tengo un valor específico a buscar y poder copiar la información adicional que necesito. Como tengo que repetir este proceso 5 veces entonces desarrollé un pequeño procedimiento al que le paso, cada vez, el máximo correspondiente (valorMáximo1, valorMáximo2, etc.), la hoja donde debe buscarlo y la hoja donde debe pegarlo. Sin embargo tengo dos problemas:

1. Los valores vienen en formato moneda, el máximo correspondiente lo identifica bien pero cuando voy a buscar el valor con "cells.find" no lo encuentra. Para resolver esto decidí cambiar el formato de los valores a "General" al iniciar la macro, con lo cual funciona bien. ¿Hay alguna forma de hacer la búsqueda independiente del formato?. Intenté con "SearchFormat = False" pero si dejo el formato en "moneda" (o cualquier otro) no encuentra el dato.

2. La invocación del procedimiento "pegarValores" funciona bien para los 4 primeros máximos, pero al buscar el quinto no lo encuentra (aunque sí existe y lo identifica) y no tengo la más mínima idea de por qué.

Este es el código que estoy empleando:

Código:
'Si no se asigna el formato "General" a los datos no encuentra nada
    Selection.NumberFormat = "General"
    Set rangoValores = Selection
    
    valorMaximo1 = Application.WorksheetFunction.Large(rangoValores, 1)
    Call pegarValores(valorMaximo1, "5+ 5-", "B3")
    
    Sheets("Facturacion").Select
    Range("A1").Select
    valorMaximo2 = Application.WorksheetFunction.Large(rangoValores, 2)
    Call pegarValores(valorMaximo2, "5+ 5-", "B4")
    
    Sheets("Facturacion").Select
    Range("A1").Select
    valorMaximo3 = Application.WorksheetFunction.Large(rangoValores, 3)
    Call pegarValores(valorMaximo3, "5+ 5-", "B5")
    
    Sheets("Facturacion").Select
    Range("A1").Select
    valorMaximo4 = Application.WorksheetFunction.Large(rangoValores, 4)
    Call pegarValores(valorMaximo4, "5+ 5-", "B6")
    
'Hasta aquí funciona bien. En esta última parte no encuentra el valor
    Sheets("Facturacion").Select
    Range("A1").Select
    valorMaximo5 = Application.WorksheetFunction.Large(rangoValores, 5)
    Call pegarValores(valorMaximo5, "5+ 5-", "B7")
    
End Sub

Private Sub pegarValores(valorBuscado As Variant, hojaPegar As String, celdaInicial As String)

    Cells.Find(What:=valorBuscado, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, _
            SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Select
    Range(Selection, Selection.Offset(0, -2)).Copy
    Sheets(hojaPegar).Select
    Range(celdaInicial).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, _
        Transpose:=False
    Application.CutCopyMode = False

End Sub
De antemano mil gracias por su ayuda,

Andrés