Buscar ultimo valor de una columna si cumple una condición

Tengo el siguiente código, el cual busca el último valor de una columna (columna 3 de la hoja ingresos), le añade uno y me lo pone en otra hoja:

Sub Factura_asignar_numero()
Dim ws As Worksheet
Dim UltimaFila, UltimoNumeroFta, NuevoNumeroFta As Integer
Set ws = Sheets("INGRESOS")
With ws
UltimaFila = .Cells(10000, 3).End(xlUp).Row
If UltimaFila > 1 Then UltimoNumeroFta = .Cells(UltimaFila, 3)
End With
NuevoNumeroFta = UltimoNumeroFta + 1
Range("G4") = NuevoNumeroFta
End Sub

Lo que me gustaría ahora, sería añadir otra condición... Y sería que sumara +1 si otra columna de la hoja ingresos es igual a un valor... Sino, que siguiera buscando... La idea es añadir una nueva variable:

Dim NuevoNum As Integer

NuevoNum = Range("G5")

Este G5, de entrada sé que pueden ser 001 o 002, pero puede ser diferente en el futuro...

Como se ve, son números correlativos para 001 y otros números correlativos para 002...

Si la condición de la siguiente columna fuera 001, tendría que añadir un 7 (a 6 que es el último valor le añadimos +1)... Por el contrario, si la condición de la siguiente columna fuera 002, tendría que añadir un 3 (a 2 que es el último valor de 002 le añadimos un +1)

No sé si me he explicado suficientemente... Pero sería añadir la nueva condición para sumar el número, sino, que siguiera buscando...

Respuesta
1

A la primera leída, sí, "suena" medio confuso pero ya volviendo a leer, y separando (mentalmente) tu primera macro de tu nuevo dilema/problema/pedido, algo se entiende. Y digo "nuevo" porque, de lo que se entiende, ya no buscarás (solo) el último valor de la última fila llena.

Entonces, de lo que se entiende, colocaras un criterio en la celda "G5" que puede ser "001" o "002" (por ahora), y hay que, igual, buscar el último y tomar su valor de la columna izquierda ¿es así?. Tomando tu ejemplo, con "001", debería "encontrar" el 6 y con el "002" el 2 ¿cierto?

Confirma

Abraham Valencia

Hola Abraham,

Muchas gracias por tu respuesta.

Exacto... ya no buscaré (solo) el último valor de la última fila llena.

Exacto, debería buscar el último "001" o el último "002" (o cualquier valor que pongamos en "G5") de una columna y retornarnos el valor de la columna de al lado... 

Como dices, si en G5 ponemos "001" debería retornar el 6 y si en G5 ponemos "002" debería retornar el 2.

Gracias por todo.

Un saludo.

Usa algo así:

Sub BuscardesdeAbajo()
Dim ValorBuscado As String, CeldaEncontrada As String, Segundacelda As String
Dim ValorFinal As Long
Dim Buscar As Range
ValorBuscado = Sheets("Hoja2").Range("G5")
With Sheets("Hoja3").Range("B1:B10")
Set Buscar = .Find(ValorBuscado, , , , , xlPrevious)
If Not Buscar Is Nothing Then
Let CeldaEncontrada = Buscar.Address
Let Segundacelda = Sheets("Hoja3").Range(CeldaEncontrada).Offset(0, -1).Address
Let ValorFinal = Sheets("Hoja3").Range(Segundacelda).Value
MsgBox "El valor buscado está en la celda: " & CeldaEncontrada
MsgBox "El valor de la celda de la lado " & Segundacelda & " es " & ValorFinal
Else
MsgBox "No existe el dato"
End If
End With
End Sub

Los "MsgBox" son como para que quede claro que valor halla cada variable. Ya tu úsalas como te convenga y obvio reemplaza tu rango y los nombres de las hojas a tu necesidad.

Comentas

Abraham Valencia

Hola Abraham...

Muchas gracias por toda tu ayuda!!! Lo he probado en un excel básico y funciona perfectamente lo que pretendía hacer... ahora lo acabaré de integrar en mi excel...

Y todo esto después de la explicación inicial que había hecho ;-)

De nuevo, gracias por todo.

Un saludo.

Que bueno que te sirvió, de nada y, feliz año :)

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas