You are on page 1of 4

Acomodar datos segn

el mes de una celda

Captulo

ACOMODAR DATOS SEGN EL MES DE UNA CELDA


El planteamiento es el siguiente: hay una tabla con dos columnas: nombre y
fecha de cumpleaos. Cada vez que se ingrese una fecha, Excel deber
encargarse, automticamente, de enviar el nombre de la persona a otra hoja,
en una columna que coincida con el mes de su cumpleaos.
Las imgenes a continuacin, para entender mejor un poco todo esto:

Nombre y fecha de cumpleaos, respectivamente.

Sobre la base de los datos de la tabla anterior, nuestra macro deber llevarse
el nombre de la persona a otra tabla, y colocarlo en el mes que corresponda a
su cumpleaos:

Pg. 1

Luis M. Salinas
CLMS C.A.

Captulo

Acomodar datos segn


el mes de una celda

Cada uno de los nombres, distribuidos segn el mes de su natalicio.


La macro es muy sencilla y solo consta de un par de estructuras If...Else...End
If. Como principal medida, y para evitar errores, voy a validar los datos de la
columna B, para que solo acepte fechas:

Solo se aceptarn fechas mayores al primero de enero de 1900.


Para aprovechar las herramientas como corresponde, ubicaremos el cdigo
VBA dentro de la ventana correspondiente al objeto Worksheet, utilizando el
evento Worksheet_Change (al cambiar). Se disparar la macro cada vez que se
produzca algn cambio en la hoja.

Luis M. Salinas
CLMS C.A.

Pg. 2

Acomodar datos segn


el mes de una celda

Captulo

Sigamos. La fecha se deber ingresar en la columna B, siendo los pasos a


seguir (ms o menos) los que se detallan a continuacin:
a) Si la columna es B (la nmero 2)
b) Si la fila es mayor a 1 (en la primer fila tenemos los encabezados)
c) Si el dato ingresado es fecha
d) Me llevo el nombre de la persona a la otra tabla.
Y ahora se explica bien para que se efectu la validacin de datos: voy a tomar
el nmero del mes para saber en qu columna de la otra tabla colocar el
nombre. Enero ir en la columna 1, Febrero en la 2, Marzo en la 3 y as
sucesivamente. Les muestro el cdigo, correctamente comentado para una
mejor interpretacin (recordemos que el argumento "target" es la celda o
rango que sufre la modificacin):
Private Sub Worksheet_Change(ByVal Target As Range)
'variables de uso local
Dim Mes As Byte
Dim Fila As Long

'si la columna de la celda cuyo contenido cambia es la 2 (B)


If Target.Column = 2 Then
'si la fila de dicha celda es mayor a 1

Pg. 3

Luis M. Salinas
CLMS C.A.

Captulo

Acomodar datos segn


el mes de una celda

If Target.Row > 1 Then


'si el dato ingresado NO es fecha
If Not IsDate(Target.Value) Then
'salgo del sub
Exit Sub
'si el dato es fecha
ElseIf IsDate(Target.Value) Then
'tomo el mes de la fecha y lo almaceno en una variable
Mes = Month(Target.Value)
'veo cual es la ltima fila ocupada de esa columna en la otra tabla,
'y le sumo 1, para colocar el dato debajo:
Fila = Sheets("cumpleaos").Cells(65536, Mes).End(xlUp).Row + 1
'y aqu llevo el nombre de la persona a la otra hoja: uso las variables
'Fila y Mes para crear la coordenadas y colocar el nombre en la celda
'correcta
Sheets("cumpleaos").Cells(Fila, Mes).Value = Cells(Target.Row,
(Target.Column - 1))
End If
End If
End If
End Sub

Luis M. Salinas
CLMS C.A.

Pg. 4

You might also like