Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何在Google工作表中创建所有可能的配对组合而不重复?_Excel_Excel Formula_Google Sheets_Iteration - Fatal编程技术网

Excel 如何在Google工作表中创建所有可能的配对组合而不重复?

Excel 如何在Google工作表中创建所有可能的配对组合而不重复?,excel,excel-formula,google-sheets,iteration,Excel,Excel Formula,Google Sheets,Iteration,如何在excel/google表格单元格上执行迭代以获得成对组合 "string1" "string2" "string3" ... "string10" 我正在考虑编写一个可以迭代这些字符串的函数,以创建以下内容: "string1, string2" "string1, string 3" ... "string 1, string 10" "string 2, string 3" ... "string 2, string 10" "string3, string 4" .

如何在excel/google表格单元格上执行迭代以获得成对组合

"string1"

"string2"
"string3"
...
"string10"
我正在考虑编写一个可以迭代这些字符串的函数,以创建以下内容:

"string1, string2" 
"string1, string 3" 
...
"string 1, string 10" 
"string 2, string 3" 
...
"string 2, string 10" 
"string3, string 4" 
... ... 
"string9 string10".
这在谷歌表单中是可能的吗

对于本机函数来说,这是一项艰巨的任务。尝试脚本并将其用作自定义函数:

function getTournament(teams_from_range)

    {
      // teams_from_range -- 2D Array  
      var teams = [];
      // convert to list
      teams_from_range.forEach(function(row) { row.forEach(function(cell) { teams.push(cell); } ); } );
      return getTournament_(teams);
    }
    
    
    function getTournament_(teams)
    {
      var start = 0;
      var l = teams.length;
      var result = [], game = [];
      
      // loop each value
      for (var i = 0; i < l; i++)
      {
        // loop each value minus current
        start++;
        for (var ii = start; ii < l; ii++)
        {
          game = []
          game.push(teams[i]);
          game.push(teams[ii]);  
          result.push(game);
        }  
      }
      
      return result;
    
    }
函数getTourname(团队范围内的团队)
{
//_范围内的团队_——2D阵列
var团队=[];
//转换为列表
teams_from_range.forEach(函数(行){row.forEach(函数(单元格){teams.push(单元格);}});
返回getTournament(团队);
}
函数getTournament_u2;(团队)
{
var start=0;
var l=团队长度;
var结果=[],游戏=[];
//循环每个值
对于(变量i=0;i
用法:

=getTourname(A1:A10)

对于本机函数来说,这是一项艰巨的任务。尝试脚本并将其用作自定义函数:

function getTournament(teams_from_range)

    {
      // teams_from_range -- 2D Array  
      var teams = [];
      // convert to list
      teams_from_range.forEach(function(row) { row.forEach(function(cell) { teams.push(cell); } ); } );
      return getTournament_(teams);
    }
    
    
    function getTournament_(teams)
    {
      var start = 0;
      var l = teams.length;
      var result = [], game = [];
      
      // loop each value
      for (var i = 0; i < l; i++)
      {
        // loop each value minus current
        start++;
        for (var ii = start; ii < l; ii++)
        {
          game = []
          game.push(teams[i]);
          game.push(teams[ii]);  
          result.push(game);
        }  
      }
      
      return result;
    
    }
函数getTourname(团队范围内的团队)
{
//_范围内的团队_——2D阵列
var团队=[];
//转换为列表
teams_from_range.forEach(函数(行){row.forEach(函数(单元格){teams.push(单元格);}});
返回getTournament(团队);
}
函数getTournament_u2;(团队)
{
var start=0;
var l=团队长度;
var结果=[],游戏=[];
//循环每个值
对于(变量i=0;i
用法:


=getTournament(A1:A10)

我必须同意@Max的观点,即使用本机函数是困难的,或者至少是冗长的,但在谷歌表单中是可能的

=ArrayFormula(query({if((row(A:A)<=counta(A:A)^2)*(int((row(A:A)-1)/counta(A:A))<mod((row(A:A)-1),counta(A:A))),
vlookup(int((row(A:A)-1)/counta(A:A)),{row(A:A)-1,A:A},2)&vlookup(mod((row(A:A)-1),counta(A:A)),{row(A:A)-1,A:A},2),"")},"select Col1 where Col1<>''"))
(3) 使用VLOOKUP中的行号获取具有

vlookup(mod((行(A:A)-1),counta(A:A)),{row(A:A)-1,A:A},2)

请注意,该列表将包括不需要的对,如String1String1和String2String1

(4) 使用if条件将不需要的对设置为“”


如果((row(A:A),我必须同意@Max的观点,即使用本机函数很困难,或者至少是冗长的,但在谷歌表单中是可能的

=ArrayFormula(query({if((row(A:A)<=counta(A:A)^2)*(int((row(A:A)-1)/counta(A:A))<mod((row(A:A)-1),counta(A:A))),
vlookup(int((row(A:A)-1)/counta(A:A)),{row(A:A)-1,A:A},2)&vlookup(mod((row(A:A)-1),counta(A:A)),{row(A:A)-1,A:A},2),"")},"select Col1 where Col1<>''"))
(3) 使用VLOOKUP中的行号获取具有

vlookup(mod((行(A:A)-1),counta(A:A)),{row(A:A)-1,A:A},2)

请注意,该列表将包括不需要的对,如String1String1和String2String1

(4) 使用if条件将不需要的对设置为“”

if((行(A:A)
=查询(数组)公式(拆分(
转置(拆分(报告(连接(A2:A和字符(9)),计数(A2:A)),字符(9))&“&
转置(拆分(连接)(报告(A2:A和字符(9),计数A(A2:A))),字符(9)),“”),
“其中Col1 col2按Col1排序”,0)

=查询(数组)公式(拆分(
转置(拆分(报告(连接(A2:A和字符(9)),计数(A2:A)),字符(9))&“&
转置(拆分(连接)(报告(A2:A和字符(9),计数A(A2:A))),字符(9)),“”),
“其中Col1 col2按Col1排序”,0)

=数组公式(拆分(排序(
转置(SPLIT(CONCATENATE)(REPT(UNIQUE)(转置(SPLIT(JOIN(“,”,TEXTJOIN(“,”,1,A2:A)),“,”)和“,”&
转置(唯一(转置(拆分(JOIN(“,”,TEXTJOIN(“,”,1,A2:A)),“,”))(
唯一(转置(拆分(JOIN(“,”,TEXTJOIN(“,”,1,A2:A)),“,”))
=ARRAYFORMULA(拆分(排序(
转置(SPLIT(CONCATENATE)(REPT(UNIQUE)(转置(SPLIT(JOIN(“,”,TEXTJOIN(“,”,1,A2:A)),“,”)和“,”&
转置(唯一(转置(拆分(JOIN(“,”,TEXTJOIN(“,”,1,A2:A)),“,”))(

可能是唯一的(转置(SPLIT(JOIN(“,”,TEXTJOIN(“,”,1,A2:A)),“,”)))。除此之外,您还没有提供足够的信息来确定您想要什么。到目前为止,您尝试了什么?字符串1在哪里,等存储?是否总是希望返回两个字符串的组合?字符串是否包含引号?…以及我没有想到的其他问题。相关:@Dave,请编辑问题以使其更易于理解,如果你说为什么需要它,这可能是一个好问题,并给出一个包含3个字符串而不是10个字符串的示例。此外,我建议将其重命名为:
在列表中查找所有可能的配对。
。投票通过!我也投票通过了,因为这是一个很好的挑战,但问题可以改进。可能。除此之外,您还没有提供足够的信息来确定您想要什么。到目前为止,您尝试了什么?字符串1在哪里,等存储?是否总是希望返回两个字符串的组合?字符串是否包含引号?…以及我没有想到的其他问题。相关:@Dave,请编辑问题以使其更易于理解,如果你说为什么需要它,这可能是一个好问题,并给出一个包含3个字符串而不是10个字符串的示例。此外,我建议将其重命名为:
查找列表中所有可能的行。
。投票!我也投票了,因为这是一个很好的挑战,但问题可以改进。很好!我花了一个小时来理解。您可以添加2个注释。注1您是如何做到的:找到所有可能的组合并排除不必要的行。注2关于所需的行。解决方案如果工作表有N^2行,那么就可以工作,因此对于100个值,您需要10K行!我的公式的较短版本:
=query(filter(vlookup)(int((row(a:a)-1)/counta(a:a)),{row(a:a)-1,a:a},2)&vlookup(mod((row(a:a)-1),counta(a:a)),{row(a:a)-1),int((row(a:a)-1)/counta(a:a))对不起,没有解释!是的,我认为你使用过滤器是一个更好的方法。这是真的
=counta(A:A)
=2*N-1
=iferror(ArrayFormula(vlookup(ceiling((M-sqrt(M^2-8*row(A:A)))/2,1),{row(A:A),A:A},2)),"")
=iferror(ArrayFormula(vlookup(N+row(A:A)-(M*CEILING((M-SQRT(M^2-8*row(A:A)))/2,1)-CEILING((M-SQRT(M^2-8*row(A:A)))/2,1)^2)/2,{row(A:A),A:A},2)),"")
=QUERY(ARRAYFORMULA(SPLIT(
 TRANSPOSE(SPLIT(REPT(CONCATENATE(A2:A&CHAR(9)), COUNTA(A2:A)),  CHAR(9)))& " "&
 TRANSPOSE(SPLIT(CONCATENATE(REPT(A2:A&CHAR(9),  COUNTA(A2:A))), CHAR(9))), " ")),
 "where Col1<>Col2 order by Col1", 0)
=ARRAYFORMULA(SPLIT(SORT(
 TRANSPOSE(SPLIT(CONCATENATE(REPT(UNIQUE(TRANSPOSE(SPLIT(JOIN(",",TEXTJOIN(",",1,A2:A)),",")))&","&
 TRANSPOSE(UNIQUE(TRANSPOSE(SPLIT(JOIN(",",TEXTJOIN(",",1,A2:A)),",")))), (
 UNIQUE(TRANSPOSE(SPLIT(JOIN(",",TEXTJOIN(",",1,A2:A)),",")))<=
 TRANSPOSE(UNIQUE(TRANSPOSE(SPLIT(JOIN(",",TEXTJOIN(",",1,A2:A)),",")))))*
 REGEXMATCH(CONCATENATE(","&SUBSTITUTE(TEXTJOIN(",",1,A2:A),",",",,")&","&CHAR(9)),"(,"&
 UNIQUE(TRANSPOSE(SPLIT(JOIN(",",TEXTJOIN(",",1,A2:A)),",")))&",[^\t]*,"&
 TRANSPOSE(UNIQUE(TRANSPOSE(SPLIT(JOIN(",",TEXTJOIN(",",1,A2:A)),","))))&",)|(,"&
 TRANSPOSE(UNIQUE(TRANSPOSE(SPLIT(JOIN(",",TEXTJOIN(",",1,A2:A)),","))))&",[^\t]*,"&
 UNIQUE(TRANSPOSE(SPLIT(JOIN(",",TEXTJOIN(",",1,A2:A)),",")))&",)"))&CHAR(9)),CHAR(9)))),","))