Copiar columnas continuas y pegar discontinuas con Macro

Es mi primera pregunta en todoexpertos, y eso impone!.

Lo primero solicitar paciencia debido a que no soy programador, pero hago lo que puedo.

Tengo una macro que segun unos rangos facilitados copia y pega (n) veces el resultado en la columna siguiente vacía. Pero necesitaría que esas columnas no se pegasen tal cual se copias, sino dejando copia de cada columna n veces. Se verá mejor graficamente.

En 11:11 pueden estar los datos, varían en cuanto al número, por ello tengo una fórmula para hallarlos.

Con la macro de acontinuación consigo que a partir de "E11" inserte (n) veces -"B22"-, los datos que existan en 11:11.

Sub oforma()
'selecciona la hoja y busca los datos desde B11 hasta donde acaben
     Sheets(1).Select
    Range("B11").Select
    While ActiveCell.Value <> ""
    ActiveCell.Offset(0, 1).Select
   Wend
    pegar = ActiveCell.Address(False, False)
    ActiveCell.Offset(0, -1).Select
    finDatos = ActiveCell.Address(False, False)
'pega los datos n veces en la primera columna que no tiene datos
Set num = Range("B22")
rango = Range("B11:" & finDatos).Select
Set datos = Range("B11:" & finDatos)
Datos. Copy datos. Offset(0, datos. Columns. Count). Resize(datos. Rows.Count + 0, datos. Columns.Count * num)
End Sub

este sería el resultado.

Y lo que busco es que diera el siguiente resultado, según número dado en "C:22" pegue 2 datos de cada uno de los datos copiados en n repeticiones "B22".

E

Espero que se entienda, la verdad no se si me expliqé bien.

Para la gente experta, seguro que el código anterior les parecerá muy chapucero, pero es lo mejor que he podido hacerlo ;).

1 Respuesta

Respuesta
1

Esta macro te servirá. Lo que hace es insertar celdas (corriendo el resto a la derecha) copiando el contenido de origen tantas veces como lo indica B22.

Sub oforma()
'x Elsamatilde
'selecciona la hoja y busca los datos desde B11 hasta donde acaben
Sheets(1).Select
'guarda el nro de repeticiones que indica B22
If [B22] = "" Or [B22] = 0 Then Exit Sub
num = [B22]
[B11].Select
'recorrerá hacia la izquierda hasta la primer col ocupada, fin de rango
colx = [IV11].End(xlToLeft).Column + 1
While ActiveCell.Column < colx And ActiveCell.Value <> ""
'inserta una celda tantas veces como indique B22
For i = 1 To num
    ActiveCell.Copy
    ActiveCell.Offset(0, 1).Insert Shift:=xlToRight
Next i
'se posiciona en la col el siguiente dato, suma 1 por la celda de origen
ActiveCell.Offset(0, num + 1).Select
'incremento la variable fin de rango
colx = colx + num
Wend
Application.CutCopyMode = False
End Sub

Si esto resuelve tu consulta no olvides valorarla. Sino comenta solicitando aclaraciones.

Muchísimas Gracias Elsa! Veo que has corregido además  el desastre de macro que yo había intentado hacer funcionar

No cuesta nada registrarse con algún nombre de fantasía. El individualizarlos de alguna manera me permite saber que conocimientos tienen, que Excel utilizan, si hacen consultas de macro o no. Si ya hicieron consultas de macro no es necesario explicar x ejemplo como ingresar al Editor y cosas así. Además el saber de qué lugar escriben también ayuda para dar una respuesta más cercana a los usos y costumbres. Una simple sugerencia.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas