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:
De antemano mil gracias por su ayuda,'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
Andrés