Hacker News 中文摘要

RSS订阅

Excel 单单元格支持多个值 -- Excel now supports multiple values in a single cell

在 Excel 中,一个单元格通常只保存一个值;若想放入多个值,以往多靠逗号或换行把文本拼在一起,既难维护也不便计算。微软(Microsoft)在 Microsoft 365 Insider 博客中给出新做法:借助列表和数组,把多个值直接放进同一个单元格,并让它们仍能参与公式计算。

正文

在 Excel 的 40 年历史中,每个单元格只能放一个值。现在,我们很高兴宣布通过推出列表(lists)、单元格中的数组(arrays in cells)和嵌套数组(nested arrays)来改变这一点,初期面向 Microsoft Excel for Windows 和 Mac 的 Beta 频道。

Image 2

Image 3: JakeArmstrong's avatar

Image 4: Icon for Microsoft rank

许多工作簿早已尝试在一个单元格里塞入多个值:比如项目可能把“Carlos, Henrietta, Jacob”列为三个负责人,或 Forms 调查返回“2:00 PM; 2:30 PM; 3:00 PM”作为一条回答。有了列表,你可以把这些值保留在一个单元格,同时让它们彼此分开以便于筛选、计算等。

后文将更深入探讨单元格中的数组和嵌套数组。

Image 15: JakeArmstrong's avatar

注意: 这些是预览功能。在正式发布前,其行为可能根据反馈改变。在正式可用前,不建议在重要工作簿中使用。

Lists

列表让你能在单个单元格放入多个值。可通过插入 > 列表或按 Ctrl+J 创建,然后输入或粘贴项目,项目间用逗号或分号分隔(取决于区域设置)。选中单元格中的图标可显示各个值。

创建列表:通过插入 > 列表来插入列表,输入

双击单元格或按 F2 即可像其他值一样添加、删除或编辑列表项。

借助列表,你可以按一个或多个单独项目筛选,而不必按整个文本条目筛选。

左:对逗号分隔文本筛选,需选择整个文本条目;右:对列表筛选,可选择单个列表项

引用列表会返回其所有值用于计算。例如 =B2 会将这些值溢到单独的单元格。

引用列表

Arrays in cells

列表本身有用,但它只是 Excel 更广泛改动的一部分。Excel 史上首次,数组可以作为值或公式结果原生存在于单元格中。它们可以是任意大小和形状,甚至能包含其他数组。

现在,你可以用花括号 { } “包裹”任何溢出公式的公式体,将其结果保留在单个单元格内。

TEXTSPLIT 通常会溢出,但用花括号包裹公式体可把结果保留在一个单元格

自动态数组引入以来,数组结果会跨单元格溢出——例如 ={1;2;3}。用花括号包裹原数组会围绕它创建一个 1x1 数组,于是数组留在单单元格而不溢出。

Image 17: \"Creating

Image 18: \"eft:

Image 19: \"referencing

Image 20: \"TEXTSPLIT

Image 21: \"={1;2;3},

={1;2;3} 会溢出,而 ={{1;2;3}} 结果为单元格内的数组

Image 22: \"nested

花括号长期以来用于描述 Excel 中的数组,现在通过允许多层花括号延伸了该行为,让你建表更灵活:不必为公式溢出预留空间,结果可留在单格。

Arrays inside arrays, or nested arrays

数组现在也能“嵌套”在其他数组中。例如:={{1,2,3};{4,5,6}}

嵌套数组 ={{1,2,3};{4,5,6}} - 溢出数组值

此前,产生“数组的数组”的公式会返回截断结果或 #CALC! 错误。现在,受支持的公式会返回完整的嵌套结果。

下例中可见 TEXTSPLIT 在有、无嵌套数组时的行为:无嵌套时 Excel 只为每行返回第一项;有嵌套时结果溢出,每行一个数组。

现有公式在嵌套数组支持下的改进行为,例如 =TEXTSPLIT(B4:B9,

每行的数组随后可用于进一步计算。

Four new functions: FLATTEN, HAS, HASANY, HASALL

为便于处理数组,新增了四个函数。

FLATTEN(array, [pad_value], [levels]) 通过去除一层或多层嵌套来简化嵌套数组。

沿用上例,FLATTEN 可简化嵌套数组输出,将各个结果溢到网格。我们用空字符串 ("") 作为 pad_value,使项目较少的行在剩余列显示空白。

使用 FLATTEN 去除一层嵌套,将各个结果溢到网格

三个 HAS 函数检查值是否在数组中:

  • HAS(array, value) 若 value 出现在数组任意处返回 TRUE,否则 FALSE。
  • HASANY(array, values) 若 values 中任一值出现返回 TRUE,否则 FALSE。
  • HASALL(array, values) 若 values 中所有值都出现返回 TRUE,否则 FALSE。

在描述电影标签上使用 HAS、HASALL、HASANY 的例子

Do more with spreadsheets using arrays in cells and nested arrays

单元格内的数组开启了以往不实用的表格设计。下方跑步追踪表在一行一次跑步的表中捕获分段用时(每公里耗时),分段数取决于跑步长度,每次跑步的统计在同一表中直接计算。

跑步追踪器,分段作为单元格内数组,含距离、总时间、平均分段、平均速度、最快公里等内联计算

更多例子建议查阅 LinkedIn、YouTube、Reddit 等你喜欢的 Excel 社区。

Enabling nested array calculations in a workbook

兼容版本 3(Compatibility Version 3)将随单元格数组一同发布,多数涉及嵌套数组的计算需要它。可在公式 > 计算选项中为各工作簿设置。详见兼容版本说明。

某些现有公式在兼容版本 3 下会返回不同结果。若工作簿行为不符预期,可保持为兼容版本 1 或 2。

Known limitations

该功能向 Beta 频道推出时有下列限制:

  • 条件格式不检查数组内容,除非用公式
  • 数据验证不能将列表或数组用作下拉项
  • 图表不把数组展开为数据点
  • 数据透视表不将数组值读为源数据
  • Power Query不加载或输出数组值列
  • 查找和替换不能替换列表/数组项

Availability

这些改进正面向 Beta 频道用户推出:

  • Windows:Version 2610 (Build 20520.20000) 或更高
  • Mac:Version 16.114 (Build 26092111) 或更高

本博客涵盖的功能会随时间逐步推出以监控质量和性能,因此部分预览功能可能不会立即可用。功能也可能在此过程中暂停、调整或移除。

Feedback

在 Excel 中点击帮助 > 反馈告知我们你的想法。

评论

讨论整体既好奇又警惕,分歧主轴是:单元格内列表/数组究竟是迟到的实用改进,还是让 Excel 本就松软的类型系统进一步失控;同时不少人认为这并不新鲜,其他工具和旧系统早已有类似能力。

认为这是迟到但终于到来的实用功能

  • 有人觉得早该这么做,而不是 spill;能对单元格内多个值做索引,处理逗号分隔列表、JSON 型字段会轻松很多,甚至把这看作数据库字段支持 JSON 类型并配了好用界面。(较多人) > 这听起来像数据库字段支持 JSON 再加个好用的 UI,虽然说法有点贬低,但我觉得挺酷,会让不少事容易很多。(@kbenson)

认为类型松软和功能堆叠才是 Excel 的灾难

  • 约束和惯用法才能让设计可控,什么都能塞进单元格只会产生没人看得懂的意大利面,还会威胁企业里维护多年的 VBA 脚本和后来 AI 生成的表格。(少数人) > 什么都灵活,就会让你做出没人看得懂的意大利面。(@lordnacho)

认为这并不新,甚至不清楚到底新增了什么

  • 有人指出 TreeSheets 支持类似结构超过十五年,2008 年就在 Excel 里用过单元格内数组,Pick OS 六十一年前就有多值字段;也有人困惑一个单元格本来就能塞很多值,现在所谓“支持”究竟指什么。(较多人) > 我没看文章,但一个单元格不是早就能装很多值吗?谁能解释他们现在到底在“支持”什么?(@smalltorch)

认为旧兼容包袱仍在,新旧问题并存

  • 一边支持列表和数组作为单元格值,一边仍因 Lotus 1-2-3 兼容保留 1900 年 2 月 29 日这个不存在的日期,显得割裂。(少数人) > Excel 现在支持把列表和数组当值放进单元格,却仍然认为 1900 年 2 月 29 日存在,就因为四十年的向后兼容?这世界真奇怪。(@gcanyon)

认为真正革命的方向是让单元格装概率分布

  • 电子表格过于确定性,容易让人误以为它能反映现实;如果单元格和相关结果都是概率分布,才能表达不确定性并暴露尾部风险。(少数人) > 如果单元格能表示概率分布,所有结果单元格也跟着变成分布,就能更好地表达世界的不确定性。(@m101)

认为不该把 Excel 当严肃计算工具,应寻找替代品

  • 有人称在电脑上做数学应通过 Mathematica 这类计算机代数系统;Excel 里数字不必是数字、也不必在某个位置,却会在管理对冲基金时静默出错。另有人推荐 OnlyOffice 作为开源替代,公式支持广且意外稳健。(少数人) > 在电脑上做数学应该用 CAS,比如 Mathematica;Excel 是放荡的灾难,数字“有位置”却不必是数字,还会在你管理对冲基金时静默出错。(@qubex)

用玩笑表达对新功能复杂度的复杂心情

  • 从“Excel 有了 z 轴”到嵌套电子表格和无限缩放,调侃背后是对功能继续堆叠的无奈。(少数人) > Excel 刚刚有了 z 轴。酷。(@drfloyd51)

有价值的补充

  • Excel 仍保留 1900 年 2 月 29 日,是 Lotus 1-2-3 兼容遗留,微软官方文档有说明;于是出现新类型系统和旧日期 bug 并存的奇观。
  • Pick OS 的多值字段、TreeSheets 的层级/多值结构,是常被拿来证明“历史重复”的旧例。
  • Excel for Mac 功能不缺,但 UI 支持不足,实际用起来远不如 Windows 版。
  • 有评论把新功能精确描述为“数据库字段支持 JSON 类型并配上好用 UI”,并认为这比“单元格多值”更接近本质。
  • 有人打算在同一单元格里定义多个 lambda,让其他单元格依赖它们及其类型,以此压力测试新系统。
  • 有人用“科德要哭了”调侃在单元格里塞多值对关系模型的反叛。