Saltar al contenido

Curioso. Función VBA en una hoja y me modifica todas las del libro


tximo

Recommended Posts

publicado

Hola Buenas, tengo un problema. He generado en una hoja, una tabla con personal y funciones. He creado despues una funcion en VBA que según aparezca en una celda SI/No (Dependiendo si el personal está trabajando o no), me hace unos cálculos de sumarme unas celdas (me calcula si el operario realiza una actividad o no), y me saca un total (que es donde tengo puesta la función).

 La función va bien, el problema es que esa hoja la voy repitiendo cada mes, y si actualizo las formulas de la pestaña del último mes, pulsando CTRL+ALT+F9, me modifica los datos de todos los meses anteriores, dejándome en las celdas, los valores del ultimo mes en todas las hojas. Es decir, si yo calculo Enero pulsando CTRL+ALT+F9, me salen los valores de Enero correctos, pero si voy al ultimo mes y actualizo, me calcula bien los del ultimo mes, pero si voy a la pestaña de Enero, me ha puesto los datos del ultimo mes en todas. 

 

La función es esta: 

 

'Si tenemos las celdas, como (i,j)>> (fila, columna)
'
'    fila As Integer       > Campo que indica el numero de fila donde se empieza a evaluar
'    columna As Integer    > Campo que indica el numero de columna donde se empieza a evaluar
'    iteraciones As Integer                 > Nº de veces que se va a preguntar la condición
'    columna_evaluacion As Integer          > Columna donde se encuentra la celda a evaluar con su contenido
'    valor_evaluación as String             > Valor a evaluar "SI"

Function Contar_Polivalencia_verde(fila As Long, columna As Long, iteraciones As Long, columna_plantilla As Long) As Long

'inicializo la variable resultado
Dim resultado As Long
Dim i As Long
i = fila
resultado = 0
 
    'comienzo el bucle
    For i = fila To iteraciones    
        If Cells(i, columna_plantilla).Value = "SI" And Cells(i, columna).Value = "SI" Then   'criterio que debe cumplir                
                     resultado = resultado + 1
                     End If
    Next
               Contar_Polivalencia_verde = resultado
    End Function

 

 

Os adjunto el archivo de ejemplo para ver si se puede encontrar una solución. Muchas gracias por adelantado.

 

Tabla Ejemplo.xlsm

publicado

Qué tal @tximo ,

Prueba a introducir una variable más en la función, el índice de la hoja:
 

Function Contar_Polivalencia_verde(indiceHoja As Integer, fila As Long, columna As Long, iteraciones As Long, columna_plantilla As Long) As Long

'inicializo la variable resultado
Dim resultado As Long
Dim i As Long
i = fila
resultado = 0
 
    'comienzo el bucle
    For i = fila To iteraciones
    
        If Sheets(indiceHoja).Cells(i, columna_plantilla).Value = "SI" And Sheets(indiceHoja).Cells(i, columna).Value = "SI" Then   'criterio que debe cumplir
                
                     resultado = resultado + 1
                     End If
    Next
               
         Contar_Polivalencia_verde = resultado
    End Function

Así la fórmul en cada hoja sería:

Hoja1=Contar_Polivalencia_verde(1;17;6;100;2)

Hoja1=Contar_Polivalencia_verde(2;17;6;100;2)

Hoja1=Contar_Polivalencia_verde(3;17;6;100;2)

Te dejo el ejemplo. Donde no aparece #VALOR son las celdas que ya he modificado

Tabla Ejemplo.xlsm

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
    • Hola nuevamente, mi duda sigue siendo la ruta, o rutas, finales que quedan, esas que llamas "relativas"; igual por si acaso pon 3 o 4 de esas, tal cual son y/o se ven en el explorador de cada PC y, de ser posible, en cualquier otro "lado" en que las veas.
    • Hola, tal cual se plantea, solamente con macros (VBA); en todo caso, hacerlo a mano o con "CTRL + ;". Saludos.
    • Mil gracias, en verdad todo apoyo es super agradecido,   Su aporte y comentarios valen mucho para in servidor, y tiene razon esperare a conocer si alguien comparte alguna otra manera,   Gracias!!! (y)
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.