Pasar datos de una planilla de excel a access
Necesito pasar esta información de pagos que cargué en un excel
a esta tabla de mi base de datos
¿Se podrá hacer de una manera automática?
2 respuestas
Ve al menu de access en la pestaña datos externos y selecciona importar a una base de datos de access de ahí seleccionas el archivo de excel desde el que deseas hacer la importación y posteriormente indica si quieres una nueva tabla en access o agregar en una existente y sigues los pasos que te indica access es muy sencillo
Eso lo sabia... pero analiza el formato de la tabla de excel y la manera que necesito ingresar los datos de los pagos. Son completamente diferentes. Y si genero otra tabla será completamente distinta.
Para la pregunta que haces esa es la respuesta
Pero por lo que veo necestas algo mas y que no se puede apreciar con una simple imagen de excell
¿Quieres pasar el formato de las celdas del excell?
¿Las fomulas o algo mas?
Explica
La información. En excel está por cada columna un mes del año... los que pagaron todo el año, y el año siguiente... en cada celda puse un 0 por mes pagado y nada por mes no pagado.
En access tengo la tabla para ingresar fecha si es que pagó o no ingresar nada si no pagó.
- Compartir respuesta
.31.01.17
Hola, Sergio
Es, lejos, más práctico hacerlo desde MS Access.
Al menos, a mi me resulta.
En la tabla donde querés que se incorporen, busca la opción Datos Externos y le indicás desde donde traerlos (libro y Hoja):
Si el archivo que usas para traer los datos fuese siempre el mismo, podes guardar los pasos que hiciste la primera vez y luego elegir esa secuencia que es como automatizar el proceso.
Una cosa más, el archivo de MS Excel tiene que tener todas las columnas con títulos o definir un nombre de rango a exportar.
Abrazo
Fernando
(Buenos Aires, Argentina9
.
Pero fíjese que la tabla de excel solo me dice que pago cuando tiene un 0 en la celda. En cambio en la tabla de access tengo que especificar día y mes... (¿en realidad solo mes) cómo traduce access esa información? ¿Se puede? Se me hace que no. lo que ustedes me dicen no se aplica a este ejercicio.
.
Buenas, de nuevo
Ese es otro cantar...
Lo que te comenté sobre la estructura del archivo de MS Excel aplica para lo que consultas.
En cualquier sentido: De Excel a Access o de Access desde Excel la base en éste último tiene que tener la misma estructura que tu tabla en MS Excel.
Es decir, deberías tener una hoja dedicada en tu archivo de Excel que reconvierta lo de la imagen 1 con la misma estructura de campos que la que muestras en la imagen 2:
Id de pago --- numero de socio --- fecha de pago
A su vez, por cada 0 -pagado- debería indicar una línea con el numero de socio y la fecha que corresponda. Yo, además, le agregaría el año y ya verás por qué.
Armé la siguiente rutina de VBA que con unos pocos ajustes te servirá para realizar la conversión de tu matriz a una base que MS Access entienda y pueda importar.
La única condición conque deberías transar es que tengas en la planilla a transferir un año por vez. Eso creo que es negociable porque simplemente tendrías que duplicar las hojas y colocar en uno el año 2016 y en el otro el 2017.
Ok. Si estás de acuerdo, entrá en el Editor de VBA (Atajo: Alt + F11), allí insertá un módulo (Insertar-Módulo) y pegate el siguiente código:
Sub PrepAccess() '---- Variables modificables ---- '=== SERGIO, modifica estos datos de acuerdo a tu proyecto: ' CeldaIni = "A2" 'celda con el primer número de socio CeldDest = "A2" 'celda primer registro en destino HojaDest = "paseAccess" 'Hoja de conversión '---- fin Variables ' '---- inicio de rutina: ' 'solicita año a convertir ElMensaje = "Está por iniciar el proceso de conversión para llevar pagos a MS Access" & Chr(10) & _ "Esto borrará los registros de la hoja " & HojaDest & Chr(10) & "y pasará los de esta hoja" & Chr(10) & Chr(10) & _ "si está de acuerdo favor ingresar el año con 4 dígitos " & Chr(10) & "(dejar en blanco para salir)" ElTitulo = "CONVERSION DE TABLA A BASE Tipo ACCESS" Anio = InputBox(ElMensaje, ElTitulo) If Len(Anio) = 4 Then 'Borra contenido de la hoja de destino excepto títulos Sheets(HojaDest).Range(CeldDest, "J30000").ClearContents 'Carga nombres de meses a matriz NomMeses = Array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Setiembre", "Octubre", "Noviembre", "Diciembre") LaFila = 0 cont = 0 Do While Not IsEmpty(Range(CeldaIni).Offset(LaFila)) NroSocio = Range(CeldaIni).Offset(LaFila).Value For colu = 1 To 12 If Len(Range(CeldaIni).Offset(LaFila, colu).Value) > 0 Then With Sheets(HojaDest) .Range(CeldDest).Offset(cont, 0).Value = cont ' coloca ID de PAGO .Range(CeldDest).Offset(cont, 1).Value = NroSocio 'coloca NRO de SOCIO .Range(CeldDest).Offset(cont, 2).Value = NomMeses(colu - 1) & "/" & Anio 'Coloca MES/AÑO .Range(CeldDest).Offset(cont, 3).Value = Anio 'Coloca AÑO End With cont = cont + 1 End If Next LaFila = LaFila + 1 Loop ElMensaje = IIf(cont = 0, "NO SE TRASLADO DATO ALGUNO", "Se transfirieron: " & cont & " linea" & IIf(cont > 1, "s", "") & Chr(10) & "a la hoja " & HojaDest) TipoMens = IIf(cont = 0, vbCritical, vbInformation) ElTitulo = IIf(cont = 0, "NO SE HIZO NADA", "TERMINADO!") Application.ScreenUpdating = True MsgBox ElMensaje, TipoMens, ElTitulo Else ElMensaje = IIf(Len(Anio), "EL AÑO INGRESADO NO ES CORRECTO (4 dígitos)", "NO INGRESO AÑO") & Chr(10) & "Rutina termina aquí" & Chr(10) TipoMens = vbCritical ElTitulo = "AÑO NO VALIDO - FIN RUTINA" Application.ScreenUpdating = True MsgBox ElMensaje, TipoMens, ElTitulo End If End Sub
Como verás, la rutina tiene algunas variables al inicio para que las modifiques si no coincidieran con las que tienes en tu archivo.
Al principio saldrá un diálogo de control que te preguntará qué año estás por trasferir.
Además sirve como salida de emergencia por si te equivocaste al lanzar la macro.
Con el dato de año, armará las fechas donde encuentre una celda con dato y agregará el numero de socio y el año. No sé de donde tomás el numero de comprobante. De momento la rutina coloca un numero consecutivo.
A mi me quedó así:
El hecho de agregar el año está sostenido en que creo que esta tabla será transferida durante el transcurso del mismo. Entonces, cada vez que disparas la rutina, ésta elimina los registros de la segunda hoja y transfiere todo de nuevo.
Si ya hubieses llevado los datos a Access antes, e importas esta nueva base, algunos se duplicarán allá.
Por lo tanto, antes de importar la nueva base, en tu tabla de MS Access deberías tener una Consulta de eliminación para que te quite todos los registros del año a transferir. ¿Me explico?
Muy bien, paisano. Espero que esta solución te sirva.
Un abrazo
Fer
.
- Compartir respuesta