Buscar y si no lo encuentra max+1

Hola!
Veras estoy haciendo una nueva aplicación y tengo esta parte de tabla:
                A B
1 Nº Reg. Componente
2 1 Lápiz
3 2 Boli
4 3 Papel
Y necesito que la columna de nº de registro vaya incrementándose si el componente no esta repetido. Es decir, cada componente tiene un numero de registro asociado y si meto el nombre del componente debe ponerme el numero anteriormente asociado si ya existe. Y si no existe incrementar uno al numero máximo de la columna de nº de registro.
Había pensado algo así pero no me funciona(fórmula que aparecería en A2):
=SI(BUSCAR(B2;B:B;B:B)=B2; BUSCAR(B2;B:B;A:A); MAX(A2:A4)+1).
Hay alguna manera de ehacerlo con fórmulas o seria más fácil con VBA
Muchas gracias!

1 Respuesta

Respuesta
1
Lo que hace la función es ir de arriba a abajo hasta la celda de antes y si encuentra el componente le pone el número de al lado
Public Function Componente(Celda_inicio As Range) As Integer
    Dim i As Integer
    Componente = 0
    Dim fila As Integer
    fila = Fila_Celda(Celda_inicio)   'La definición más abajo
    For i = 1 To fila - 1
        If (Hoja4.Cells(fila, 2) = Hoja4.Cells(i, 2)) Then   'Yo lo he hecho en la hoja4
            Componente = Hoja4.Cells(i, 1)
            Exit For 'Si lo encuentra se sale del bucle
        End If
    Next i
    If (Componente = 0) Then Componente = WorksheetFunction.Max(Range("A2:A" + CStr(fila - 1))) + 1 'Si no lo encuentra selecciona todos, he puesto A2 porque en la A1 está la cabecera, desde el A2, el primero, hasta la fila de arriba en donde estás, de ahí para saber la fila en donde estás
End Function
'Para saber en que fila estás
Public Function Fila_Celda(Celda As Range) As String
    Fila_Celda = DespuesDelimitador(Right(Celda.Address, Len(Celda.Address) - 1), "$")
End Function
Function DespuesDelimitador(texto As String, Delimitador As String) As String
    Dim i As Integer
    For i = 1 To Len(texto)
        If (Mid(texto, i + 1, 1) = Delimitador) Then
            DespuesDelimitador = Mid(texto, i + 2, Len(texto) - i + 2)
            Exit For
        End If
    Next i
    If (DespuesDelimitador = "") Then DespuesDelimitador = texto
End Function
Soy unn poco bastante pez en esto. Y no se como hacer para que una vez introducido el código cada vez que yo ponga algo en la columna B, me busque si coincide y si es así onga el numero correspondiente y sino sume uno al máximo. Vamos que eno se que eponer en la celda pa que se ejecute la macro.
Además me pone que debe ser sub() . no se me estoy volviendo loca
Aun así gracias por el código
Has de buscar la fórmula en la barra de fórmulas o si le das a fx, al lado de la barra, estaría en la categoría Definidas por el usuario, colócalas en un módulo porque si no no vas a poder utilizarlas.
El manejo es sencillo. Imagina que debajo de Papel pone otra vez Boli. Escribes Boli en la B5 y en la casilla A5 pones =Componente(B5) y ya te lo escribe. Si en B6 escribes otra vez Lápiz, lo que has de hacer es hacer un corta pega de la fórmula que has escrito en A5 y ya te lo hace o arrastrándola hacia abajo.
Muchas gracias. Me ha servido de mucho. Seguiré investigando en el grandioso mundo de excel, así que sintiéndolo mucho seguro que te vuelvo a preguntar;-)
Gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas