Fórmula que se desplace según la cantidad de registros en Excel.
Tengo una Hoja de excel con un botón para importar los datos de una tabla en access. Cree una columna en dicha hoja excel para calcular la edad dependiendo de la columna fecha de nacimiento que voy a importar.
=SIFECHA(J2;HOY();"y")
El asunto es que puede variar el númeno de personas importadas, aumentar o disminuir y quiero que esta fórmula automáticamente me calcule para la cantidad de registros que sean, y no haya que manualmente correrla si aumentaron los registros...
1 respuesta

H o l a:
Agrega lo siguiente a tu macro o ejecuta la siguiente macro para poner la fórmula, cambia la letra K por la letra de la columna donde quieras poner la fórmula, si cambias la letra K, también deberás cambiar el -1 por el número de columnas que te muevas hacia la derecha, po ejemplo, si cambias la K por la L, entonces tendrás que poner -2, por M -3, etc.
Si tienes problemas para adaptar la macro, dime en qué columna vas a poner la fórmula y te envío la actualización.
Sub TuMacro() ' ' ' Instrucciones de tu macto ' ' c = "K" Range(c & "2:" & c & Rows.Count).ClearContents u = Range("J" & Rows.Count).End(xlUp).Row Range(c & "2:" & c & u).FormulaR1C1 = "=DATEDIF(RC[-1],TODAY(),""y"")" ' 'Fin End Sub

Creo entender bien.. aún así preferiría que me sustituyera los valores..
debo utilizar varias columnas.. BO;BP;BQ;BR...
y puede que alguna más..
Gracias..

¿Puedes explicarte?
¿En dónde vas a poner la fórmula sifecha?
En dónde tienes la fecha, ¿en la columna J?
Si vas a poner la fórmula sifecha en la columna BO, la macro quedaría así:
Sub TuMacro() ' ' ' Instrucciones de tu macto ' ' c = "BO" Range(c & "2:" & c & Rows.Count).ClearContents u = Range("J" & Rows.Count).End(xlUp).Row Range(c & "2:" & c & u).FormulaR1C1 = "=DATEDIF(RC[-57],TODAY(),""y"")" ' 'Fin End Sub
Con mucho gusto te ayudo con todas tus peticiones.
Valora esta respuesta y crea una nueva pregunta en el tema de microsoft excel, en el desarrollo de la pregunta escribe: "para Dante Amor"

Correcto como es la misma fórmula que uso, la fecha está en J
Solo he usado macros o en botones en excel, abrí visualB y pegé todo, compilé y no da errores, pero tampoco hace nada cuando agrego otra fila para comprobar.... o no se si tengo que poner la macro en la primera celda de BO de alguna forma.. disculpa la ignorancia.. Si fuera tan amable de paso a paso indicarme com poner este código..
Gracias..

Gracias funciona al 100.. voy a intentar asociarla al mismo botón que tengo para ejecutar la de importar los datos de access, ¿qué cree usted? Saludos.

Te ayudo a poner el código en tu macro, pero tienes que poner tu código para regresarte el código completo.
O no sé a qué te refieres con esto que pusiste al inicio de tu pregunta:
"Tengo una Hoja de excel con un botón para importar los datos de una tabla en access"
¿Tienes una macro asociada a ese botón o a qué te refieres?

Hola, no puedo sentarme con mucha más rapidez en la pc por desgracia..
Tengo un botón, asociado a una macro para importar los datos desde excel, y le agregué el que me inviaste tú quedando de la siguiente forma:
Sub actualizar_datos()
'ACTUALIZAMOS BASE DE DATOS
Dim path_Bd As String
Dim cnn As New ADODB.Connection
Dim recSet As New ADODB.Recordset
Dim strDB, strSQL As String
Dim strTabla As String
Dim lngCampos As Long
Dim i As Long
Dim bBien As Boolean
On Error GoTo ControlError
bBien = True
'CONECTAMOS CON LA BASE DE DATOS DE ACCESS Y ABRIMOS CONSULTA
path_Bd = "G:\Base de datos RRHH\COLABORADORES.accdb"
cnn.Provider = "Microsoft.ACE.OLEDB.12.0"
cnn.Properties("Data Source") = path_Bd
cnn.Properties("Jet OLEDB:Database Password") = "bdrhcuba"
cnn.Open
strTabla = "Colaboradores"
strSQL = "SELECT * FROM " & strTabla & " "
recSet.Open strSQL, cnn
'COPIAR LOS DATOS A LA HOJA
Worksheets("Colaboradores").Select
'LIPIAMOS DATOS DE EXCEL ANTES DE ACTUALIZAR
limpiardatos = Sheets("Colaboradores").Range("A" & Rows.Count).End(xlUp).Row
Sheets("Colaboradores").Range("A2:z" & limpiardatos).ClearContents
'GRABAMOS NUEVA BASE DE DATOS DE ACCESS
Sheets("Colaboradores").Cells(2, 1).CopyFromRecordset recSet
'COPIAMOS RÓTULOS
lngCampos = recSet.Fields.Count
For i = 0 To lngCampos - 1
Sheets("Colaboradores").Cells(1, i + 1).Value = recSet.Fields(i).Name
Next
'DESCONECTAMOS
recSet.Close: Set recSet = Nothing
cnn.Close: Set cnn = Nothing
Sheets("Colaboradores").Select
MsgBox "LA BASE DE DATOS HA SIDO ACTUALIZADA CORRECTAMENTE."
Salir:
On Error Resume Next
If Not bBien Then
MsgBox "NO SE HA PODIDO ACTUALIZAR LA BASE DE DATOS, INTÉNTALO MÁS TARDE."
End If
recSet.Close: Set recSet = Nothing
cnn.Close: Set cnn = Nothing
Exit Sub
ControlError:
bBien = False
Resume Salir
c = "BO"
Range(c & "2:" & c & Rows.Count).ClearContents
u = Range("J" & Rows.Count).End(xlUp).Row
Range(c & "2:" & c & u).FormulaR1C1 = "=DATEDIF(RC[-57],TODAY(),""y"")"
End Sub
___________________________________________________________
Otra cosa, en las columnas BP,BQ,BR tambien tengo unas fórmula:
=CONSULTAV(AD4;Wilayas!A$2:B$49;2)
para que tomando un código_provincia en la columna AD en este caso, me devuelva cuál es el nombre del lugar almacenado en otra hoja que tiene en dos columnas asociados el código y el nombre.. espero haberme explicado bien.. aunque seguro ya usted sabe con ver la fórmula de que va esto.. y quiero que haga lo mismo que la anterior si aumenta o disminulle el número de registros importados se mueva en la misma medida, ya lo tengo bien así para la edad
Gracias!!!!!
Podrías ayudarme a adaptarlo de la misma forma

H o l a:
El código completo quedaría así:
Sub actualizar_datos() 'ACTUALIZAMOS BASE DE DATOS Dim path_Bd As String Dim cnn As New ADODB.Connection Dim recSet As New ADODB.Recordset Dim strDB, strSQL As String Dim strTabla As String Dim lngCampos As Long Dim i As Long Dim bBien As Boolean On Error GoTo ControlError bBien = True 'CONECTAMOS CON LA BASE DE DATOS DE ACCESS Y ABRIMOS CONSULTA path_Bd = "G:\Base de datos RRHH\COLABORADORES.accdb" cnn.Provider = "Microsoft.ACE.OLEDB.12.0" cnn.Properties("Data Source") = path_Bd cnn.Properties("Jet OLEDB:Database Password") = "bdrhcuba" cnn.Open strTabla = "Colaboradores" strSQL = "SELECT * FROM " & strTabla & " " recSet.Open strSQL, cnn 'COPIAR LOS DATOS A LA HOJA Worksheets("Colaboradores").Select 'LIPIAMOS DATOS DE EXCEL ANTES DE ACTUALIZAR limpiardatos = Sheets("Colaboradores").Range("A" & Rows.Count).End(xlUp).Row Sheets("Colaboradores").Range("A2:z" & limpiardatos).ClearContents 'GRABAMOS NUEVA BASE DE DATOS DE ACCESS Sheets("Colaboradores").Cells(2, 1).CopyFromRecordset recSet 'COPIAMOS RÓTULOS lngCampos = recSet.Fields.Count For i = 0 To lngCampos - 1 Sheets("Colaboradores").Cells(1, i + 1).Value = recSet.Fields(i).Name Next 'DESCONECTAMOS recSet.Close: Set recSet = Nothing cnn.Close: Set cnn = Nothing Sheets("Colaboradores").Select MsgBox "LA BASE DE DATOS HA SIDO ACTUALIZADA CORRECTAMENTE." 'Por.Dante Amor c = "BO" Range(c & "2:" & c & Rows.Count).ClearContents u = Range("J" & Rows.Count).End(xlUp).Row Range(c & "2:" & c & u).FormulaR1C1 = "=DATEDIF(RC[-57],TODAY(),""y"")" 'Por.Dante Amor Salir: On Error Resume Next If Not bBien Then MsgBox "NO SE HA PODIDO ACTUALIZAR LA BASE DE DATOS, INTÉNTALO MÁS TARDE." End If recSet.Close: Set recSet = Nothing cnn.Close: Set cnn = Nothing Exit Sub ControlError: bBien = False Resume Salir End Sub
Con todo gusto te ayudo con todas tus peticiones.
Crea una nueva pregunta para cada peticón en el tema de microsoft excel, en el desarrollo de la pregunta escribe: "para Dante Amor"
Explica con detalle y con ejemplos reales lo que necesitas.
- Compartir respuesta
