Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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 Sheets)中查找稀疏数组的宽度和宽度?_Excel_Google Sheets - Fatal编程技术网

如何在Excel(和Google Sheets)中查找稀疏数组的宽度和宽度?

如何在Excel(和Google Sheets)中查找稀疏数组的宽度和宽度?,excel,google-sheets,Excel,Google Sheets,假设您在Excel中有一个单元格网格(最新版本,如Office 365)。如果不使用VB,但一定要使用标准函数(即以编程方式,而不是“手动”),在以下情况下,如何找到网格的宽度和深度(或网格右下角单元格的名称或引用): 您将获得左上角单元格(TLC)的名称 宽度=最宽行中TLC和最右边非空单元格之间的列数 深度=从TLC到最深列中最低(即编号最高的行)非空单元格的行数 您不能假设最宽行或最深列的位置。i、 e.最宽的行不必位于阵列的顶部或底部,最深的列不必位于最左侧或最右侧 阵列可能是稀疏的;

假设您在Excel中有一个单元格网格(最新版本,如Office 365)。如果不使用VB,但一定要使用标准函数(即以编程方式,而不是“手动”),在以下情况下,如何找到网格的宽度和深度(或网格右下角单元格的名称或引用):

  • 您将获得左上角单元格(TLC)的名称
  • 宽度=最宽行中TLC和最右边非空单元格之间的列数
  • 深度=从TLC到最深列中最低(即编号最高的行)非空单元格的行数
  • 您不能假设最宽行或最深列的位置。i、 e.最宽的行不必位于阵列的顶部或底部,最深的列不必位于最左侧或最右侧
  • 阵列可能是稀疏的;i、 e.单元格上方和左侧可能有空白,并带有值
再说一遍:没有VB;但也没有像键盘一样单调乏味的手工操作。然而,阵列配方很好,虽然非挥发物是首选,但挥发物是可以容忍的

如果有人知道Google Sheets的答案,并且它与Excel的答案非常不同,那也将不胜感激。 谢谢

举例来说,给定如下所示的网格,TLC的值为“B4”,我希望返回的宽度为7,深度为8,或者BRC为“H11”


好的,这里是一个相当暴力的Excel方法,只用于查找最后一行-使用偏移量获取整个工作表中从B4开始的每一行,然后小计查看它是否包含任何非空白单元格,然后乘以行号,并使用max查找包含某些内容的最大行号:

=MAX((SUBTOTAL(3,OFFSET(B4,ROW(B4:B1048576)-ROW(B4),0,1,16384-COLUMN(B4)))>0)*ROW(B4:B1048576))

=MAX((SUBTOTAL(3,OFFSET(B4,0,COLUMN(B4:XFD4)-COLUMN(B4),1048576-ROW(B4),1))>0)*COLUMN(B4:XFD4))
必须使用CtrlShift作为数组公式输入 进入

您可以通过减去B4的行或列来获得宽度和深度

正如预期的那样,反应有点迟缓,但可以容忍

在以下情况下,您也可以使用Countif:

=MAX((COUNTIF(OFFSET(B4,ROW(B4:B1048576)-ROW(B4),0,1,16384-COLUMN(B4)),"<>")>0)*ROW(B4:B1048576))

=MAX((COUNTIF(OFFSET(B4,0,COLUMN(B4:XFD4)-COLUMN(B4),1048576-ROW(B4),1),"<>")>0)*COLUMN(B4:XFD4))
=MAX((COUNTIF(偏移量(B4,行(B4:B1048576)-行(B4),0,116384-列(B4)),“”)>0)*行(B4:B1048576))
=MAX((COUNTIF(偏移量(B4,0,列(B4:XFD4)-列(B4),1048576行(B4),1),“”)>0)*列(B4:XFD4))
但它并没有回避偏移量是一个易变函数的问题,因此对电子表格的任何更改都会迫使重新计算

如果可以限制范围,速度可以大大提高。也可以使用其他答案中提到的Google Sheets方法,例如

=MAX(IF(B4:L20<>"",ROW(B4:L20)))
=最大值(如果(B4:L20“”,第(B4:L20)行)

但是,如果应用于整个Excel工作表,这似乎会耗尽资源。

此答案适用于Google工作表中的深度

=max(arrayformula(if(<range> <> "", row(<range>)))) - (row(<range>)-1)
=max(数组公式(if(“,row()))-(row()-1)
将稀疏数组坐标替换为从左上角单元格开始的最大可能
,例如A1:D20或TLC为A1时的任何值。请注意,如果数组不是从第1行开始,我们只需减去起始行

这假设您可以声明“最大可能范围”。但这似乎是一个安全的假设:要么你的数据向下延伸到无限多的行,而下面没有任何具体的数据,当你只是放了一个非常大的数字,要么你确实在下面有一些具体的数据,在这种情况下,你将范围限制在上面的行

以下是TLC=J2的示例


宽度找到等效公式留给读者一个(要求不高的)练习:-)

此公式将向您显示“BRC”:

=地址(
最大值(数组公式(如果(A:Z“”,第(A:Z)行))-(第(A:Z)行)-1,
最大值(数组公式(如果(A:Z“”,列(A:Z)))-(列(A:Z)-1),4)

=ADDRESS(
 MAX(ARRAYFORMULA(IF(A:Z<>"", ROW(A:Z))))-(ROW(A:Z)-1), 
 MAX(ARRAYFORMULA(IF(A:Z<>"", COLUMN(A:Z))))-(COLUMN(A:Z)-1), 4)