RE:Generar albaranes automaticamente
Hola JuanC,
Un albarán es el documento que acompaña una entrega de producto, sirve como justificante de la entrega y especifica qué producto y qué cantidad se entrega. A veces también se indica el precio e importe.
A partir del albarán se realizan las facturas.
En el caso que nos ocupa, es otro tema ya repetido un BUSCARV con repetición.
Todas las líneas del albarán tienen el mismo código de albarán, cuando haces un BUSCARV siempre trae el primer código que encuentra y se "olvida" del resto.
Una posible solución es crear un código adicional que numere las líneas del albarán de la forma NUMALBARAN-X
Si en A2 tengo el Número de Albarán, en B2 puedo poner
=A2&"-"&CONTAR.SI(A$1:A2;A2)
Esta fórmula va muy bien para generar claves con su número de repetición, pero cuando pasa de cierta cantidad de líneas se vuelve muy lenta. Una solución es que se copie y peguen valores a medida que ya no se necesite el hacer cálculo de la línea del albarán y éste pueda ser fijo. También es conveniente mover la referencia de la celda A$1, de forma que sólo cuente las 10 ó 20 anteriores (si no son suficientes líneas se pueden poner todas las que se deseen).
Otra solución es usar la fúnción que dejé por ahí, BUSCARVREP pero, a veces, no funciona muy bien (ocurre cuando hay que realizar la búsqueda en otro libro). Adjunto el código
Function BuscarVRep(QueBuscar As Range, _
RangoRepetidos As Range, _
RangoDatos As Range, _
Columna As Integer)
' "QueBuscar" lo que estamos buscando, de lo que queremos devolver el valor
' igual que en buscarv.
' "RangoRepetidos" es el área donde esta incluido el QueBuscar donde
' observaremos el número de ocurrencia
' QueBuscar está en una celda incluida en este rango.
' "RangoRepetidos" es la matriz similar a la de buscarv
' "Columnas" es el indicador de Columnas, igual que en buscarv
Dim celdainicial As Range
For Each c In RangoRepetidos
If c.Value = QueBuscar.Value Then ocurrencia = ocurrencia + 1
If c.Address = QueBuscar.Address Then Exit For
Next
ColumnaInicial = RangoDatos.Column
FilaInicial = RangoDatos.Row
numerofilas = RangoDatos.Rows.Count
For Each Celda In Range(Cells(FilaInicial, ColumnaInicial).Address & ":" & Cells(FilaInicial + numerofilas - 1, ColumnaInicial).Address)
If Celda.Value = QueBuscar.Value Then nuevaocurrencia = nuevaocurrencia + 1
If nuevaocurrencia = ocurrencia Then
busquedafinal = Celda.Offset(0, Columna - 1).Value
Exit For
End If
Next
BuscarVRep = busquedafinal
End Function
Saludos