FUNCIÓN o MACRO que cuenta el número de líneas

Resuelto
Elariana -  
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   -
Hola,

Tengo un problema con mi tabla. He estado buscando desde esta mañana en diferentes foros, pero no encuentro la respuesta a mi problema. Aún no sé si debo usar una macro o si una simple función puede ser suficiente.

Te expongo mi problema.

Me gustaría contar el número de filas de una tabla que cumplan con el criterio de otra columna. Parece simple a primera vista, pero dado que estoy acudiendo a ti es porque se complica, así que voy a intentar ilustrar el problema:

Así que tengo varias columnas

A (identificador) - ... - AH (fecha)

Me gustaría contar el número de filas en A antes de una cierta fecha que se introduce en la columna AH. Donde se complica es que la tabla tiene varias filas combinadas (por ejemplo, las filas 9 y 10 corresponden al mismo identificador). Por lo tanto, por otras razones tengo que dividir las celdas correspondientes a la fecha en AH para hacer funciones SOMMEPROD. Ahora el problema es evitar los duplicados.

En fin, un problema un poco complicado, así que puedo ayudar a esclarecerlo porque no es fácil de exponer.

No dudes en ayudarme y en hacerme preguntas.

Atentamente

Elariana

P.D: trabajo en Open Office Calc, pero si tengo la solución en Excel, ¡también me vale!

Configuración: Windows XP / Firefox 3.6.8

13 respuestas

  1. tontong Mensajes publicados 2575 Fecha de registro   Estado Miembro Última intervención   1 064
     
    Hola,
    Está un poco confuso todo esto.
    Si mi interpretación es correcta, hay que contar las filas que cumplen dos condiciones:
    la fecha en la columna AH es anterior a una fecha fijada (en $AG$3, por ejemplo)
    y la celda correspondiente en la columna A no está vacía.
    En esta hipótesis se puede aplicar =SUMAPRODUCTO((AH2:AH100<$AG$3)*(A2:A100<>""))
    Cuidado con las celdas combinadas, la celda que contiene un valor no siempre es la que creemos dependiendo de la alineación elegida.
    0
  2. Elariana
     
    Esto responde en parte a mi pregunta, porque efectivamente me cuenta el número de líneas, pero el problema viene de las celdas divididas. Me explico:

    Para un identificador en la columna A (identificador), puedo tener dos líneas fusionadas pero divididas en AH para el campo fecha, que, por lo tanto, se duplica. Esta fórmula propuesta no tiene en cuenta mis duplicados.
    0
  3. eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
     
    Hola a todos,

    Para un identificador de la columna A (identificador), puedo tener dos líneas fusionadas pero divididas en AH para el campo fecha, que por lo tanto está duplicado. Esta fórmula propuesta no tiene en cuenta mis duplicados.
    Así que eso significa que solo te interesa la presencia de una fecha....

    =CONTAR.SI(AH2:AH100;"<" & $AG$3)

    eric
    0
  4. Elariana
     
    No, justamente la presencia de la fecha es interesante únicamente como criterio, porque con esta función propuesta, cuento las filas de la columna AH (campo fecha) y, por lo tanto, cuenta los duplicados.

    De hecho, mi tabla se constituye de la siguiente manera:

    En la columna A tengo mis identificadores. La mayoría de las veces tengo un identificador para una sola fila, pero algunas filas están fusionadas, por lo que me encuentro con un identificador para dos filas. Sin embargo, la fila no está fusionada en su totalidad, especialmente en lo que respecta a la columna AH (campo fecha), donde las filas han sido divididas para permitir otros cálculos.

    ¿Todavía me sigues?
    0
    1. eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
       
      ¿Todavía me siguen?
      no

      Primera respuesta incorrecta porque Esta fórmula propuesta no tiene en cuenta mis duplicados.
      Segunda respuesta incorrecta porque por lo tanto, eso cuenta los duplicados.

      Sube un archivo de ejemplo (describiendo los resultados deseados) en cijoint.fret, copia aquí el enlace proporcionado.
      0
    2. Elariana
       
      Gracias por tu ayuda.
      Entonces he simplificado la tabla para resumir la columna AH que ahora se encuentra en J y el identificador que me interesa en A, B o C, a elección, esto no cambia nada. He hecho una tabla general en la parte inferior derecha para entender los diferentes cálculos que estoy llevando a cabo. La línea en rojo corresponde al resultado que me gustaría obtener con una fórmula o macro.

      Enlace de openoffice calc: http://www.cijoint.fr/cjlink.php?file=cj201008/cijTx0yIWL.ods

      Enlace de excel: http://www.cijoint.fr/cjlink.php?file=cj201008/cij5yAA15M.xls
      0
  5. tontong Mensajes publicados 2575 Fecha de registro   Estado Miembro Última intervención   1 064
     
    Hola,
    ¿Es normal encontrar 2010 en A6 y 2009 en J6 (28/04/2009)?
    0
  6. Elariana
     
    Efectivamente, es un error de mi parte, en A6 debería ser 2009.

    Pero más adelante en la tabla (ya que este es un extracto) se pueden encontrar códigos con 2010.
    0
    1. tontong Mensajes publicados 2575 Fecha de registro   Estado Miembro Última intervención   1 064
       
      ¿Los resultados en la línea 14 deben convertirse en 3,5,6 en lugar de 2,3,4?
      0
  7. Elariana
     
    No, precisamente, deben ser 2, 3 y 4.
    De hecho, la línea 7-8 y 9-10 representa dos convenciones para 4 fechas. El resultado 3, 5, 6 no toma en cuenta los duplicados.

    Espero ser claro.

    Gracias por tu ayuda.
    0
  8. tontong Mensajes publicados 2575 Fecha de registro   Estado Miembro Última intervención   1 064
     
    Al contar los códigos en la columna C: ingresar en M14
    =SUMAPROD(($J$6:$J$100<="30/06/2009"*1)*($C$6:$C$100<>""))

    Sugerencia para M15:
    =SUMAPROD(($I$6:$I$11="sí")*($J$6:$J$11<="30/06/09"*1)*($F$6:$F$11))

    Es posible mejorar la tabla resumen: en M13 ingresar 30/06/2009 y poner la celda en formato personalizado mmm aaaa para mostrar junio 2009. Lo mismo para N13, O13, etc.
    En las fórmulas reemplazar "30/06/2009"*1 por M$13.
    Las fórmulas así son "copiables" horizontalmente.
    0
  9. Elariana
     
    Super, la fórmula funciona perfectamente. Muchas gracias.

    Ahora, para no parecer tan tonto, ¿podrías darme una explicación de esta fórmula? Especialmente sobre la segunda parte: *($C$6:$C$100<>""))

    Con respecto a tu sugerencia para M15, me parece que es la fórmula que puse en la celda, ¿no?

    Gracias por tu ayuda, amigo.

    EDIT: al final no logro hacerla funcionar en mi tabla, lo intentaré de nuevo y les mantendré informados
    0
    1. tontong Mensajes publicados 2575 Fecha de registro   Estado Miembro Última intervención   1 064
       
      $C$6:$C$100<>"" en claro: C6:C100 diferente (<>) de nada ("")
      Para M15 la sintaxis es diferente en el archivo de Excel.
      Un último consejo: intenten abandonar el botón "combinar y centrar" y sobre todo en las hojas con muchos cálculos.
      0
    2. Elariana
       
      ok he entendido de dónde venía el error. De hecho, la tabla que proporcioné era solo un extracto. Resulta que en la tabla original, hay filas donde el campo fecha (columna j en el ejemplo) aún no está lleno. Así que me parece que la fórmula no es efectiva en este caso.
      0
    3. tontong Mensajes publicados 2575 Fecha de registro   Estado Miembro Última intervención   1 064
       
      Añada una condición de fecha posterior al 01/01/1900 para evitar que las celdas vacías sean asimiladas a 0.
      =SUMAPRODUCTO(($J$6:$J$100<="30/06/2009"*1)*($J$6:$J$100>"01/01/1900"*1)*($C$6:$C$100<>""))
      0
    4. Elariana
       
      Súper, muchas gracias por tu ayuda, la fórmula funciona esta vez perfectamente.

      En cuanto a la estructura de la tabla, en realidad he heredado esta tabla, y por lo tanto se espera que haga tablas intermedias para realizar gráficos. Estoy pensando en el futuro en modificar la estructura o, mejor aún, integrarla en una base de datos.

      ¡Gracias por todo!
      0
  10. vince_nus
     
    Hola a todos

    ¡una pregunta sencilla!
    Quisiera, en mi columna A, partir de la última línea (65536) hacia arriba hasta la primera línea anterior que está llena (por ejemplo, línea 1300) y poner en mi macro una variable: for i = 2 to 1300

    El objetivo final, partiendo de este ejemplo, es filtrar diferentes valores de la columna A, desde la línea 2 hasta 1300 (aquí). El número de líneas puede variar...

    Luego, ¿debo incorporar una nueva variable para hacer un filtrado automático, en función del valor de mi celda?

    Gracias.
    0
    1. eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
       
      Hola,

      para i = 2 hasta [A65536].end(xlup).fila

      eric
      0
  11. vince_nus
     
    Gracias Eric

    Tengo una última pregunta, me gustaría que me copiara la información de cada línea (donde i=i+1), pero he intentado con Rows, Range o Cells, ¡y no funciona! ¡La sintaxis no debe ser correcta!

    Range(i, 26).Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste

    Es para copiar la información de cada línea en un nuevo archivo

    Gracias
    0
  12. eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
     
    Re,

    [A1:A1300].AutoFilter Campo:=1, Criterio1:=CeldaActiva

    Pero no es necesario activar una celda para usarlo, de hecho, es una pérdida de tiempo en la macro.

    Por ejemplo, si tu criterio está en E1 (fila 1 columna 5):
    [A1:X1300].AutoFilter Campo:=1, Criterio1:=Celdas(1,5)

    eric

    editar: has cambiado tu pregunta....
    lo veré después de comer.
    0
    1. eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
       
      Bueno, como se hizo rápido...

      Si necesitas copiar todas las líneas, debes hacerlo de una vez:
      [A1:X1300].Copy
      Workbooks.Add
      ActiveSheet.Paste

      erix
      0
  13. vince_nus
     
    ¡No, es una vez!
    ¡Un archivo para crear por cada línea!

    ++

    ¡Muchas gracias de nuevo!
    0
    1. eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
       
      Ak, ok....

       Dim lig As Long For lig = 2 To 5 Rows(lig).Copy Workbooks.Add ActiveSheet.Paste Next lig


      eric
      0