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

Respuesta
1

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.

Lo sustituyo ahora mismo, y veo si todo OK.. pero y lo segundo que le pedí? como integrar la otra fórmula en el mismo código para matar todos los pájaros de un tiro.. gracias!!

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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas