Macro para convertir número a texto fecha

Aretradeser

Board Regular
Joined
Jan 16, 2013
Messages
176
Office Version
  1. 2013
Platform
  1. Windows
Necesito una macro para que cuando introduzaca un numero en la celdas A1 y A2, me devuelva el mes, en texto, correspondiente a ese número.
Ejemplo: 1 devuelva Enero; 2 devuelva Febrero; 3 devuelva Marzo...12 devuelva Diciembre.
Gracias,
Saludos
 

Excel Facts

Move date out one month or year
Use =EDATE(A2,1) for one month later. Use EDATE(A2,12) for one year later.
tu consulta parece confusa (?)

quieres que al introducir (p.e.) 1 en [A1] aparezca "enero" en la misma [A1] ?
y si introduces (p.e.) 5 en [A2] aparezca "mayo" en la misma [A2] ?

o quieres que el numero que introduzcas en [A1] aparezca el mes en letra en [A2] ?

saludos,
hector.
 
Upvote 0
tu consulta parece confusa (?)

quieres que al introducir (p.e.) 1 en [A1] aparezca "enero" en la misma [A1] ?
y si introduces (p.e.) 5 en [A2] aparezca "mayo" en la misma [A2] ?

o quieres que el numero que introduzcas en [A1] aparezca el mes en letra en [A2] ?

saludos,
hector.
Que al introducir (p.e.) 1 en [A1] aparezca "enero" en la misma [A1].
y si introduzco (p.e.) 5 en [A2] aparezca "mayo" en la misma [A2] ?
 
Upvote 0
haz un clic-secundario sobre el nombre en la etiqueta de "esa" hoja y selecciona: "ver código" (se abrirá el editor de VBA)
copia/pega (o escribe) lo siguiente:

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$A$1", "$A$2"
If Target < 1 Or Target > 12 Or Not IsNumeric(Target) Then Exit Sub
Application.EnableEvents = False
Target = Format(DateSerial(2000, Target, 1), "mmmm")
Application.EnableEvents = True
End Select
End Sub

regresa a la interfaz de Excel (atajo: Alt + Q)
introduce valores entre 1 y 12 en esas celdas [A1] y [A2]

saludos,
hector.
 
Upvote 0
Gracias Héctor Miguel, funciona perfectamente; pero con lo único que no había contado es que ahora, al devolverme el valor como texto, no puedo utilizar estas celdas en los cáculos. Antes, al poner números, que se correspondían con los meses, podía utilizarlos, ahora no. Quizás la solución pase con crear un formato personalizado de celda, pero las docenas de pruebas que he realizado no me han dado resultado alguno. Si se te ocurre algo, te agradeceré tus comentarios.
Saludos.
 
Upvote 0
1) cambia la instrucción entre los dos "Application.EnableEvents" (true y false) a lo siguiente:
Target = DateSerial(Year(Date), Target, 1)

2) aplica un formato personalizado a esas celdas de: "mmmm"

el código deposita como fecha el día 1 del mes (1 a 12) entrado en esas celdas (del año en curso)

saludos,
hector.
 
Upvote 0
1) cambia la instrucción entre los dos "Application.EnableEvents" (true y false) a lo siguiente:
Target = DateSerial(Year(Date), Target, 1)

2) aplica un formato personalizado a esas celdas de: "mmmm"

el código deposita como fecha el día 1 del mes (1 a 12) entrado en esas celdas (del año en curso)

saludos,
hector.

Me da error, siquieres te envio el archivlo de ejemplo
 
Upvote 0
el tema deja de ser sencillo después de que las celdas contienen datos de fecha-real
(ya no son valores entre 1 y 12, sino números seriales mas grandes)

con las siguientes modificaciones la macro funciona con un "pero"...
no consigo (aun) obtener el mes 1 (enero), lo voy a seguir investigando (???)

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$A$1", "$A$2"
Application.EnableEvents = False
Target = DateSerial(Year(Date), Day(Target) + 1, 1)
Application.EnableEvents = True
End Select
End Sub

saludos,
hector.
 
Upvote 0
ok, después de un poco de I+D (R&D) prueba con el siguiente código:

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$A$1", "$A$2"
Application.EnableEvents = False
Target = DateSerial(Year(Date), Day(CDate(Target) + 1), 1)
Application.EnableEvents = True
End Select
End Sub

saludos,
hector.
 
Upvote 0
Hector, funciona perfectamente. Te lo has trabajado a conciencia. En esa misma hoja, para realizar los cálculos, ya existía la siguiente macro de la que desconozco su autor, puesto que este libro excel ya existia en mi oficina. mi perguanta es, se pueden unir ambas en una sola?
Macro
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A2")) Is Nothing Then
For I = 3 To Range("A" & Rows.Count).End(xlUp).Row
If Range("A2") = "" Or Range("A2") = 0 Then
ki = 2
kf = Range("A1")
Else
If Range("A2") < Range("A1") Then Exit Sub

ki = (Range("A1") * 3) - 1
kf = Range("A2") - Range("A1") + 1
End If
z1 = 0: z2 = 0: z3 = 0
co = 0
For j = 1 To kf
z1 = z1 + Cells(I, ki)
z2 = z2 + Cells(I, ki + 1)
z3 = z3 + Cells(I, ki + 2)
ki = ki + 3
co = co + 1
Next
Cells(I, "AL") = z1 / co
Cells(I, "AM") = z2 / co
Cells(I, "AN") = z3 / co
Next
End If
End Sub

Muchas gracias.
 
Upvote 0

Forum statistics

Threads
1,223,948
Messages
6,175,567
Members
452,652
Latest member
eduedu

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top