La fórmula matricial de Excel tiene que devolver una matriz (vector), pero devuelve un valor único (escalar)

La fórmula matricial de Excel tiene que devolver una matriz (vector), pero devuelve un valor único (escalar)

Sí leí:Excel: fórmula matricial: ¿por qué no se devuelve la matriz (vector)?pero esto no es lo mismo.

Básicamente, no puedo entender por qué la fórmula es como esta: {=MATCH({1,2,3},{1,2,3},0)}que generalmente devuelve una matriz (vector), {1,2,3}devuelve un valor único.

Considere este ejemplo:
Nota: Hay una introducción muy larga; una parte interesante comienza debajo del texto en negrita: "Hasta ahora, todo funciona como se esperaba".

Hay una tabla con Nameuna revisión columns.

  • Quiero tener para cada nombre único un número entero único GroupNo.
  • Luego agregue a la GroupNoparte decimal RevPartsegún el valor de revisión ( ""=0, "a"=0.01, ...)
  • GroupNo+RevPartse llama FullGroupNo( FGN)
  • Quiero saber el máximo FGNpara cada grupo de nombres: MaxInGroup( MIG)

Esto se podría hacer fácilmente usando varias columnas en la tabla ( Table1):

GroupNo:     =MATCH([@Name],[Name],0)
RevPart:     =INDEX({0,1},MATCH([@Revision],{"","a"},0))/100
FullGroupNo: =[@GroupNo]+[@RevPart]
MaxInGroup: {=MAX(([@GroupNo]=[GroupNo])*[FullGroupNo])}

Table1
+------+----------+---------+---------+-------------+------------+
| Name | Revision | GroupNo | RevPart | FullGroupNo | MaxInGroup |
+------+----------+---------+---------+-------------+------------+
| A    | =""      |       1 |       0 |           1 |       1,01 |
| A    | a        |       1 |    0,01 |        1,01 |       1,01 |
| B    | =""      |       3 |       0 |           3 |          3 |
| C    | =""      |       4 |       0 |           4 |       4,01 |
| C    | a        |       4 |    0,01 |        4,01 |       4,01 |
+------+----------+---------+---------+-------------+------------+
Note: ="" means there is a blank string in the cell (formula ="")

El FullGroupNo( FGN) se puede obtener en una fórmula haciendo referencia únicamente Namea Revisioncolumnas.

FGN_2: {=(INDEX({0,1},MATCH([@Revision],{"","a"},0))/100+MATCH([@Name],[Name],0))}
FGN_2 is a new column in the table (Table1) above. It's matrix formula returns single (not-matrix) value.
 
Area under FGN (Matrix) is an ordinary worksheet range. This whole area contains return (matrix) value.
FGN (Matrix): {=INDEX({0,1},MATCH(Table1[Revision],"","a"},0))/100+MATCH(Table1[Name],Table1[Name],0))}

Table1     Just range
+-------+  +--------------+
| FGN_2 |  | FGN (Matrix) |
+-------+  +--------------+
|     1 |  |            1 |
|  1,01 |  |         1,01 |
|     3 |  |            3 |
|     4 |  |            4 |
|  4,01 |  |         4,01 |
+-------+  +--------------+

Ahora intenté consolidar MaxInGroupen una única fórmula matricial.

Original MaxInGroup formula:
MaxInGroup:  {=MAX(([@GroupNo]=[GroupNo])*[FullGroupNo])}

Step1
- replace[@GroupNo] with matrix formula with reference only to Name and Revision columns
MIG_1:       {=MAX((MATCH([@Name],[Name],0)=[GroupNo])*[FullGroupNo])}

Step2
- Replace (matrix) [GroupNo] with matrix formula with reference to Name and revision columns
MIG_2:       {=MAX((MATCH([@Name],[Name],0)=MATCH([Name],[Name],0))*[FullGroupNo])}

Hasta ahora todo funciona como se esperaba.

Step3
- Replace (matrix) [FullGroupNo] in MIG_2 with matrix formula with reference to Name and Revidion columns
  (so, basicaly I need formula from FGN (Matrix) used before

MIG_3:  {=MAX((MATCH([@Name],[Name],0)=MATCH([Name],[Name],0))*(INDEX({0,1},MATCH([Revision],{"","a"},0))/100+MATCH([Name],[Name],0)))}
Note: MIG_3 is part of the Table1 so column names only are enough

So now we could have same values in MaxInGroup, MIG_1-3 columns. But no. We haven't.
The RevPart in MIG_3 depends only on the firs Revision value.

+------+----------+------------+-------+-------+-------+
| Name | Revision | MaxInGroup | MIG_1 | MIG_2 | MIG_3 |
+------+----------+------------+-------+-------+-------+
| A    | =""      |       1,01 |  1,01 |  1,01 |     1 |
| A    | a        |       1,01 |  1,01 |  1,01 |     1 |
| B    | =""      |          3 |     3 |     3 |     3 |
| C    | =""      |       4,01 |  4,01 |  4,01 |     4 |
| C    | a        |       4,01 |  4,01 |  4,01 |     4 |
+------+----------+------------+-------+-------+-------+
Versus
+------+----------+------------+-------+-------+-------+
| Name | Revision | MaxInGroup | MIG_1 | MIG_2 | MIG_3 |
+------+----------+------------+-------+-------+-------+
| A    | a        |       1,01 |  1,01 |  1,01 |  1,01 |
| A    | a        |       1,01 |  1,01 |  1,01 |  1,01 |
| B    | =""      |          3 |     3 |     3 |  3,01 |
| C    | =""      |       4,01 |  4,01 |  4,01 |  4,01 |
| C    | a        |       4,01 |  4,01 |  4,01 |  4,01 |
+------+----------+------------+-------+-------+-------+
Note: ="" means there is a blank string in the cell (formula ="")

información relacionada