domingo, 16 de noviembre de 2014

Apertura de archivos CSV en Excel con VBA


Es sabido por muchos que el formato de archivo CSV (Comma Separated Values o Valores Separados por Comas en castellano) es uno de los preferidos por multitud de aplicaciones (ERPs, CRMs, programas de contabilidad, facturación, etc.) para ser utilizado a la hora de exportar la información y que pueda ser intercambiada por varios usuarios.


Es necesario saber que, aunque el significado del acrónimo hace referencia a la "coma" como el tipo de separador utilizado, un archivo .csv podrá tener como separador a la "coma" o al "punto y coma". Esto dependerá del programa o aplicación que genere el archivo.


El formato de archivo .csv es un formato abierto, que puede ser utilizado por muchos programas. Tanto es así, que el propio Microsoft Excel es capaz de abrir este tipo de archivos adaptando automáticamente una información que está separada por comas o punto y coma, a una información encasillada en celdas. Pero esta adaptación fantástica ocurre solo en el caso de que el archivo que intentamos utilice el mismo tipo de separador (coma o punto y coma) que la configuración de nuestro ordenador. Como es sabido, nuestro equipo informático utiliza un tipo de separador de listas que está definido en la configuración regional de Windows (Panel de control).

Así pues, si nuestro ordenador tiene una configuración regional de México o de EEUU (por ejemplo), el separador de listas utilizado será la coma. Normalmente, aquellos países que utilizan el punto como separador de decimales, utilizan la coma como separador de listas. Por otro lado, los países que utilizan la coma para separar los decimales, utilizan como separador de listas el punto y coma.

Si nuestro ordenador tiene una configuración regional de España, el separador de listas utilizado será el punto y coma.

En definitiva, si el tipo de separador del archivo .csv que queremos abrir no coincide con el de nuestro equipo, la apertura y reconocimiento automático del archivo por parte de Excel, será fallido y no podremos utilizar la información correctamente:


Para solucionar este problema, tenemos las siguientes dos opciones (entre otras):

  • Forzar la apertura del archivo .csv con Excel y utilizar el asistente al que podemos acceder desde la ficha DATOS, haciendo clic en el botón "Texto en columnas":



       Con esto, Excel "ordenará" cada valor que hay entre comas en una celda.
  • La otra opción es solucionar el problema mediante VBA. Es decir, hacer una o varias macros a tal efecto y ejecutar la adecuada según nos convenga. Esto es conveniente si constantemente tenemos que cambiar el tipo de archivo a abrir (a veces con un tipo de separador y otras veces con otro tipo).
Si esta última es nuestra opción, nos podemos encontrar con dos casos, según nuestra ubicación geográfica:

1) Nuestra configuración regional tiene como separador de listas el punto y coma y el archivo que intentamos abrir tiene como separador de listas la coma...

En este caso, escribiremos la siguiente macro en un módulo estandar (esta macro obliga a Excel a obviar su configuración regional solo para el archivo que se intenta abrir):

Sub AbrirCSVComas()

   On Error Resume Next
   Dim AbrirArchivo As Variant

   AbrirArchivo = Application.GetOpenFilename
   If Right(AbrirArchivo, 4) <> ".xls" And _
       Right(AbrirArchivo, 5) <> ".xlsx" And _
       Right(AbrirArchivo, 4) <> ".csv" Then
       Exit Sub
   End If
   Workbooks.OpenText Filename:=AbrirArchivo, _
   DataType:=xlDelimited, Semicolon:=False, _
   Comma:=True, Local:=False

End Sub

2) Nuestra configuración regional tiene como separador de listas la coma y el archivo que intentamos abrir tiene como separador de listas el punto y coma...

En este caso, escribiremos la siguiente macro en un módulo estandar:

Sub AbrirCSVPuntoYComa()

   On Error Resume Next
   Dim AbrirArchivo As Variant


   Workbooks.OpenText Filename:=AbrirArchivo
   Columns("A:A").Select
   Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
   TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
   Semicolon:=True, Comma:=False, Space:=False, Other:=False


End Sub

Después de tener preparadas las macros, solo tenemos que ejecutarlas desde la ficha PROGRAMADOR (DESARROLLADOR en Excel 2013).


Si desea llevar a la práctica todo lo que le hemos ofrecido en este artículo, puede asistir a nuestros cursos prácticos de Excel o puede solicitarlos in company:














6 comentarios:

  1. Tengo una duda, tengo una macro aue abre un csv, cuando se abre con vba aparece todo separado y me daña unos datos y cuando lo abro manual, aparece como corresponde¿Qué debo hacer para que no haga la conversión?

    ResponderEliminar
    Respuestas
    1. Buenos días
      Excel abre los archivos según las caracteristicas configuradas en Windows respecto de los separadores de listas (Panel de control, Reloj, Idioma y región, Cambiar formatos de fecha, hora o número)
      Saludos.

      Eliminar
    2. Sería solo agregar false en coma y punto coma...así te aparecerá siempre sin ordenar...Algo así:

      Dim AbrirArchivo As Variant
      AbrirArchivo = Application.GetOpenFilename
      Workbooks.OpenText Filename:=AbrirArchivo, _
      DataType:=xlDelimited, Semicolon:=False, _
      Comma:=False, Local:=True

      Eliminar
    3. Utilizando el código indicado arriba, sería seleccionar false en coma y false en punto coma...asi te aparece siempre sin ordenar...
      Semicolon:=False, Comma:=false
      Suerte

      Eliminar
  2. @Leonardo Garcia gracias por tu aportación. Llevaba mucho tiempo detrás de esto y no lo conseguía

    ResponderEliminar
  3. Hola. Ejecuto el algoritmo AbrirCSVComas(), selecciono el fichero csv que quiero cargar en el excel y lo hace bien, pero cuando intento hacerlo de nuevo ya no me lo carga más. He cambiado el nombre al fichero; he renombrado el nombre de la hoja excel....pero nada, no me lo carga.

    Muchas gracias de antemano
    Saludos.

    ResponderEliminar