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:
     

Notapor galileogali » 03 Mar 2007 20:20

Perdon "loopear"
* 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 p@li » 03 Mar 2007 20:32

KL,
Estoy sorprendidí­simo, esto me motiva a seguir investigando, y todaví­a no veo los links que dejaste en este mismo hilo.

Esto me sirve muchí­simo, Gracias!!!!
* 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 20:51

Asi a bote pronto, el problema lo genera la funcion INDIRECT que por lo visto al verse en el entorno VBA pierde la capacidad de devolver referencia y solo devuelve valor:

Código: Seleccionar todo
Sub Test1()
  RESULT0 = Evaluate("indirect(""A2:A5"")")
 
  RESULT1 = Evaluate("indirect(""A2"")")
  RESULT2 = Evaluate("row(indirect(""A2:A5""))")
  RESULT3 = Evaluate("rows(indirect(""A2:A5""))")
  RESULT4 = Evaluate("cell(""address"",indirect(""A2""))")
 
  RESULT5 = Evaluate("row(A2:A5)")
  RESULT6 = Evaluate("rows(A2:A5)")
  RESULT7 = Evaluate("cell(""address"",A2)")
  RESULT8 = Evaluate("cell(""address"",A2:A5)")
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 21:03

GRACIAS KL:
INDIRECT era mi "Principal SOSPECHOSA", pero me faltó empuje como para declararla culpable... tal vez por haber leido novelas de Agatha Christie, donde, a dieferencia de este caso, el culpable suele ser el que parece mí s inocente
* 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 KL » 03 Mar 2007 21:23

tambien se me ha olvidado mencionar que posiblemente (no he tenido energia suficiente para hacer pruebas suficientes como para afirmarlo con total seguridad, pero lo intuyo en base a las pruebas que he llevado a cabo hasta este momento) las formulas procesadas por Evaluate esten limitadas a 256 caracteres :-(
* 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

Notapor galileogali » 03 Mar 2007 21:51

Claro pero eso, particonando y reduciendo nombres a la minma expresion, podria salvarse...
ahora la idea es como pasar LOS RANGOS que generabamos con INDIRECT.....tal vez OFFSET (EL DE worksheet)
* 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 KL » 03 Mar 2007 21:51

por si interesa el por que de mi conclusion...

lo de los 255 caracteres (no 256 como dije antes) lo corroboran las dos siguientes cosas :

1) la diferencia entre las dos formulas es un 0 en el ultimo valor numerico.
Código: Seleccionar todo
'esto funciona:
    RESULT1 = Evaluate("=IF(MAX(IF(LARGE(rng1,{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18})-LARGE(rng1,{2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19})>1,LARGE(rng1,{2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19})))+1=1,{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18},100000000)")


Código: Seleccionar todo
'esto no
    RESULT2 = Evaluate("=IF(MAX(IF(LARGE(rng1,{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18})-LARGE(rng1,{2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19})>1,LARGE(rng1,{2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19})))+1=1,{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18},1000000000)")


2) la funcion COUNTIF (CONTAR.SI) en la hoja de calculo solo permite hasta 255 caracteres en el segundo parametro si ese esta en formato texto
* 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

Notapor KL » 03 Mar 2007 21:56

galileogali";p="36133 escribió:Claro pero eso, particonando y reduciendo nombres a la minma expresion, podria salvarse...
ahora la idea es como pasar LOS RANGOS que generabamos con INDIRECT.....tal vez OFFSET (EL DE worksheet)


ya sabes, yo siempre que pueda evito usar el metodo de INDIRECTO y lo sustituyo por

Código: Seleccionar todo
Evaluate("ROW(INDEX(A:A,1):INDEX(A:A,COUNT(rng)))")
* 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 » 04 Mar 2007 00:18

KL: sin descartar tus opciones con INDEX probe esto que ha funcionado:

Código: Seleccionar todo
Sub FORMULA1()
  Dim RNGFILAS1 As String, RNGFILAS2
  alto = Evaluate("=COUNT(rng1)")
  RNGFILAS1 = Range("a1:A" & alto - 1).Address
  RNGFILAS2 = Range("a2:A" & alto).Address

  RESULT = Evaluate("=MAX(IF(LARGE(rng1,ROW(" & RNGFILAS1 & "))-LARGE(rng1,ROW( " & RNGFILAS2 & "))>1,LARGE(rng1,ROW(" & RNGFILAS2 & "))))+1")


End Sub

Pasando en lugar de Rangos, las address, quedaria una STRING evaluable.
* 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 KL » 04 Mar 2007 00:34

o asi:

Código: Seleccionar todo
Sub FORMULA1()
  Dim x As String
  x = [COUNT(rng1)]
  RESULT = Evaluate("=MAX(IF(LARGE(rng1,ROW(A1:A" & x - 1 & "))-LARGE(rng1,ROW(A1:A" & x & "))>1,LARGE(rng1,ROW(A1:A" & x & "))))+1")
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 » 04 Mar 2007 00:36

perdon, una correccion:

Código: Seleccionar todo
Sub FORMULA1()
  Dim x As String
  x = [COUNT(rng1)]
  RESULT = Evaluate("=MAX(IF(LARGE(rng1,ROW(A1:A" & x - 1 & "))-LARGE(rng1,ROW(A2:A" & x & "))>1,LARGE(rng1,ROW(A2:A" & x & "))))+1")
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 » 04 Mar 2007 09:00

Vana apareciendo las opciones....y siguiendo con EVALUATE y explotar su MATRICIALIDAD INTRINSECA....
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 KL » 04 Mar 2007 11:37

Me parece que el tema de los nombres es un tanto redundante en este caso concreto:

Código: Seleccionar todo
Sub Nombres()
    With ActiveSheet
        REF = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp)).Address
        .[I2] = Evaluate("SUM(IF(" & REF & ">7," & REF & ",0))")
    End With
End Sub


Tal vez, en caso de formulas muy largas y para trocear los calculos, se podria aprovechar los nombres para crear matrices condicionales, ya que, entiendo, no se puede pasarlas mediante una variable a la "string-formula". Obviamente, se tardara menos en crear una matriz condicional de esta manera que mediante las herramientas habituales de VBA (en los foros rusos de VBA me siguen diciendo que en VBA se pueden conseguir velocidades increibles con los "binary trees", pero no he tenido tiempo para explorar el tema a fondo).
* 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 » 04 Mar 2007 12:38

Varias opciones, bien...

Pero ahora, KL tienes que asumir que eres el "CULPABLE" de haber mencionado esto de los "binary trees",....Hasta ahora no tení­amos ni la menor idea de su existencia....Así­ que aquí­, quedamos al aguardo de las novedades que vayan surgiendo de tus investigaciones....
Desde ya que , cierro este post, y de inmediato me pongo a buscar en la red....
Espero no tener que aprender Ruso, para poder leer la información que encuentre....(jejeje)
* 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 kraquem » 16 Jul 2010 09:56

Hola, por favor podrian volver a subir los ejemplos excel, intente abrirlos pero no estan disponibles.

Saludos.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
kraquem
Miembro Frecuente
Miembro Frecuente
 
Registrado: 15 Jul 2010 19:28

Anterior

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