如何在 Microsoft Excel 中使用 EXPAND 函数

发表于:昨天 12:41 10
如何在 Microsoft Excel 中使用 EXPAND 函数

Microsoft Excel 的动态数组功能为自动更新带来了革命性变化,但其不可预测的大小可能会破坏仪表板的格式。使用 EXPAND 函数,您可以锁定布局,让电子表格保持整洁有序。以下是具体方法。

EXPAND 函数适用于使用 Microsoft 365 版 Excel、网页版 Excel 以及最新版本的 Excel 移动和平板应用的用户。

EXPAND 函数的工作原理

将 EXPAND 视为数据的容器。它不会干扰您的数值,只是强制它们占据特定数量的行或列。例如,如果您有一个小的 2x2 数据方块,但需要将其适配到仪表板的 5x5 布局中,EXPAND 就充当填充空白的框架。

EXPAND 语法

该函数使用四个参数来定义数据容器的边界:
  1. =EXPAND(array,[rows],[columns],[pad_with])
复制代码


  • array 是您想要扩展的源数据或公式结果(如 FILTER 或 UNIQUE 列表)。
  • rows 是最终结果中您想要的总行数。如果省略,则默认为源数组的高度。
  • columns 是最终结果中您想要的总列数。如果省略,则默认为源数组的宽度。
  • pad_with 是您希望在“额外”单元格中看到的值。如果留空,Excel 会用 #N/A 填充新单元格。为了保持整洁,您可以使用 "" 表示空白单元格或 "-" 表示短横线,但此参数接受任何数据类型(文本、数字,甚至另一个公式)。


您必须至少提供 rows 或 columns 参数来更改数据的大小。否则,函数将返回未更改的原始数组。

此外,与所有动态数组函数一样,EXPAND 不能在 Excel 表格内部使用——它必须位于表格外部。这是因为这些现代函数会将结果溢出到一系列单元格中,而 Excel 表格期望每个单独单元格中有一个单一、自包含的公式或值。



用例 1:保持仪表板对称性

在 Excel 中构建并排比较表时,EXPAND 确保即使不同类别的数据量不同,您的布局也能保持完美平衡。

场景:您有一个名为 T_Sales 的 Excel 表格,并正在构建一个“对比”仪表板来比较两个区域的销售表现。当您从数据验证下拉菜单中选择单元格 F1 和 J1 中的区域时,单元格 E2 和 I2 中的 FILTER 函数将从表格中提取相关数据。



如果没有 EXPAND 函数,如果 F1 中的区域有五个销售记录而 J1 中的区域只有四个,您的仪表板就会变得不平衡。这是因为动态数组会根据返回的结果数量自动收缩和增长。
  1. 单元格 E2: =FILTER(T_Sales,T_Sales[Region]=F1)
  2. 单元格 I2: =FILTER(T_Sales,T_Sales[Region]=J1)
复制代码



将过滤器包装在 EXPAND 中可以将两个表格的占用空间锁定为固定高度,保持仪表板元素完美对齐。
  1. 单元格 E2: =EXPAND(FILTER(T_Sales,T_Sales[Region]=F1),10,,"-”)
  2. 单元格 I2: =EXPAND(FILTER(T_Sales,T_Sales[Region]=J1),10,,"-”)
复制代码




  • FILTER 分别抓取区域与单元格 F1 和 J1 中值匹配的所有行。
  • 10 告诉 Excel 溢出结果必须为 10 行高。
  • "-" 在实际数据计数和 10 行限制之间的任何行中填充短横线。


由于您跳过了 columns 参数,Excel 假定您希望保持 FILTER 结果的原始宽度(三列)。

另外,请注意 EXPAND 函数默认在数组底部(而非顶部)添加新行。

虽然这些公式为了保持一致性硬编码了 rows 参数(10),但如果您想从单个输入控制所有仪表板表格的高度,可以轻松地用单元格引用替换该数字。

如果 rows 参数小于原始数组高度,Excel 将返回 #VALUE! 错误。



用例 2:为 VSTACK 准备不匹配的表格

EXPAND 充当结构预处理器,允许您合并具有不同列数的数据集而不会触发错误。

场景:您需要使用 VSTACK 函数将两个表格 T_Primary 和 T_Secondary 合并到一个主列表中。然而,T_Primary 包含三列,而 T_Secondary 仅包含两列。



如果仅使用 VSTACK 完成合并,公式将在表格不匹配的地方返回 #N/A 数组。
  1. =VSTACK(T_Primary,T_Secondary)
复制代码



但是,使用 EXPAND,您可以为较窄的 T_Secondary 表格添加第三列虚拟空白或短横线,使结果更加整洁。
  1. =VSTACK(T_Primary,EXPAND(T_Secondary,,3,"-”))
复制代码




  • EXPAND 仅关注 T_Secondary,将其水平拉伸到三列。
  • "-" 用短横线填充空的 Notes 列,使其不是空白或错误。
  • VSTACK 将原始的 T_Primary 表格与新填充的 T_Secondary 表格合并为一个连续列表。


您没有为 rows 参数指定值,因为您不想更改表格的高度——只想更改宽度。

另外,请注意 EXPAND 函数默认在数组右侧(而非左侧)添加列。

如果您要合并具有数百万行或复杂数据类型的多个表格,请跳过公式并使用 Power Query。Power Query 的 Append 功能专为高容量数据转换而构建,处理不匹配列比电子表格公式高效得多。



用例 3:创建稳定的 UI 容器

有时,Excel 电子表格的外观与其行为同样重要,而 EXPAND 函数在这两方面都能提供帮助。使用短横线作为填充字符,您可以创建一个结果卡片,即使搜索结果很短,也能在视觉上保持锚定。

场景:您在 A:C 列中有一个名为 T_Invoice 的源表格。当您在单元格 I2 中输入一个值时,单元格 E2 中的 FILTER 公式将向下和向右溢出结果。但是,您希望在 E:G 列中构建一个结果卡片,即使 T_Invoice 表格扩展或收缩,也始终与其高度匹配。



这种设置将保持电子表格布局的平衡和专业性。然而,更重要的是,使用 pad_with 参数插入短横线将起到至关重要的功能作用:它会警告访问您电子表格的任何人该区域是活动的,因此他们不应在这些单元格中输入任何内容。这可以防止当过滤器结果尝试填充范围时发生可怕的 #SPILL! 错误。

以下是输入单元格 E2 的公式:
  1. =EXPAND(FILTER(T_Invoice,T_Invoice[Amount]>I2,""),ROWS(T_Invoice),,"-”)
复制代码




  • FILTER 提取与单元格 I2 中您的条件匹配的数据。
  • ROWS(T_Invoice) 通过动态计算源表格的高度,作为 EXPAND 语法中的 rows 参数,使结果卡片始终匹配。
  • 末尾的 "-" 用短横线填充每个空行,提供可见的“保留”空间,无需任何特殊格式。
  • 中间的 "" 防止 FILTER 本身在 EXPAND 有机会运行之前抛出 #CALC! 错误。


您不需要输入 columns 参数,因为公式会自动采用源表格的三列宽度。



随着源表格的增长,短横线的数量会自动调整,以保持结果卡片完美对齐并受到保护。



EXPAND 函数故障排除

最后,以下是使用 Excel 的 EXPAND 函数时最常见错误的快速参考表:


  • 错误 可能原因 如何修复
  • #VALUE! 您试图使溢出结果小于源数据。确保 rows 或 columns 参数等于或大于原始数组大小。
  • #N/A pad_with 参数被省略。始终为最后一个参数提供值,如 "" 或 "-",以防止 Excel 默认为空单元格填充难看的 #N/A。
  • #NUM! 请求的扩展超出了 Excel 网格的容量或您设备的内存限制。减小扩展的大小或切换到 Power Query 进行高容量数据处理。
  • #SPILL! 扩展区域不清晰。删除公式试图溢出的单元格中的任何数据(包括不可见的空格)。


使用 EXPAND 函数锁定布局可以防止经常困扰动态报告的“手风琴效应”。通过将这种结构稳定性与清晰的填充字符相结合,您可以确保结果保持有序并免受溢出错误的影响。最终,这是让您的 Microsoft Excel 仪表板变得精致、专业和可预测的完美方式。





原文链接:How to use the EXPAND function in Microsoft Excel
收藏
送赞
分享

发表回复