Lista

Tengo una lista me gustaría cambiar por medio de una función o una macro.
Ejemplo:
1A
2B
3C
Esta lista la tengo hacia abajo en dos columnas el numero 1 en la columna a y la letra a en la columna b así sucesivamente.
Mi duda es como cambiarla a la siguiente forma:
1 A 2 B 3 C 4 D 5 E 6 F 7 G 8 H 9 I
El numero 1 en columna a fila 1, la letra a en la columna b fila 1 y así sucesivamente.
Como no conozco de macros me gustaría que por favor me explicaras como realizaste la macro o que lógica para así entrender un poquito más del funcionamiento de la macros.

1 respuesta

Respuesta
1
Empecemos por el principio. Intentaré que mis explicaciones sean lo más claras posibles.
Las macros simplemente ejecutan una serie de instrucciones de forma consecutiva para obtener un resultado final. Dichas instrucciones se encuentran en la ayuda del módulo VBA del Excel. También puedes obtener información de diversos libros y páginas web para familiarizarte poco a poco con ellas. Si necesitas algún manual o páginas web para visitar házmelo saber.
Centrándonos en el caso que planteas, la solución no es muy complicada.
He diseñado una macro que soluciona el caso. Antes de comenzar con la propia macro me gustaría puntualizar un límite del Excel a nuestro caso:
"Excel solamente admite un numero de columnas máximo de 256"
¿Por qué hago esta puntualización? Porque el caso que nos ocupa se refiere a copiar los datos de 2 columnas (A y B) en la fila 1.
¿Qué limitación platea esto? Pues que al tener 2 datos por registro (cuando hago referencia a "registro" quiero decir los valores de cada fila, que en nuestro caso son 2) y querer trasladar todos ellos a la fila 1, si utilizásemos todas las filas que nos proporciona el Excel (=65.536) no dispondríamos de columnas suficientes para contener todos los registros.
Así, tenemos un límite de columnas de 256, con lo cual, el número máximo de registros que podremos procesar sería de:
Nº Máximo de Registros = (256 Columnas / 2 datos por registro) = 128
Cualquier registro que se inserte en las líneas superiores a la 128 no tendríamos columnas para alojar los datos en ellas contenidos.
Una vez dejado claro este punto, pasemos a describir cómo se inserta una macro en Excel utilizando el Visual Basic:
- Abre el fichero de Excel que contiene los datos a tratar.
- Pulsa la combinación de teclas ALT+F11. Se abrirá el módulo de Visual Basic.
- Selecciona INSERTAR - MODULO.
- Haz doble clic en el módulo insertado. Ahora estará activo para poder insertar la macro.
- Copia el siguiente código VBA en el área blanca que aparece a la derecha:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' MACRO: TRASPONER '
' '
' FUNCIÓN: TRASPONE FILAS POR COLUMNAS. TRASLADA LOS DATOS DE LA COLUMNA "A" Y '
' "B" A FILA 1. '
' '
' LIMITACIONES: EXCEL SOLAMENTE PROPORCIONA 256 COLUMNAS, POR LO QUE EL MÁXIMO '
' NÚMERO DE LÍNEAS QUE SE PODRÁN TRATAR CON LA MACRO, TENIENDO EN'
' CUENTA QUE SON 2 DATOS POR LÍNEA (COLUMNAS "A" Y "B"), SERÁN '
' 128: '
' '
' 258 / 2 = 128 LÍNEAS '
' '
' PREMISAS: EL PRIMER REGISTRO (LÍNEA) NO ES NECESARIO TRATARLA, YA QUE SE EN- '
' CUENTRA EN LA POSICIÓN SOLICITADA: '
' '
' PRIMER DATO: POSICIÓN "A1" '
' SEGUNDO DATO: POSICIÓN "B1" '
' '
' RAZONAMIENTO: Haremos todo el proceso en función de la dirección "A1", que es'
' donde se encuentra el primer dato. Así tendremos siempre la '
' línea de copiado (Línea 1). Utilizando la instrucción: '
' '
' ActiveCell.Offset ( Fila, Columna) '
' '
' nos moveremos hacia arriba, abajo, derecha o izquierda de la '
' celda activa en ese momento: '
' '
' +Fila = se moverá tantas veces hacia abajo como valor tome la '
' variable Fila. '
' -Fila = se moverá tantas veces hacia arriba como valor tome la '
' variable Fila. '
' +Columna = se moverá tantas veces hacia la derecha como valor '
' tome la variable Columna. '
' -Columna = se moverá tantas veces hacia la izquierda como valor'
' tome la variable Columna. '
' '
' '
' '
' Esta será el razonamiento que utilizaremos para desarrollar la '
' macro. '
' '
' MACRO CREADA POR CESAR M.C.M. PARA WWW.TODOEXPERTOS.COM 30/04/2003 '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
Sub TRASPONER() 'Denominamos nuestra macro como TRASPONER. Se inicia
'la ejecución de la macro.
Máximo = 128 'Variable que controla que el bucle siguiente se
'repita solamente hasta este número. Ver Limitación
Contador = 1 'Variable que cuenta las veces que se repite el
'bucle siguiente.
FilaRegistro = 1 'Variable que nos indica el número de fila de los
'registros que estamos procesando.
ColumnaCopiado = 2 'Variable que nos indica el número de la columna en
'la que debemos copiar el valor.
Do Until Maximo <= Contador 'BUCLE que ejecuta la macro hasta que el "Contador" llegue al
'valor asignado a la variable "Maximo".
'''''''''''''''''''''''''''''''''''''''
'COPIADO DEL PRIMER VALOR DEL REGISTRO'
'''''''''''''''''''''''''''''''''''''''
Range("A1").Select 'Seleccionamos la celda "A1". Ver Razonamiento.
ActiveCell. Offset(Contador, 0).Select 'Nos movemos hacia abajo el número de veces
'que indica la variable "Contador" y activa-
'mos la celda.
Selection. Copy 'Copiamos el valor de la celda anterior.
'Ahora tenemos que activar la celda en donde queremos copiar el valor anterior. Para
'ello nos movemos hacia arriba el número de veces que marque la variable "FilaRegistro"
'y hacia la derecha el número de veces que marque la variable "Columna Copiado".
ActiveCell.Offset(-FilaRegistro, ColumnaCopiado).Select
ActiveSheet. Paste 'Pegamos el valor de la celda anterior.
''''''''''''''''''''''''''''''''''''''''
'COPIADO DEL SEGUNDO VALOR DEL REGISTRO'
''''''''''''''''''''''''''''''''''''''''
Range("A1").Select 'Seleccionamos la celda "A1". Ver Razonamiento.
ActiveCell. Offset(Contador, 1).Select 'Nos movemos hacia abajo el número de veces
'que indica en este momento la variable "Contador"
'y activamos la celda.
Selection. Copy 'Copiamos el valor de la celda anterior.
'Ahora tenemos que activar la celda en donde queremos copiar el valor anterior. Para
'ello nos movemos hacia arriba el número de veces que marque la variable "FilaRegistro"
'y hacia la derecha el número de veces que marque la variable "Columna Copiado".
ActiveCell.Offset(-FilaRegistro, ColumnaCopiado).Select
ActiveSheet. Paste 'Pegamos el valor de la celda anterior.
Contador = Contador + 1 'Incrementamos en 1 el valor del contador del bucle.
'Lo que conseguimos con esto es que se vaya incrementando
'este número hasta llegar a 128. Ver Limitaciones.
FilaRegistro = FilaRegistro + 1 'Incrementamos en 1 el valor del contador de la
'Fila del registro a procesar.
ColumnaCopiado = ColumnaCopiado + 2 'Incrementamos en 2 el valor de la columna
'de copiado. El valor asignado es 2 porque
'tenemos que copiar 2 valores.
Loop 'Volvemos de nuevo al inicio del bucle.
End Sub 'Finalizamos la macro.
- Teclea ahora ARCHIVO - CERRAR Y VOLVER A MICROSOFT EXCEL.
- El programa te devuelve a Excel.
- Ya tenemos la macro insertada. Puede que no la veas muy clara en este mensaje, pero una vez que realices los pasos descritos anteriormente, lo verás mucho mejor en el módulo de Visual Basic.
- Ahora vamos a insertar un botón que al presionarlo ejecute la macro. Si no tienes activada la barra de FORMULARIOS, teclea VER - BARRA DE HERRAMIENTAS - FORMULARIOS.
- Se abre la barra de herramientas. Si recorres con el puntero del ratón los iconos (sin pulsarlo) aparece uno con el mensaje de "Botón". Selecciónalo. El puntero se transforma en una cruz. Pincha y arrastra en cualquier lugar de la hoja de Excel. Se irá formando un cuadrado, que cuando sueltes el botón derecho del ratón se transformará en un BOTÓN.
- Seguidamente se abre el menú de Macros. Selecciona la Macro TRASPONER. De esta forma, se asigna la macro al botón creado.
Prueba la macro pulsando el botón.
Por último, decirte que he asumido, tal y como mencionas en tu pregunta, que los datos se encuentran en las columnas "A" y "B", de la fila "1" a la "128".
Cuéntame cómo te ha ido.
Suerte.
César M.C.M

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas