Originalmente publicado por mi mismo en inglés como respuesta a Show all combinations for a selection of columns
Respuesta corta
QUERY () requiere una sola matriz como tabla fuente, por lo que no se puede usar, en su lugar usa ARRAYFORMULA (), TRANSPOSE (), JOIN (), SPLIT (), REPT (), FILTER (), COUNTA (), SORT () y los operadores de división ( / ) y concatenación ( & ) crean una «fórmula flexible» ya que su rendimiento es mejor que una función personalizada.
Procedimiento
Suponiendo que para «código de función de hoja de cálculo flexible», el OP significa una fórmula,
- Para simplificar las cosas, agregue un apóstrofo antes de cada valor numérico para formatearlo como texto.
- Calcule el tamaño del producto cartesiano .
=COUNTA(A:A)*COUNTA(B:B)*COUNTA(C:C)*COUNTA(D:D)*COUNTA(E:E)*COUNTA(F:F)Nota: Hay cinco columnas para hacer coincidir los datos de muestra proporcionados por el OP.
- Calcule el producto cartesiano:
J1:
=ArrayFormula( { SORT( TRANSPOSE( split(REPT(JOIN(",",TRANSPOSE(filter(A:A,LEN(A:A))))&",",$H$1/COUNTA(A:A)),",")) &TRANSPOSE( split(REPT(JOIN(",",TRANSPOSE(filter(B:B,LEN(B:B))))&",",$H$1/COUNTA(B:B)),",")) ,1,TRUE) &TRANSPOSE( split(REPT(JOIN(",",TRANSPOSE(filter(C:C,LEN(C:C))))&",",$H$1/COUNTA(C:C)),",")) &TRANSPOSE( split(REPT(JOIN(",",TRANSPOSE(filter(D:D,LEN(D:D))))&",",$H$1/COUNTA(D:D)),",")) &TRANSPOSE( split(REPT(JOIN(",",TRANSPOSE(filter(E:E,LEN(E:E))))&",",$H$1/COUNTA(E:E)),",")) &TRANSPOSE( split(REPT(JOIN(",",TRANSPOSE(filter(F:F,LEN(F:F))))&",",$H$1/COUNTA(F:F)),",")) } )
f1 (A): $H$1/COUNTA(A:A) número de veces que los valores de la columna A deben repetirse.
f2 (A): valores de filter(A:A,LEN(A:A)) en la columna A.
f3 (A): TRANSPOSE(split(REPT(JOIN(«,»,TRANSPOSE(f2))&»,»,f1),»,»)) repite los valores de la columna
f4 (AB): SORT(f3(A)&f3(B),1,TRUE) Concatena el primer par de columnas y clasifícalas en orden ascendente.
f5 (): f4(AB)&f3(C)&f3(D)&f3(E)&f3(F)
Concatena las filas de las otras columnas. Como solo una de estas columnas tiene más de un elemento, no es necesario ordenarlas de nuevo.
Nota: Hay una fórmula f3 () para cada columna. Hay cinco que coinciden con los datos de muestra proporcionados por el OP.
f6 (): ArrayFormula(f5()) : «Habilita la visualización de valores devueltos por una fórmula de matriz en varias filas y / o columnas y el uso de funciones que no son de matriz con matrices» 1 .
Hoja de cálculo de demostración
Referencias
- 1 : ARRAYFORMULA

Deja un comentario