Apoyo con fórmula matricial. Fernando Arroyo

10/12/2004 - 18:55 por cuejorge2003 | Informe spam
Fernando,

Como comentas esta fórmula funciona perfecyamente si no tomamos en
cuenta las celdas vacías.

Mi problema es que cada día aumento los renglones y no se el número
que habrá de renglones.

Qué puedo hacer ??
Te paso la fórmula:
VIEJESENTR = "=SUMPRODUCT((1/COUNTIF(DATOS!M2:M830,DATOS!M2:M830))*(DATOS!H2:H830=1)*(DATOS!G2:G830A6500))"
VIEJESENTR23 = Evaluate(VIEJESENTR)
Worksheets("CONC").Range("B34") = VIEJESENTR23
Muchas gracias.
Un saludo.
Jorge.

Preguntas similare

Leer las respuestas

#1 KL
10/12/2004 - 19:59 | Informe spam
Jorge,

Mientras vuelve Fernando, prueba esto:

Sub test()
Dim UltimaFila
UltimaFila = Sheets("DATOS").Range("M65536").End(xlUp).Row
VIEJESENTR = "=SUMPRODUCT((1/COUNTIF(DATOS!M2:M" & _
UltimaFila & ",DATOS!M2:M" & UltimaFila & "))*(DATOS!H2:H" _
& UltimaFila & "=1)*(DATOS!G2:G" & UltimaFila & "A6500))"
VIEJESENTR23 = Evaluate(VIEJESENTR)
Worksheets("CONC").Range("B34") = VIEJESENTR23
End Sub

Saludos,
KL

"JC" wrote in message
news:
Fernando,

Como comentas esta fórmula funciona perfecyamente si no tomamos en
cuenta las celdas vacías.

Mi problema es que cada día aumento los renglones y no se el número
que habrá de renglones.

Qué puedo hacer ??
Te paso la fórmula:
VIEJESENTR =
"=SUMPRODUCT((1/COUNTIF(DATOS!M2:M830,DATOS!M2:M830))*(DATOS!H2:H830=1)*(DATOS!G2:G830A6500))"
VIEJESENTR23 = Evaluate(VIEJESENTR)
Worksheets("CONC").Range("B34") = VIEJESENTR23
Muchas gracias.
Un saludo.
Jorge.
Respuesta Responder a este mensaje
#2 Fernando Arroyo
10/12/2004 - 20:04 | Informe spam
La fórmula que puse en mi anterior mensaje NO hace lo que necesitas, así que te recomiendo que te olvides de ella. He estado intentando encontrar alguna forma de evitar el uso de la función FRECUENCIA (la cual me parece que es la culpable de que EVALUATE no devuelva el resultado correcto), pero hasta ahora no he tenido éxito.

Una posibilidad, dado que estamos hablando de un procedimiento VBA, sería "olvidarse" de las fórmulas matriciales y que fuera el propio código VBA quien hiciera el trabajo. Otra posibilidad sería hacer caso a Héctor Miguel y utilizar una celda como "puente" para depositar en ella la fórmula matricial y obtener el resultado.
Un saludo.


Fernando Arroyo
MS MVP - Excel



"JC" escribió en el mensaje news:
Fernando,

Como comentas esta fórmula funciona perfecyamente si no tomamos en
cuenta las celdas vacías.

Mi problema es que cada día aumento los renglones y no se el número
que habrá de renglones.

Qué puedo hacer ??
Te paso la fórmula:
VIEJESENTR = "=SUMPRODUCT((1/COUNTIF(DATOS!M2:M830,DATOS!M2:M830))*(DATOS!H2:H830=1)*(DATOS!G2:G830A6500))"
VIEJESENTR23 = Evaluate(VIEJESENTR)
Worksheets("CONC").Range("B34") = VIEJESENTR23
Muchas gracias.
Un saludo.
Jorge.
Respuesta Responder a este mensaje
#3 Daniel.M
11/12/2004 - 02:24 | Informe spam
Hola Jorge,

En VBA, no hay razones para usar de INDIRECT() en el contexto siguiente :
(ROW(INDIRECT(...))


Entonces,

Dim VIAJESENTR As Long
Dim nFilas As Long

nFilas = Sheets("DATOS").Range("M2:M10000").Rows.Count

VIAJESENTR = Evaluate( _
"=COUNT(1/FREQUENCY(IF((DATOS!H2:H10000=1)*(DATOS!G2:G10000A6500)," & _
"MATCH(DATOS!M2:M10000,DATOS!M2:M10000,0)),ROW(1:" & nFilas & ")))")

Ud va a notar que esta formula toma mucho tiempo (con 10K filas). Si Ud necesita
otras estrategias para resolver este ultimo problem (calcular despacio), puede
avisarme aqui y voy a intentar ayudarle.
Quiero saber antes si:
1. ¿Hay posibilidades de ordernar los datos de la columna M (temporalmente)?
2. ¿Conta frecuadamente los unicos en la columna M (con varios criterios en H y
en G)?

Saludos,

Daniel M.


"JC" wrote in message
news:
Fernando,

Como comentas esta fórmula funciona perfecyamente si no tomamos en
cuenta las celdas vacías.

Mi problema es que cada día aumento los renglones y no se el número
que habrá de renglones.

Qué puedo hacer ??
Te paso la fórmula:
VIEJESENTR "=SUMPRODUCT((1/COUNTIF(DATOS!M2:M830,DATOS!M2:M830))*(DATOS!H2:H830=1)*(DATOS!G


2:G830A6500))"
VIEJESENTR23 = Evaluate(VIEJESENTR)
Worksheets("CONC").Range("B34") = VIEJESENTR23
Muchas gracias.
Un saludo.
Jorge.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida