Macro en excel

Hola a tod@s , tengo una serie de datos en una hoja de calculo llamada TEMPORAL :
(Como no puedo pegar una imagen os escribo los registros)
A1=MANUEL GARCIA VAZQUEZ
B1=GRAN CANARIA, 25
C1=983584785
A2=PEPE VAZQUEZ VAZQUEZ
B2=LA ALAMEDA, 20
C2=983554545
A3=ANA GARCIA LOPEZ
B3=LA PAZ, 23
C3=983584652
A4=LAURA VAZQUEZ VAZQUEZ
B4=ROSALEDA, 25
C4=983123785
Y simplemente quería pasar esos datos a otra hoja de calculo (en el mismo libro) llamada ETIQUETAS de forma que me quedasen eses datos puestos de la siguiente forma :
B3=MANUEL GARCIA VAZQUEZ
B4=GRAN CANARIA, 25
B5=983584785
E3=PEPE VAZQUEZ VAZQUEZ
E4=LA ALAMEDA, 20
E5=983554545
B8=ANA GARCIA LOPEZ
B9=LA PAZ, 23
B10=983584652
E8=LAURA VAZQUEZ VAZQUEZ
E9=ROSALEDA, 25
E10=983123785
Es decir poner los mismos datos de cada persona (nombre, dirección y teléfono) separados y puestos en el orden que aparecen abajo.Eso cuando tengo 3 o 4 registros es viable hacerlo a mano pero cuando tengo 1000 o 2000 obviamente ya no.
¿He pensado en programar una macro en Visual Basic que me copiase desde el primer al último registro de la hoja de calculo llamada TEMPORAL y me la copiase en la hoja llamada ETIQUETAS pero no se como hacerlo porque si se de Visual Basic pero nunca he hecho macros en Excel?. ¿A alguien se le ocurre como hacerlo? Gracias anticipadas .

2 Respuestas

Respuesta
1
ESta rutina te da el total de filas ocupadas de la hoja activa:
Sub cantFilas()
Dim ulti As Integer
ulti = ActiveSheet.Range("A65536").End(xlUp).Row
MsgBox ulti
End Sub
Colocala en un módulo del Editor. Al ejecutarla (desde menú Herramientas, macros) te devolverá en un mensaje el total de filas ocupadas considerando la col A (ajusta este dato a tu col más completa)
Saludos y no olvides finalizar
Ya lo he resuelto ! solo me queda un pequeño detalle ... ¿cómo puedo saber el numero de filas que tengo insertadas en una hoja de calculo?
Muy bien! Es lo que buscaba.Una cosa para finalizar. Cuando inserto el procedimiento (que hace lo que te había comentado en el primer mensaje) en una macro;es decir;dentro de un modulo:
Sub Macro5()
procedimiento
End Sub
Me funciona y me pega los registros en la hoja ETIQUETAS, pero cuando asocio el procedimiento al evento Click de un botón en la hoja TEMPORAL :
Private Sub Cmdgenerarinforme_Click()
procedimiento
End Sub
No me funciona. Al pulsar el botón Cmdgenerarinforme me da un error en tiempo de ejecución. El procedimiento es el siguiente :
Dim Charhoja1 As Long
Dim Numhoja1 As String
Dim Charhoja2 As Long
Dim Numhoja2 As String
Dim Contfilas As Long
Dim Contreg As Integer
Dim PoscolumB As Boolean
Dim Totalfilas As Long
Contfilas = 1
Contreg = 1
Charhoja1 = 65
Numhoja1 = 2
Charhoja2 = 66
Numhoja2 = 3
PoscolumB = True
Totalfilas = ActiveSheet.Range("A65536").End(xlUp).Row
While Contfilas < Totalfilas
While Contreg <= 3
Sheets("TEMPORAL").Select
Range(Chr(Charhoja1) + Numhoja1).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("ETIQUETAS").Select
Range(Chr(Charhoja2) + Numhoja2).Select
ActiveSheet.Paste
Charhoja1 = Charhoja1 + 1
Numhoja2 = Val(Numhoja2) + 1
Contreg = Contreg + 1
Wend
Charhoja1 = 65
Numhoja1 = Val(Numhoja1) + 1
Contreg = 1
If PoscolumB Then
Charhoja2 = Charhoja2 + 3
Numhoja2 = Val(Numhoja2) - 3
PoscolumB = False
Else
Charhoja2 = 66
Numhoja2 = Val(Numhoja2) + 3
PoscolumB = True
End If
Contfilas = Contfilas + 1
Wend
Sheets("ETIQUETAS").Select
El error que me da es el siguiente :
Se ha producido el error '1004' en tiempo de ejecución
Fallo en el método Select de la clase Range.
La linea de codigo donde se produce el error es la siguiente :
Range(Chr(Charhoja2) + Numhoja2).Select
¿Por qué se produce ese error?
A simple vista no hay problemas, pero colocá delante la expresión ActiveSheet, así:
Activesheet.Range(Chr(Charhoja2) + Numhoja2).Select
Si te sigue dando error, al detenerse pasá el mouse sobre las variables para ver su contenido. Esto te dará una idea de qué resultado tendrá el contenido del Range y notarás el por´qué del error.
Si no lo solucionas quizás el que te construyó la rutina tenga aún los datos cargados y te podrá ayudar con esto.
Respuesta
1
Te recomiendo que en lugar de usar la función Range de esa forma (con letra-numero), uses la instrucción Cells(fila, columna); de esta forma podrías reemplazar por
Cells(numhoja2,1).Select
Para que se posicione en la columna A y vaya variando en la fila.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas