Generar codigo autoincremental

Solo consultas sobre macros y código VBA Excel.

Reglas del Foro
1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!
Compartir en:
     

Generar codigo autoincremental

Notapor david_erh » 28 Feb 2007 21:31

Hola Muchach@s del foro; necesito me ayuden con una hojita q tengo;es una hoja en al cual se agregan nombres y se genera un código incremental automáticamente; en el adjunto muestro como lo hice; pero ha surgido un inconveniente q no se como solucionar; es que aveces se ingresa el mismo nombre y por tanto debe de ya no generarse otro código sino se le asigne el mismo q ya tení­a.
Espero me puedan dar algunas sugerencias.

Gracias.

David
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
david_erh
Miembro Frecuente
Miembro Frecuente
 
Registrado: 29 Mar 2006 15:25

Re: Generar codigo autoincremental

Notapor galileogali » 28 Feb 2007 23:10

Fijate, creo que hace lo que buscas....
Pregunto, ¿no serí­a interesante que se usara siempre el Primer Numero libre disponible en la sucesion natural y no el de la Fila donde cayo por primera vez?
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
galileogali
Moderator
Moderator
 
Registrado: 07 Ene 2005 22:46
Ubicación: QUIROGA (ba), ARGENTINA

Re: Generar codigo autoincremental

Notapor galileogali » 28 Feb 2007 23:44

Ya que estaba, hice algunos cambios.....
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
galileogali
Moderator
Moderator
 
Registrado: 07 Ene 2005 22:46
Ubicación: QUIROGA (ba), ARGENTINA

Re: Generar codigo autoincremental

Notapor david_erh » 01 Mar 2007 20:51

hola Gali, es impresionante lo q puedes hacer con el excel; haz hecho en unas cuantas lineas lo q a mi me tomarí­an muuuuuuuuchas lineas de código; aunque debo de ser franco q no entendí­ mucho como hiciste algunas cosas, como la formula q ingresaste al insertar el nombre de la fila no entiendo muy bien, espero q con la practica aprenda alguna de las fantásticas cosas q haces con el excel.
Gracias otra vez.

David
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
david_erh
Miembro Frecuente
Miembro Frecuente
 
Registrado: 29 Mar 2006 15:25

Re: Generar codigo autoincremental

Notapor galileogali » 02 Mar 2007 20:21

Como complemento te envio un generador de disponibles: que en caso de que sirviera para tu propósito habrí­a, obviamente, que adaptar.
Uno es con una Formula Matricial a Celda, y el otro con macro (adaptable a Function)
Hay sistemas donde uno pretende:
a) Dejar Libres las asisgnacones de codigo ya usadas, para evitar Ambigí¼edades posteriores.

b) Reutilizar códigos libres, por la razón que sea.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
galileogali
Moderator
Moderator
 
Registrado: 07 Ene 2005 22:46
Ubicación: QUIROGA (ba), ARGENTINA

Notapor damianomarsilva » 03 Mar 2007 04:23

gali:
sinceramente me parece fenomenal la manera en que utilizás las funciones de excel desde vba. con decirte "de primera" me quedo absolutamente corto. ¿como empezaste a desenmarañar ese tema? me gustarí­a mucho empezar a verlo.. pero no encuentro nada al respecto.
en tu primer archivo utilizás "evaluate", jajaja ni sabí­a que existí­a esa sentencia. luego en tu segundo ejemplo, usás la variable range "arr",
a la cual luego del punto ¿le asignás una función? jeje, excelente tu aporte.
un abrazo
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
damianomarsilva
Miembro Frecuente
Miembro Frecuente
 
Registrado: 27 Dic 2006 10:15

Notapor galileogali » 03 Mar 2007 09:57

Sin embargo para mi lo que mas me gusta es la matricial en CELDA "C2"....Aun a pesar de que, si bien no lo probé, calculo que a partir de las primeras 400 filas, los milisegundos empiecen a tirarla abajo....
Para el Tema Evaluate... no es mucho lo que hay en la red... o por lo menos yo me tope con los Errores 2015, 2023 y 2029 y resolvi acudir al Array....
Vi que estos errores ya habian sido objeto de discusion de Kusleika, Walkenbach y Pieterse, pero, francamente, no entendi un...., las conclusiones, asi que sacamos del carcaj las array....

Descripcion del problema:
Evaluate donde necesita un Rango quiere un Rango, y salvo las soluciones que desconozco, tira error 20xx, si le pones Formulas que Operando sobre Rangos devuelven Rangos Virtuales:
Ejemplo: Si a dentro de un Evaluate introduzco el Nombre de un Rango Dinamico, es admitido, porque Via formula los que devulevo es un Rango, por ejemplo, llamémoslo RNG.
Ahora bien si creo un RNG_NON_BLANKS, Insertar>>Nombre>>Definir >>RefersTo >> =si(RNG="",0,RNG), via el NOMBRE RNG_NON_BLANKS, no logro operar dentro del EVALUATE, mientras que en la MATRICIAL en la Hoja: asume el RANGO VIRTUAL...
Comentario que hago para ver si alguien tienen una solucion:
es decir: ¿COMO PASAR NOMBRES A EVALUATE de RANGOS VIRTUALES?
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
galileogali
Moderator
Moderator
 
Registrado: 07 Ene 2005 22:46
Ubicación: QUIROGA (ba), ARGENTINA

Notapor galileogali » 03 Mar 2007 10:27

Estoy haciendo pruebas y me veo obligado a RECTIFICAR mi POST anterior respecto de RANGOS VIRTUALES, cuando encuentre nuevamente los ERRORES 2023, 2015 O 2029, vuelvo sobre el tema, por ahora considero que el planteo que hice no concuerda con los "experimentos" que en pequeña escala vengo haciendo, y que me estan permitindo incluir dentro de EVALUATE rangos con formulas "no terrestres".
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
galileogali
Moderator
Moderator
 
Registrado: 07 Ene 2005 22:46
Ubicación: QUIROGA (ba), ARGENTINA

Re: Generar codigo autoincremental

Notapor damianomarsilva » 03 Mar 2007 14:56

gali:
me mataste.... no te entiendo.. jajaja
anoche estuve hurgando en la ayuda de VBA y puede encontrar algo al respecto, dentro del tema objetos de worksheet... ahora creo que me queda practicar y renegar un tiempo largo.
gracias por tu post... en muchas ocasiones necesité utilizar funciones (por ejemplo =SUMA(A1:A1000) desde vba y nunca pude lograrlo... voy a ver si puedo aplicar tu código a mis problemas.
grande pa !!
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
damianomarsilva
Miembro Frecuente
Miembro Frecuente
 
Registrado: 27 Dic 2006 10:15

Re: Generar codigo autoincremental

Notapor KL » 03 Mar 2007 17:08

damianomarsilva";p="36117 escribió:...gracias por tu post... en muchas ocasiones necesité utilizar funciones (por ejemplo =SUMA(A1:A1000) desde vba y nunca pude lograrlo... voy a ver si puedo aplicar tu código a mis problemas.
grande pa !!


Aqui encontraras algunos ejemplos:

http://www.exceluciones.com/portal/view ... 4639#24582
http://www.exceluciones.com/portal/view ... 5381#25285
http://www.exceluciones.com/portal/view ... 8080#28019
http://www.exceluciones.com/portal/view ... 2634#32561

En el ultimo enlace nota las posibilidades de trabajar con las matrices. Para ese caso, quizas, un ejemplo mas ilustrativo seria el siguiente:

- llena el rango A1:A10 de valores numericos
- llena el rango B1:B10 de valores numericos
- lanza uno de los siguientes codigos desde el modulo VBA de la misma hoja:

Código: Seleccionar todo
Sub test1()
    [C1:C10]=[A1:A10+B1:B10]
End Sub


o bien

Código: Seleccionar todo
Sub test2()
    [C1:C10] = Evaluate("A1:A10+B1:B10")
End Sub
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: Generar codigo autoincremental

Notapor p@li » 03 Mar 2007 19:12

Viendo que son matrices... se pueden recorrer, pero que sucede....la matriz tiene dos demensiones...
Con este código pude recorrer los resultados antes de plasmarlos en las celdas...
Código: Seleccionar todo

Sub test3()
    Dim a As Long
    Dim b As Long
    For a = LBound(Evaluate("A1:A10+B1:B10"), 1) To UBound(Evaluate("A1:A10+B1:B10"), 1)
        For b = LBound(Evaluate("A1:A10+B1:B10"), 2) To UBound(Evaluate("A1:A10+B1:B10"), 2)
            Debug.Print Evaluate("A1:A10+B1:B10")(a, b)
        Next b
    Next a
End Sub


Saludos
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
p@li
Miembro Frecuente
Miembro Frecuente
 
Registrado: 04 Oct 2005 16:55
Ubicación: Argentina

Re: Generar codigo autoincremental

Notapor KL » 03 Mar 2007 19:28

casi mejor generar la matriz solo una vez, mas que nada para ahorrar el tiempo de recalculo y de paso reducir el codigo:

Código: Seleccionar todo
Sub test4()
    Dim a As Long, b As Long, m
    m = Evaluate("A1:A10+B1:B10")
    For a = 1 To UBound(m, 1)
        For b = 1 To UBound(m, 2)
            Debug.Print m(a, b)
        Next b
    Next a
End Sub
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: Generar codigo autoincremental

Notapor KL » 03 Mar 2007 19:33

...y sí­, las matrices dinamicas generadas a partir de rangos (p.ej.: x=[A1:A10]) son siempre bidimensionales con Option Base 1 incluso si solo tienen una dimension (columna o fila).
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: Generar codigo autoincremental

Notapor KL » 03 Mar 2007 19:51

Por cierto, una de las grandes ventajas de este metodo es que muchas veces ni siquiera es necesario recorrer la matriz, lo cual ahorra un monton de tiempo de codigo. Para comparar:

Código: Seleccionar todo
Sub test5()
    x = Timer
    [C1:C65535] = Evaluate("IF(A1:A65535>0,A1:A65000+B1:B65535,"""")")
    MsgBox Timer - x
End Sub


y

Código: Seleccionar todo
Sub test6()
    Dim a As Long, b As Long, m
    x = Timer
    m = Evaluate("A1:A65535+B1:B65535")
    Application.ScreenUpdating = False
    For a = 1 To UBound(m, 1)
        If Cells(a, 1) > 0 Then Cells(a, 3) = m(a, 1) Else Cells(a, 3) = ""
    Next a
    Application.ScreenUpdating = True
    MsgBox Timer - x
End Sub
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: Generar codigo autoincremental

Notapor galileogali » 03 Mar 2007 20:19

KL: Muy claros ejemplos.....

Tratando de no loopera , me hubiera gustado sacarle todo el POWER a EVALUATE y su MATRICIALIDAD ESPONTANEA, pero no todo son ROSAS....
Asi que:

en el adjunto esta mi interrogante: ¿Error "2023"?
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
galileogali
Moderator
Moderator
 
Registrado: 07 Ene 2005 22:46
Ubicación: QUIROGA (ba), ARGENTINA

Siguiente

Compartir en:
     

  • Anuncio
Manual Excel avanzado

Volver a Macros

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados