Ayuda a simplificar el código de macro de excel

Hola recurro a usted ya que necesito saber si el código de esta macro puedo escribirlo de una forma más sencilla
la macro tiene que copiar grupos de celdas de un libro a otro.
Aquí solo
Estoy copiando 2 grupos de registros y lo necesito agrandar para copiar al menos 20 grupos de registros. Aquí esta la macro:
Sub Macro1()
'
' Macro1 Macro
Application.ScreenUpdating = False
Application.Dialogs(xlDialogOpen).Show
nombre = ActiveWorkbook.Name
ActiveSheet.Range("B4,D4,F4,H4,J4,B5,D5,F5,H5,J5").Select
Selection.Copy
Windows(nombre).WindowState = xlMinimized
ActiveSheet.Range("B7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=True
Windows(nombre).WindowState = xlMaximized
ActiveSheet.Range("B6,D6,F6,H6,J6,B7,D7,F7,H7,J7").Select
Selection.Copy
Windows(nombre).WindowState = xlMinimized
ActiveSheet.Range("D7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=True
Windows(nombre).WindowState = xlMaximized
End Sub
Agradezco su colaboración... Es de suma importancia

1 Respuesta

Respuesta
1
Estoy viendo que copias celdas de rango continuo, ¿aunque lo estás escribiendo de modo separado... se trata de celdas combinadas?
Te dejo otros ejemplos para que intentes aplicarlo:
Para la primer línea:
ActiveSheet. Range("B4:B5,D4:D5,F4:F5,H4:H5,J4:J5"). Select
Como la que sigue es para fila 6 y 7, celdas continuas, podes unirla en la primer linea:
ActiveSheet. Range("B4:B7,D4:D7,F4:F7,H4:H7,J4:J7"). Select
Y a esto le podés agregar otros rgos no continuos, por ej:
ActiveSheet. Range("B4:B7, D4:D7, F4:F7, H4:H7, J4:J7, K5:K19, X10, B20:C30").Select
Muchas gracias por contestar mi duda, tu opción también es muy acertada, pero me podrías ayudar diciendo si hay una forma de escribir de forma más corta la macro ya que aquí solo estoy copiando dos grupos de celdas (primer grupo: B4, D4, F4, H4, J4, B5, D5, F5, H5, J5 ) y en la que necesito hacer serian entre 20 y 30 grupos... alguien me dijo que podría hacerse un ciclo pero no encuentro nada al respecto y soy novato en esto...
Agradezco tu excelente colaboración
Basándome en tu ejemplo, tengo que se empieza en B4, se copia de a 2 col hasta la J, con destino en B7
Luego se sigue con B6... y destino en D7
Esos valores (fil, col) son los que debes ir incrementando en un bucle.
Esta es un ej de rutina :
Sub Macro1()
'
' Macro1 Macro
Application.ScreenUpdating = False
Application.Dialogs(xlDialogOpen).Show
nombre = ActiveWorkbook.Name
'inicio del bucle  -ajustar variables si hiciera falta
fil = 4  'primera fila del grupo
col = 2  '1er col de origen
coldesti = 2  'primera col de destino.
fildesti = 7 'primera fila destino
ActiveSheet.Range("B4").Select
For i = 1 To 20    'máx de veces que se repite el ciclo completo
    For col = 2 To 10 Step 2
        ActiveSheet.Range(Cells(fil, col), Cells(fil + 1, col)).Select 'B4:B5 la 1ra vez
        Selection.Copy
        Windows(nombre).WindowState = xlMinimized
        ActiveSheet.Cells(fildesti, coldesti).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=True
    Next col
'ahora se repite para B6:B7 con destino = D7
coldesti = coldesti + 2
fil = fil + 2 'de B4 ahora será B6
Next i
End Sub
Para que un bucle de resultados correctos, los saltos por fila y col deben seguir una regla, en este caso cada 2 col y también el destino es cada 2 col.
Pruébala y comentame su resultado.
Muchas gracias estoy estudiando el código, me sera de gran utilidad, de verdad que expertos como tu son de una ayuda inmensa ...
Muchas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas