Estoy VBA de Excel novato. Mis disculpas si me estoy preguntando lo que parece ser una pregunta obvia.
Tengo un archivo de texto CSV estoy abriendo en una hoja de cálculo de Excel. Una fila del archivo contiene la información de fecha con formato «DD-MMM’, (es decir: 9-FEB, o de 10 de MAYO). Cuando la hoja de cálculo de Excel se abre el archivo de la información de la fecha se cambia a «mm/dd/aaaa» y se lee como 02/09/2009 o 05/10/2009 donde el AA-MMM ahora es MM/YY/2009, (es decir: el 9-FEB convierte en 02/09/2009, y el 10 de MAYO se convierte en 05/10/2009).

Me gustaría saber si es posible volver a formatear el campo de AA-MMM mm/01/aaaa.

He tratado de analizar el campo de la fecha después de la conversión a texto con

Range("B11", "IV11").NumberFormat = "text"

Sin embargo, el valor es una serie de la fecha y no parsable.

He estado buscando sin éxito una lista de los NumberFormat opciones.

Si puedes me apunte en una dirección que será muy apreciada.

InformationsquelleAutor | 2009-02-04

4 Comentarios

  1. 3

    Sólo para responder a una parte de tu pregunta, aquí está la lista de las opciones de formato de fecha (sin contar el tiempo):

    d = day of month, e.g. 7
    dd = zero-padded day of month, e.g. 07
    ddd = abbreviated day name, e.g. Thu
    dddd = full day name, e.g. Thursday

    prácticamente el mismo que para el mes…

    m = month number, e.g. 7
    mm = zero padded month number, e.g. 07
    mmm = abbreviated month name, e.g. Jul
    mmmm = full month name, e.g. July

    años son más simples…

    yy = 2 digit year number, e.g. 09
    yyyy = 4 digit year number, e.g. 2009

    puedes combinarlos y poner lo de los separadores que te gusta en ellos

    por ejemplo,

    YY-MMM, 09-FEB
    DDDD-DD-MMM-YY, Wednesday-04-Feb-09
    dd/mm/yyyy, 04/02/2009
    mm/dd/yyyy, 02/04/2009

    He estado probando un par de cosas y creo que su mejor apuesta es para cambiar el formato en el archivo de texto para ajustarse a la más estándar de la fecha de disposición. Si usted puede invertir en ellos (por ejemplo, MMM-AA) vas a estar bien, o dividir en columnas separadas (lo que si en el momento de la importación puede definir como un separador, así como las comas?). Este es un caso en Excel tratando de ser inteligente es un dolor.

    HTH

  2. 1

    Si usted está utilizando actualmente File > Open para abrir el archivo CSV, a continuación, intente Data > Import External Data > Import Data lugar. Esto abrirá el asistente para importación de texto, que pueden ofrecer más flexibilidad en cómo importar el archivo. En concreto, se permite declarar una columna en el archivo como texto para que Excel no intenta analizar el valor

    Como Simón ha explicado, su terminología para la fecha actual formato no es correcto. 9-FEB corresponde a d-mmm formato y 02-19-2009 (NB cambiar deliberadamente a un inequívoco de la fecha para este ejemplo; 02-09-2009 es 9 de Febrero en los estados unidos, pero la 2ª de Septiembre en el reino unido) corresponde a mm-dd-yyyy

    Si usted quiere cambiar el NumberFormat de texto para el rango de partida en la celda B11 y terminando en la celda IV11 entonces se puede utilizar:

    Range("B11:IV11").NumberFormat = "@"

    @ significa formato de texto y usted necesita el : operador para indicar un rango de celdas contiguas. Su ejemplo original de Range("B11","IV11") realmente indica la unión de las celdas B11 y IV11, y por lo tanto sólo han afectado a dos células

    Es inusual tener los datos estructurados en las filas en lugar de las columnas. En lugar de tener su fechas en la fila 11, sería más común en la columna K en vez de modo que usted podría utilizar Range("K2:K65535") o simplemente Rows("K") la Mayoría de la incorporada en Excel cosas como Ordenar y Autofiltro asumir que sus datos se disponen en columnas de todos modos. Fila 1 tradicionalmente contiene los nombres de columna y, a continuación, cada fila contiene un registro individual. Es posible que desee buscar en cómo su archivo CSV se genera a ver si se puede switich a una más utilizable de la columna de la estructura de

    Si usted tiene una fecha como 19-FEB como texto en una celda, entonces, suponiendo que usted desea siempre la parte del año a ser el año en curso, se puede cambiar el primer día del mes en mm/dd/yyyy formato en VBA. En este ejemplo sólo se cambia una celda, pero se puede utilizar como la base para una amplia solución:

    Option Explicit
    
    Sub main()
    
    Dim strOrigValue As String
    
    With ThisWorkbook.Worksheets("Sheet1").Range("B11")
        strOrigValue = .Value
    
        .NumberFormat = "mm/dd/yyyy"
        .Value = DateSerial(Year(Date), Month(strOrigValue), 1)
    End With
    
    End Sub

    DateSerial crea un número de serie de fecha del año, mes y día. Year(Date) extractos de la parte del año de la fecha actual del sistema, Month(strOrigValue) se lleva la parte del mes a partir de los datos que ya está en la celda y queremos que el primer día del mes

  3. 0

    Para leer en un día, usted puede hacer algo como esto:

    myDate = DateValue(dateText)

    aunque hay advertencias a la forma en que excel puede interpretar fechas, y qué límites técnicos en qué fechas se puede almacenar. (puede que tenga que leer sobre máximos y mínimos de las fechas, y la forma en que excel interpreta los años de dos dígitos >30 vs <30, entre otras cosas)

    Para el formato de la fecha, puede utilizar uno de los tres funciones:

    myDateText = DatePart("yyyy", myDate) & "/" & DatePart("mm", myDate) & "/" & DatePart("dd", myDate)

    o este

    Format (myDate, "yyyy/mm/dd")

    o este

    FormatDateTime(#1/1/2020#, vbShortDate)

    Usted puede buscar en google para más documentación sobre cada función. Para la función de formato, usted tendrá que encontrar una buena referencia-he visto a algunos en lugar de uno incompleto. MSDN tiende a tener buenos, pero no siempre. Siéntase libre de golpe esta respuesta si desea más detalles.

  4. -2

    Esto supone que la 2 dígitos para el año 2000. Una vez que usted termina con la fecha incorrecta 9-Feb = en 02/02/2009, usted puede convertir esto a la fecha en que desea con la fórmula: =FECHA(Día(B11)+2000,Mes(B11),1)

Dejar respuesta

Please enter your comment!
Please enter your name here