Jump to content
  • Debido a la crisis sanitaria, hasta el día 31 de marzo, el registro al foro de Ayuda Excel será totalmente gratuito para facilitar el teletrabajo. Todos los registros que se produzcan entre estas fechas tendrán acceso gratuito ilimitado a la comunidad hasta el 30 de abril.

    Regístrate

    Si te surge alguna duda mientras estás trabajando en casa con Excel, ya tienes a quien preguntar.

    Espero que esta medida te sirva de ayuda. Frenar la expansión del coronavirus depende de todos. Sé responsable.

asteron

Generar correlativo de numeración pero en columnas

Recommended Posts

Hola!

Parece que si estas interesado, eso nos gusta, pues quien sabe y te conviertes en colaborador referente para este foro

Lo entendiste bien, con respecto a "cel", recuerda que este va adquiriendo la "fila" en el recorrido, es decir la fila en blanco, por lo que con cel.Resize(, 21), extiendo el rango desde A hasta la columna N

Generalmente trabajo con los valores de los objetos, para no extender mucho los códigos [hacia la derecha], esos valores los podrás encontrar en la ayuda de cada objeto

Ahora adjunto otra forma, usando nada mas el mismo ciclo para poner los títulos, sin usar Specialcells

 

Saludos

Generar correlativos por n columnas_GP.rar

Share this post


Link to post
Share on other sites

Hola a todos...

Partiendo del supuesto que tenemos una hoja planilla y en esta tenemos los datos de inicio, este es mi código sin utilizar ciclos, solo métodos de selección de celdas especiales

Option Explicit

Sub test()
Dim Plantilla As Worksheet
Dim rango As Range
Dim conta As Integer
Dim y As Long
Dim max As Long

Set Plantilla = ThisWorkbook.Sheets("Plantilla")
conta = Application.InputBox("Numero de conjuntos", "", 10)
If conta < 1 Then Exit Sub

With Plantilla.Range("A1").CurrentRegion
  max = WorksheetFunction.max(.Value)
  y = .Rows.Count
  Set rango = .Offset(.Rows.Count).Resize(y * conta)
  rango.FormulaR1C1 = "=IF(R[-" & y & "]C <> """",R[-" & y & "]C,"""")"
  rango.SpecialCells(xlCellTypeFormulas, xlNumbers).FormulaR1C1 = "=R[-" & y & "]C+" & max & ""
  rango.Value = rango.Value
End With
End Sub

Saludos!

EJEMPLO.xlsx

Share this post


Link to post
Share on other sites
Hace 5 horas, Gerson Pineda dijo:

Parece que si estas interesado, eso nos gusta, pues quien sabe y te conviertes en colaborador referente para este foro

Hola @Gerson Pineda, si que estoy interesado. Ojalá aprenda más y pueda colaborar.

Gracias por tus comentarios y por contestarme!

Voy a probar el ejemplo que envías.

Moisés.

Share this post


Link to post
Share on other sites
Hace 6 horas, Gerson Pineda dijo:

Ahora adjunto otra forma, usando nada mas el mismo ciclo para poner los títulos, sin usar Specialcells

Hola @Gerson Pineda, ahora lo he entendido casi todo. He añadido una linea para que termine de poner datos en cuanto la variable fil alcance el objetivo en [x1]

For f = 1 To vlf
    vf = vlf * (t - 1): fil = fil + 1
    Cells(f + 1 + vf, c).Offset(t - 1, 2 * (c - 1)) = fil
    If fil = [x1] Then Exit Sub 'he añadido esta línea
Nex

Lo que no entiendo es esto:

SpecialCells(2)

He leído que se refiere a esto, xlCellTypeConstants 2 Celdas que contienen constantes. Pero no se que quiere decir que contienen constantes. ¿es posible aclarármelo?

Gracias de antemano.

Moisés.

Share this post


Link to post
Share on other sites
Hace 1 hora, digitalboy dijo:

rango.FormulaR1C1 = "=IF(R[-" & y & "]C <> """",R[-" & y & "]C,"""")" rango.SpecialCells(xlCellTypeFormulas, xlNumbers).FormulaR1C1 = "=R[-" & y & "]C+" & max & "" rango.Value = rango.Value

Otra opción pero con formula R1C1. Con este tipo de fórmulas no estoy acostumbrado y me cuesta entenderla..., pero es un opción más y rápida.

Gracias, @digitalboy

Share this post


Link to post
Share on other sites
Hace 20 minutos , Pirtrafilla dijo:

Otra opción pero con formula R1C1. Con este tipo de fórmulas no estoy acostumbrado y me cuesta entenderla..., pero es un opción más y rápida.

Gracias, @digitalboy

Hola @Pirtrafilla,

De echo creo que no es tan rápida como la de Gerson, pero eso es por que siempre sera mas rápido trabajar con Arrays... Pero para este caso encaja a la perfección! La notación RC realmente no es difícil de entender... R para las filas (Rows) y C para las columnas (Columns) dentro de los corchetes defines los desplazamientos ya sean positivos o negativos como el offset, si quieres rangos fijos utilizas algo como R1C5 (en este caos para referirte a la celda E1). Pero hay mucha información en Internet al respecto.

Saludos!

Share this post


Link to post
Share on other sites

@digitalboy

He probado tu aporte, pero veo que falla, supongo que no se crean las filas, ¿necesitan algo procreado, correcto?

En ‎23‎/‎11‎/‎2018 at 18:47 , digitalboy dijo:

De echo creo que no es tan rápida como la de Gerson, pero eso es por que siempre sera mas rápido trabajar con Arrays…

No me obsesiona la velocidad en los proceso, a menos que sea para un proyecto grande que requiera optimización en todo momento

Pero ahora adjunto un aporte mas, usando la memoria en VBA

La velocidad es notablemente mejor entre el anterior y actual proceso [0.9531 y 11.3281] con 100,000 filas, además mi portátil no es la mas envidiable :D

 

Saludos 

Generar correlativos por n columnas_GP.rar

Share this post


Link to post
Share on other sites
Hace 52 minutos , Gerson Pineda dijo:

Pero ahora adjunto un aporte mas, usando la memoria en VBA

Entiendo que la clave de la velocidad, además de usar una matriz para guardar los valores "virtualmente", está en esta línea.

Cells(2 + vf, c).Offset(t - 1, 2 * (c - 1)).Resize(vlf) = Application.Transpose(Matriz)

Otra cosa para aprender. Application.Transpose(Matriz)

Muchas gracias!

Moisés.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.



×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png