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