Macro de Excel formato de fecha corta

Hola experto buenas noches, nuevamente escribo al foro, espero de favor me puedas ayudar, el problema es el siguiente:
Tengo en la columna "b" diferentes fechas escritos de la siguiente forma 03-mar-10, 05-mar-10, 17-feb-10, 26-feb-10, quiero que en la columna "e" se convierta en fecha corta, se iniciaría a partir de la fila 3, para lo cual hice el siguiente código pero únicamente escribe ene-00, ene-00 en todas las filas.
Anexo el código y de cómo lo escribe, ojala puedas apoyarme, saludos
COLUMNAS
"B"                      "E"                   DEBE DECIR
FECHA Mes
03-Mar-10         Ene-00                   Mar-10
10-Mar-10         Ene-00                   Mar-10
17-Feb-10         Ene-00                   Feb-10
26-Feb-10         Ene-00                   Feb-10
05-Mar-10         Ene-00                   Mar-10
Sub Mes()
Sheets(1).Select
If Range("b3") <> 0 Then
With Range("b3").CurrentRegion
.Columns(5) = Evaluate(.Columns(2).Address & .Columns(5).Address)
.Columns(5) = vbShortDate
Selection.NumberFormat = "mmm-yy"
End With
End If
End Sub

1 Respuesta

Respuesta
1
Sub Mes()
Sheets(1).Select
If Range("b3") <> 0 Then
With Range("b3").CurrentRegion
.Columns(5) = Evaluate(.Columns(1).Address).Value
.Columns(5).NumberFormat = "mmm-yy"
End With
End If
End Sub
En la parte donde dice Evaluate(. Columns(1). Address). Value pongo 1 porque supongo que la tabla empieza desde la columna B, si empieza desde A debes poner 2.
Kimari23 antes que nada gracias por tu respuesta, ya lo cheque y realiza los cambios y quedo super, te pido un último favor sobre este caso (es sobre el mismo código) quiero insertar en el código algo como la función EoMonth es decir, que me devuelva el número de serie del último día del mes para utilizarlos en cálculos (estoy realizando una tabla de amortización), en la columna E quedaría así como este ejemplo que anexo, pero al momento de concatenar esta columna lo tomaría como número consecuencial pero devolviendo el último día del mes, ya modifique el código de concatenación a mi tabla
COLUMNAS
B E ·SECUENCIAL
01-ene-10          ene-10                   40209
02-ene-10          ene-10                   40209
04-feb-10            feb-10                   40237
17-feb-10            feb-10                   40237
03-mar-10           mar-10                  40268
10-mar-10          mar-10                   40268
04-abr-10           abr-10                    40298
16-abr-10            abr-10                  40298
05-may-10           may-10                 40329
23-may-10          may-10                 40329
04-jun-10            jun-10                   40359
18-jun-10           jun-10                    40359
04-jul-10             jul-10                     40390
08-ago-10            ago-10                   40421
09-sep-10            sep-10                    40451
25-sep-10             sep-10                    40451
10-oct-10              oct-10                     40482
14-oct-10              oct-10                      40482
13-nov-10            nov-10                       40512
01-dic-10             dic-10                          40543
10-dic-10              dic-10                          40543
Nuevamente gracias por tu apoyo, saludos
Public Function fin_del_Mes(Fecha As Variant) As Date
    If IsDate(Fecha) Then
        fin_del_Mes = DateAdd("m", 1, Fecha)
        fin_del_Mes = DateSerial(Year(fin_del_Mes), Month(fin_del_Mes), 1)
        fin_del_Mes = DateAdd("d", -1, fin_del_Mes)
    End If
End Function
simplemente usala en la celda que necesites, por ejemplo   =fin_del_mes(B3)
Experto gracias por contestar, he intentado adptar el código que hiciste favor de enviarme al que tengo actualmente, pero no lo he conseguido, de favor me puedes indicar como hacerlo.
Sub Mes()
Sheets(5).Select
If Range("b3") <> 0 Then
With Range("b3").CurrentRegion
.Columns(5) = Evaluate(.Columns(2).Address).Value
.Columns(5).NumberFormat = "mmm-yy"
              End With
              End If
         End Sub
Public Function fin_del_Mes(Fecha As Variant) As Date
   If IsDate(Fecha) Then
      fin_del_Mes = DateAdd("m", 1, Fecha)
      fin_del_Mes = DateSerial(Year(fin_del_Mes), Month(fin_del_Mes), 1)
      fin_del_Mes = DateAdd("d", -1, fin_del_Mes)
      End If
      End Function
Estimado experto metí la instrucción que hiciste favor de enviarme como Option Explict pero no queda te envío el código completo de como lo tengo, como observaras también esta lo de concatenación, de favor me puedes indicar como le hago paera corra bien el código y pueda da como cerrada la pregunta, de antemano gracias por todo tu apoyo.
Pd si tu me indicas que cierre la pregunta lo haré, sin antes reconocerte todo tu apoyo, saludos
Option Explicit
Public Function fin_del_Mes(Fecha As Variant) As Date
If IsDate(Fecha) Then
fin_del_Mes = DateAdd("m", 1, Fecha)
fin_del_Mes = DateSerial(Year(fin_del_Mes), Month(fin_del_Mes), 1)
fin_del_Mes = DateAdd("d", -1, fin_del_Mes)
End If
End Function
Sub ConcatenarMinist()
Sheets(5).Select
If Range("b3") <> 0 Then
With Range("b3").CurrentRegion
.Columns(5) = Evaluate(.Columns(2).Address).Value
.Columns(5).NumberFormat = "mmm-yy"
If .Columns(5).NumberFormat = "mmm-yy" Then
End If
With Range("a3").CurrentRegion
.Columns(6) = Evaluate(.Columns(1).Address & "&" & .Columns(5).Address)
End With
End With
End If
End Sub
No he entendido muy bien que es lo que quieres hacer, hasta ahora solo esto ejemplo
celda b3=01-ene-10
celda E3= ene-10
en otra celda que no me has dicho que columna= 31-ene-10 que en formato numero seria 40209
hasta ahí he entendido, no entiendo el resto.
Experto lo que quiero hacer es que en la columna "e" iniciando en la celda "e3" me devuelva el número de serie del último día del mes para utilizarlos en cálculos, esto es por que en otra parte del proceso si ha un cliente dispone de recursos financieros en diversas fechas del mes, los sume e inicie el calculo financiero de una tabla de amortización, algo así como disposiciones de tarjeta de crédito, iniciaría con la primera fecha pero sumaría toda su disposición del mes, ejemplo:
Disposiciones: 01-ene-10 $10,000 ; 07-Ene-10 $20,000; 24-Ene-10 $7,000 suma total dispuesto en el mes $37,000 y así sucesivamente donde el inicio del período iniciaría a partir del 01/Ene/10 con un importe total entregado en el mes de enero de $37,000
Espero haberme dado entender, gracias
Ok, o sea en la columna E no necesitas que aparezca la fecha corta de la columna B, esta fecha corta no la usas, solo necesitas que aparezca el numero del ultimo día del mes que se encuentre en B.
Correcto, el código que hiciste favor de enviarme he intentado insertarlo en mi código actual pero no he podido, te agradeceré tu apoyo para concluir esta parte de mi proceso de favor, gracias
Pues mira, el código que te pase de
Public Function fin_del_Mes(Fecha As Variant) As Date
    If IsDate(Fecha) Then
        fin_del_Mes = DateAdd("m", 1, Fecha)
        fin_del_Mes = DateSerial(Year(fin_del_Mes), Month(fin_del_Mes), 1)
        fin_del_Mes = DateAdd("d", -1, fin_del_Mes)
    End If
End Function
Sirve para lo que quieres, solamente insértalo en un modulo y usalo en la celda que quieres. Ejemplo pon en la celda E3 esta formula =fin_del_Mes(B3) y ya

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas