Академический Документы
Профессиональный Документы
Культура Документы
Paso a explicarlo nuevamente. (No hago video porque tengo mucho ruido
ambiental, y por ahi un señor se me delicó y me dijo que no editar esos baches
tales como que me suene el telefono era una falta de respeto...o sea: uno
encuentra cositeros por doquier)
Puedo montar una formulita en la celda B2 que me haga esa verificación. ¿Como?
....Pensando que si los consecutivos son correctos y no hay saltos en ellos, al ser
restados siempre deberían ser igual a uno.
Esto significa que podria escribir una formula tal como A3-A2=1
Observe:
Asi que basado en esto, puedo montar una formulita Si condicional, en la cual le
digo, que si esa operacion es verdadera, no diga nada, y si es falso, que me
coloque el texto "hay un salto en el consecutivo". Esa formulita, en la celda B2, se
escribe asi:
=SI(A3-A2=1;"";"hay un salto en el consecutivo")
Esta formula se puede mejorar, y que en el mismo texto nos indique cual es el
numero que falta, o el numero que se está saltando en la secuencia. Pero
tenemos el caso en que falte solo un numero, y el caso en el que falten por lo
menos dos numeros. Vamos de menos a más: Hagamos el primer caso, cuando
falta solo un numero, que es el caso del ejemplo, en el que vemos que falta el
numero 357893. ¿Como hacer que nos escriba automaticamente el numero que
hace falta?
Respuesta: concatenando el numero resultado de la operacion en el texto, en el
segundo argumento de la funcion, y dado que es una segunda operacion lógica,
anidamos un segundo sí en la parte que evalua si el caso no es verdadero, asi:
Ahora la formula en B2 es asi:
=SI(A3-A2=1;"";SI(A3-A2=2;"Falta el numero "&A2+1))
Observe que al final de la formula, termina en dos parentesis de cierre )), y que
hace falta el caso para cuando el resultado de esta segunda situacion sea falso,
es decir, la diferencia de los dos numeros es diferente a 2. Ya tenemos en el
primer Si, cuando la diferencia es 1; ya tenemos cuando la diferencia es 2. Asi que
si tuvieramos un caso en el que la diferencia es mas de 2, nos arrojaría un
FALSO:
Mire que 357899 menos 357896 es 3, y este caso no está contemplado, sin
embargo es el bloque que vá en el segundo argumento del segundo si. Como no
se le ha indicado nada, ella misma nos dice que el resultado es falso. Mire;
Asi que solo bastaría con completar la lógica para cuando el segundo argumento
sea falso, y este es, para cuando la diferencia sea mayor a 2.
Observe en esta segunda imagen como nos funciona perfecto: Aqui tenemos el
caso de 3 numeros faltantes y la formula nos arroja con texto y todo, los numeros
que faltan.
Pero las cosas se pueden complicar más en la vida real. Podríamos tener un salto
de número que en realidad es el inicio de una nueva secuencia bajo otro tipo de
comprobante, por ejemplo:
Del 357899, cambia al 57898, por la razón de que ya corresponde a Codigo de
Comprobante diferente.
Este archivo y ejemplos aqui se los dejo, esta es la imagen, y debajo está el
enlace hacia mi carpeta de dropbox.
Clic aqui para descargar el archivo: Ojo, dale DESCARGAR, no Guardar. Luego
abres Excel y activas las macros.
http://www.mediafire.com/download/e50z7edzq436e42/ExcelAudiConsecutivos.xls
Este tema se puede trabajar con macros y con tablas dinámicas, otro dia les
muestro como se hace.
Saludos, y muchos éxitos.
Hace más de un mes que publique el post mas reciente del blog, así que ya es
hora de publicar uno nuevo y como estoy recien desempacadito de unas bien
merecidas vacaciones desde una paradisiaca playa vengo inspirado, espero lo
noten (jajaja).
Estaré publicando una serie de artículos sobre ( UDF’S ) que quiere decir User
Defined Formulas y que traducido a cristiano quiere decir fórmulas definidas por
el usuario.
Tal vez ustedes se han de estar preguntando para qué demonios sirven o con que
se comen estas mentadas UDF’s, tranquilos no desesperen que para allá voy….
Las UDF’s como les explique anteriormente son fórmulas, pero ojo, no son las
fórmulas estándar que conocemos de Excel entiéndase esto como (SUMA,
SUMAR.SI, BUSCARV, etc, etc, etc ), la diferencia es en que estas fórmulas son
programadas en nuestro editor de Visual Basic del Excel y nos sirven para
extender la funcionalidad de las fórmulas ya existentes o bien para crear nuevas
fórmulas o cálculos que no podríamos hacer con las formulas nativas existentes
de Excel o si se podrían hacer pero requeriría mas cerebro de nuestra parte para
anidar varias formulas estándar y llegar al mismo resultado.
Después del breviario, les presento una fórmula UDF que le he bautizado
como COMPLEMENTO,para que se vayan dando una idea de lo que estas son
capaces de hacer. Bueno si les es útil a alguno de ustedes podrán bautizarla como
quieran ya que tendrán el código y podrán modificarlo a su antojo ( bueno hasta
que registre el Copyright… después tendrán que pagarme derechos de autor, ja
jaja ).
Bueno ahora sí a lo que te truje chencha, lo que hace esta función es algo muy
simple pero a veces complicado de determinarlo cuando se tiene infinidad de
registros, por ejemplo tenemos los números 1,2,3,4,5,8,10,11,15,20,25,27, etc,
etc, etc, si son observadores ya han de haber notado que los numero no son
consecutivos, que del 5 se salta al 8 y del 8 al 10 o sea que hacen falta los
números 6, 7 y 9 . Supongamos que estos números son los folios de facturación
de alguna empresa y los folios faltantes son las facturas canceladas, esto está bien
si la información se requiere así, pero resulta que a alguien se le ocurre la
grandiosa idea de que quiere saber cuáles folios están cancelados y para acabarla
de amolar resulta que tenemos un software administrativo medio chafa que no
nos da ningún reporte de folios cancelados (estamos suponiendo OK, no creo
que esto suceda ) . Bueno creo que ya me debieron haber entendido cual es la
finalidad que busco con esta fórmula o por si no me han captado todavía, es el
que me identifique los números faltantes de folios, fácil no.
Pues aunque parezca fácil a uno que otro todavía nos complican la vida cuando
nos piden esta información, así que si estas en este supuesto esta función te va a
caer como una bendición. Bueno ya he dicho bastante así que chan chan chan,
les presento la fórmula COMPLEMENTO
Ahora probablemente se han de estar preguntando, ¡¡¡ y ahora como funciona
esto !!! , pues funciona de una forma muy sencilla, solamente tienes que pegar el
Código en un módulo estándar. ¿En dónde pego el código VBA?
?
1
2 Option Explicit
3
4 Function COMPLEMENTO(Rango)
5 Dim obj, i As Integer, c
6 Set obj = CreateObject("Scripting.Dictionary")
7
For i = Application.Min(Rango) To Application.Max(Rango)
8 If IsError(Application.Match(i, Rango, 0)) Then obj(i) = i
9 Next i
10
11 Dim b()
12 ReDim b(1 To Rango.Count)
13 i = 1
For Each c In obj.items
14 b(i) = c
15 i = i + 1
16 Next
17
18 COMPLEMENTO = Application.Transpose(b)
19
Set obj = Nothing
20
21
End Function
22
23
Y después de haber pegado el código en el módulo ve a la hoja de Excel y la
llamas como cualquier otra función, únicamente aquí la diferencia es que la
debes de llamar como una función matricial, esto es que debes de presionar
Ctrl+Shift+Enter al finalizar la fórmula, por ejemplo:
Selecciona el rango C2:C15 e ingresa la fórmula COMPLEMENTO(A2:A15)
antes de dar Enter debes de presionar las teclas Ctrl+Shift+Enter para que la
fórmula sea identificada como matricial.
Y el resultado final debe de quedar como en la siguiente imagen.
Aquí les dejo el link de descarga del archivo de Excel. Descargar Ejemplo
Cualquier duda, comentan.
BUSCARV con valores
repetidos en Excel
La función BUSCARV nos permite encontrar un valor dentro de un rango
de celdas y aunque el valor buscado se repita varias veces, la función
BUSCARV siempre nos devolverá solo la primera ocurrencia encontrada.
A veces queremos utilizar la función BUSCARV con valores repetidos
en Excel para encontrar la enésima ocurrencia de algún valor, pero eso
no sucederá automáticamente.
=BUSCARV(F1&F2,B2:C10,2,FALSO)
La segunda opción que podemos utilizar es una fórmula matricial que nos
permita identificar aquellos valores dentro del rango que contengan el
valor buscado y obtener el número de fila que ocupan dentro de la hoja.
Ya que esta es una fórmula de mayor complejidad que la anterior, la
desarrollaremos paso a paso para dejar en claro su funcionamiento.
=SI(A2:A10=E1, FILA(A2:A10))
Esto nos indica que es la fila 8 de nuestra hoja la que contiene la tercera
ocurrencia del nombre Carlos dentro del rango de búsqueda. Para
resolver el problema solamente debemos obtener la fila 8 de la columna
de Edades, así que puedo utilizar la función INDIRECTO para obtener el
valor de dicha celda en base al resultado de la fórmula anterior.
3
Dim cont As Integer
4
5
BUSCAROCURRENCIA = "No existe"
6
7
For i = 1 To matriz_buscar.Rows.Count
8
If matriz_buscar.Cells(i, 1).Value = valor_buscado Then
9
cont = cont + 1
10 If cont = ocurrencia Then
11 BUSCAROCURRENCIA = matriz_buscar.Cells(i, indicador_columna).Value
12 Exit Function
End If
13
End If
14
Next
15
16
End Function
17
18
'por luismondelo
Range("a6").Select
c = 1
Else
ActiveCell.Offset(1, 0).Select
End If
c = c + 1
Loop
End Sub
Con esta macro te pone en la columna de la derecha de tu correlativo, los números que
falten.
Sub correlativos()
'Por.DAM
c = "A"
n = 1
d = Columns("A").Column + 1
Columns(d).Clear
k = n
ini = Cells(i, c) + 1
k = k + 1
End If
ini = ini + 1
Next
Next
End Sub
Sub comprobar_correlativos()
'Ocultamos el prodecimiento
Application.ScreenUpdating = False
'Nos situamos en la primera celda
Range("A1").Select
'ahora recorreremos la columna,
'y nos pararemos cuando encuentre una fila vacía
Do While Not IsEmpty(ActiveCell)
'Miramos si el dato de esa fila, restándole
'1, nos da el valor de la fila anterior. En caso
'contrario, mostraremos un mensaje en la columna de la
'derecha (en una celda adyacente).
'¡Ojo!. Si en la columna de la derecha tienes datos, entonces
'cambia la linea donde pone: ActiveCell.Offset(0, 1) = "Factura no
correlativa"
'por esta: ActiveCell.Offset(0, 2) = "Factura no correlativa".
'Fíjate que ha cambiado el 1 por el 2. Eso quiere decir que 2
columnas
'más a la derecha escribirá ese texto. Si dos columnas a la derecha
'sigues teniendo datos, pon un número de columna que esté libre (3,
4, 10...)
If ActiveCell.Row > 1 Then
If ActiveCell - ActiveCell.Offset(-1, 0) > 1 Then
ActiveCell.Offset(0, 1) = "Factura no correlativa"
End If
End If
'Bajamos una fila
ActiveCell.Offset(1, 0).Select
Loop
'Mostramos el prodecimiento
Application.ScreenUpdating = True
End Sub
Buscar en varias hojas
End Function
Function BuscarEnHojas(Look_Value As Variant, Tble_Array As Range, _
Col_num As Integer, Optional Range_look As Boolean)