Ayuda con formula matricial

10/12/2004 - 01:58 por cuejorge2003 | Informe spam
Buen día,

Quiero meter en un código una fórmula MATRICIAL, mas no se como hacer
para dar la indicación de MATRICIAL (Array)

Tengo lo siguiente:
VIAJESENTR = "=COUNT(1/FREQUENCY(IF((DATOS!H2:H10000=1)*(DATOS!G2:G10000A6500),MATCH(DATOS!M2:M10000,DATOS!M2:M10000,0)),ROW(INDIRECT(""1:""&ROWS(DATOS!M2:M10000)))))"
VIAJESENTR23 = Evaluate(VIAJESENTR).
Donde VIAJESENTR y VIAJESENTR23 son variables.

viéndolo de otra forma lo que requiero es que :

G2:G10000 = 416500 H2:H10000 = 1 y que con estas condiciones
cuente los datos únicos en M2:M10000

De antemano, gracias.
Un saludo.
 

Leer las respuestas

#1 Héctor Miguel
10/12/2004 - 10:19 | Informe spam
hola, JC ! ¿Jorge?

... meter en un codigo una formula MATRICIAL ... como ... dar la indicacion de MATRICIAL (Array)
VIAJESENTR =
"=COUNT(1/FREQUENCY(IF((DATOS!H2:H10000=1)*(DATOS!G2:G10000A6500),MATCH(DATOS!M2:M10000,DATOS!M2:M10000,0)),ROW(INDIRECT(""1:""&ROWS(DATOS!M2:M10000)))))"
VIAJESENTR23 = Evaluate(VIAJESENTR).
... VIAJESENTR y VIAJESENTR23 son variables.
... de otra forma lo que requiero es que:
G2:G10000 = 416500 / H2:H10000 = 1 / ... con estas condiciones cuente los datos unicos en M2:M10000



1.- [si lo que 'buscaras' fuese] para 'depositar' una formula matricial ->en una celda<-...
=>referencia_al_rango.FormulaArray = "=cadena_de_texto_con_la_formula"
2.- si lo que necesitas es [solamente] 'obtener' lo que seria el 'resultado final' de [depositar] una formula matricial...
=> usar el metodo 'Evaluate("cadena_de_texto")'... NO siempre 'funciona' [con 'formulas matriciales'] :(
sobre todo, cuando 'estas' ->tienen que<- 'irse [auto/re]evaluando' ->dentro/sobre si mismas<- [?]
3.- en algunos 'casos' [como el que refieres 'especificamente']... 'resulta' [practicamente] ->imprescindible<-...
a) 'bajar' a una celda la formula [ver punto 1] para poder 'operar' con el resultado...
b) [opcionalmente podrias p.e.]
-> 'asignar' a una variable el 'resultado final' ->tomado de la celda<-
-> 'borrar/eliminar' el contenido de dicha celda [que pudiera ser una celda 'puente/provisional']
=> a menos que... las referencias [en la cadena de texto de 'la formula'] vayan a ser 'relativas' [y bastantes...
'depositos']
4.- otra 'alternativa' seria [p.e.] 'asignar' la formula a un nombre [que tambien 'aceptan' formulas matriciales como 'normales']
[aunque... seria un paso 'intermedio' e... ¡ innecesario !!!, puesto que -de todas formas- se requiere 'bajarlo' a una celda] :(
5.- con respecto de la cadena de texto para 'construir' la formula...
-> no es 'necesario' el uso de [todo] mayusculas [ni en los nombres de las variables ni en la cadena de texto]
-> si fueras a usar la opcion de 'generacion' de nombres... se requieren referencias 'absolutas'
[puesto que -algunas veces- al generar nombres por codigo, la 'celda activa'... tiene sus 'repercusiones'] ;)
6.- el caso que expones, lo probe en 97, 2000, 2002 y 2003 [siempre con 'el mismo resultado'... SOLO 'bajando la formula']
7.- te 'paso' un codigo [de ejemplo] para que 'aprecies' las diferencias de 'evaluar' cada caso
[estoy 'usando' la celda activa para ir 'moviendo' cada 'resultado]
=>procura 'estar' en una celda vacia y asegurarte que el resultado 'esperado'... debiera devolver 'mayor que cero'<
saludos,
hector.

p.d. [creo que...] siguen algunos detalles 'quedandose en el tintero' [?]

en un modulo de codigo 'normal' ==Sub EvaluandoResultados()
Dim Formula As String, Formula_2 As String, Resultado As Integer
Formula = "=count(1/frequency(if((datos!h2:h10000=1)*(datos!g2:g10000A6500)," & _
"match(datos!m2:m10000,datos!m2:m10000,0))," & _
"row(indirect(""1:""&rows(datos!m2:m10000)))))"
ActiveCell.FormulaArray = Formula
Resultado = Evaluate(Formula)
MsgBox ActiveCell & " -> Resultado al 'depositar' la fórmula en la celda" & vbCr & _
Resultado & " -> Resultado al 'evaluar' la cadena de la fórmula"
Formula_2 = "=count(1/frequency(if((datos!$h$2:$h$10000=1)*(datos!$g$2:$g$10000A6500)," & _
"match(datos!$m$2:$m$10000,datos!$m$2:$m$10000,0))," & _
"row(indirect(""1:""&rows(datos!$m$2:$m$10000)))))"
Names.Add Name:="Temporal", RefersTo:=Formula_2
MsgBox Evaluate("Temporal") & " -> Resultado al 'evaluar' el nombre 'creado'"
ActiveCell = "=Temporal"
MsgBox ActiveCell & " -> Resultado del nombre al 'depositarlo' en una celda"
ActiveCell.ClearContents
Names("Temporal").Delete
End Sub

Preguntas similares