有没有办法指定输入是 Google 表格中的单个单元格?
Is there a way to specify an input is a single cell in Google Sheets?
我想遍历一个单元格数组,在本例中为 B5:B32,并在新数组中保留与某些参考文本相等的值。
但是,如今的 SPLIT 接受数组作为输入。这意味着如果我在 ARRAYFORMULA 或 FILTER 中使用数组符号“B5:B32”,它会将其视为一个范围,而不是我们一次迭代一个单元格的数组。
有没有办法确保特定范围是我们迭代的范围,而不是一次作为输入给出的范围?
我考虑的是使用单元格的替代公式,使用 INDEX(ROW(B5), COLUMN(B5)) 但 ROW 和 COLUMN 也接受数组值,所以我不知道如何继续。
示例代码:
ARRAYFORMULA(
INDEX(
SPLIT(B5:B32, " ", 1), 1
) = "Some text here"
)
示例sheet:
https://docs.google.com/spreadsheets/d/1H8vQqD5DFxIS-d_nBxpuwoRH34WfKIYGP9xKKLvCFkA/edit?usp=sharing
注意:在示例 sheet 中,如果我创建包含 SPLIT 公式结果的单独列,我可以获得我想要的答案。这样,我首先执行所需的 SPLITS,然后通过指定正确的范围从该输出中获取我需要的值。
有没有一种方法可以在不先创建输出然后将单元格范围作为 FILTER 或其他类似函数的输入的情况下执行此操作?
例如,在单元格 C35 中,我已经一次性完成了所需的 SPLIT 和 FILTER,但我仍然需要找到一种方法来总结第二列第一个字符的值。这样做需要我采用第二列的 LEFT 值,但为此我需要输出结果并在新单元格中继续。有没有办法避免这种情况?
拉尔夫,我不确定你的样本 sheet 是否真的反映了你想要得到的结果,因为,例如,我假设你可能想要每个区域的总小时数.
无论如何,这个公式提取了所有的区域和工作时间,然后很容易做进一步的计算。
=ArrayFormula({REGEXEXTRACT({C5:C9;D5:D9;E5:E9;F5:F9;G5:G9;H5:H9},"(.*) \d"),
VALUE(REGEXEXTRACT({C5:C9;D5:D9;E5:E9;F5:F9;G5:G9;H5:H9}," (\d+)hrs"))})
在单元格 E13 中尝试,以查看输出。
第一个REGEXEXTRACT
拉出第一个space前面的所有文字和数字,第二个拉出每个单元格中一串“#hr”的所有数字。如有必要,可以根据您的实际要求修改这些标准。请注意,它需要使用 VALUE
,将小时数从文本转换为数值,因为 REGEXEXTRACT 会生成文本(字符串)结果。
它涉及将您的多个数据列连接成一长列数据,以便以相同的方式更简单地处理所有单元格。
下一个公式将为您提供一个总和,无论您在 B6 中键入什么匹配 room/task,例如。
=ArrayFormula(QUERY({REGEXEXTRACT({C5:C9;D5:D9;E5:E9;F5:F9;G5:G9;H5:H9},"(.*) \d"),
VALUE(REGEXEXTRACT({C5:C9;D5:D9;E5:E9;F5:F9;G5:G9;H5:H9}," (\d+)hrs"))},
"select Col1, sum(Col2) where Col1='"&B6&"' group by Col1 label sum(Col2) '' ",0))
根据我从 kirkg13 的回答和其他来源中了解到的信息,我也会回答我自己的问题。
简答:不,没有。如果您想对特定的单元格值进行非常复杂的计算,有一些选项和提示:
编写您自己的函数。您可以扩展 INDEX 以接受数组输入,因此您可以 select 数组中的任何一组值而无需先输出它。不使用 REGEXMATCH 和 QUERY 获取问题示例数据集中小时数总和的示例:https://docs.google.com/spreadsheets/d/1NljC-pK_Y4iYwNCWgum8B4NJioyNJKYZ86BsUX6R27Y/edit?usp=sharing.
使用查询。这会使您的公式很快变得更加复杂,但仍然是 selecting 数据(例如特定列)的可读且普遍适用的方法。在问题的初始示例中,QUERY 只能检索第二列,就像经过修改的 INDEX 函数一样。
更有效地格式化您的输入数据。您越容易从输入中获取数字,就越不需要使用 REGEXMATCHES 和 QUERY 混淆代码来进行计算。在 RANGE 上执行 SUM 比执行 FILTER 的 SPLIT 的 ARRAYFORMULA 的 QUERY 的 LEFT 的 VALUE 更紧凑。当然,这将取决于您从何处获得意见以及您是否对此有任何发言权。
此外,根据您将 运行 对给定数据集的查询次数,实际上可能需要将公式拆分为单独的部分并输出部分结果以保持代码成为 12 个不同查询和公式的合并。如果不需要别人查看结果,您可以随时选择隐藏特定的列和行。
我想遍历一个单元格数组,在本例中为 B5:B32,并在新数组中保留与某些参考文本相等的值。
但是,如今的 SPLIT 接受数组作为输入。这意味着如果我在 ARRAYFORMULA 或 FILTER 中使用数组符号“B5:B32”,它会将其视为一个范围,而不是我们一次迭代一个单元格的数组。
有没有办法确保特定范围是我们迭代的范围,而不是一次作为输入给出的范围?
我考虑的是使用单元格的替代公式,使用 INDEX(ROW(B5), COLUMN(B5)) 但 ROW 和 COLUMN 也接受数组值,所以我不知道如何继续。
示例代码:
ARRAYFORMULA(
INDEX(
SPLIT(B5:B32, " ", 1), 1
) = "Some text here"
)
示例sheet: https://docs.google.com/spreadsheets/d/1H8vQqD5DFxIS-d_nBxpuwoRH34WfKIYGP9xKKLvCFkA/edit?usp=sharing
注意:在示例 sheet 中,如果我创建包含 SPLIT 公式结果的单独列,我可以获得我想要的答案。这样,我首先执行所需的 SPLITS,然后通过指定正确的范围从该输出中获取我需要的值。
有没有一种方法可以在不先创建输出然后将单元格范围作为 FILTER 或其他类似函数的输入的情况下执行此操作?
例如,在单元格 C35 中,我已经一次性完成了所需的 SPLIT 和 FILTER,但我仍然需要找到一种方法来总结第二列第一个字符的值。这样做需要我采用第二列的 LEFT 值,但为此我需要输出结果并在新单元格中继续。有没有办法避免这种情况?
拉尔夫,我不确定你的样本 sheet 是否真的反映了你想要得到的结果,因为,例如,我假设你可能想要每个区域的总小时数.
无论如何,这个公式提取了所有的区域和工作时间,然后很容易做进一步的计算。
=ArrayFormula({REGEXEXTRACT({C5:C9;D5:D9;E5:E9;F5:F9;G5:G9;H5:H9},"(.*) \d"),
VALUE(REGEXEXTRACT({C5:C9;D5:D9;E5:E9;F5:F9;G5:G9;H5:H9}," (\d+)hrs"))})
在单元格 E13 中尝试,以查看输出。
第一个REGEXEXTRACT
拉出第一个space前面的所有文字和数字,第二个拉出每个单元格中一串“#hr”的所有数字。如有必要,可以根据您的实际要求修改这些标准。请注意,它需要使用 VALUE
,将小时数从文本转换为数值,因为 REGEXEXTRACT 会生成文本(字符串)结果。
它涉及将您的多个数据列连接成一长列数据,以便以相同的方式更简单地处理所有单元格。
下一个公式将为您提供一个总和,无论您在 B6 中键入什么匹配 room/task,例如。
=ArrayFormula(QUERY({REGEXEXTRACT({C5:C9;D5:D9;E5:E9;F5:F9;G5:G9;H5:H9},"(.*) \d"),
VALUE(REGEXEXTRACT({C5:C9;D5:D9;E5:E9;F5:F9;G5:G9;H5:H9}," (\d+)hrs"))},
"select Col1, sum(Col2) where Col1='"&B6&"' group by Col1 label sum(Col2) '' ",0))
根据我从 kirkg13 的回答和其他来源中了解到的信息,我也会回答我自己的问题。
简答:不,没有。如果您想对特定的单元格值进行非常复杂的计算,有一些选项和提示:
编写您自己的函数。您可以扩展 INDEX 以接受数组输入,因此您可以 select 数组中的任何一组值而无需先输出它。不使用 REGEXMATCH 和 QUERY 获取问题示例数据集中小时数总和的示例:https://docs.google.com/spreadsheets/d/1NljC-pK_Y4iYwNCWgum8B4NJioyNJKYZ86BsUX6R27Y/edit?usp=sharing.
使用查询。这会使您的公式很快变得更加复杂,但仍然是 selecting 数据(例如特定列)的可读且普遍适用的方法。在问题的初始示例中,QUERY 只能检索第二列,就像经过修改的 INDEX 函数一样。
更有效地格式化您的输入数据。您越容易从输入中获取数字,就越不需要使用 REGEXMATCHES 和 QUERY 混淆代码来进行计算。在 RANGE 上执行 SUM 比执行 FILTER 的 SPLIT 的 ARRAYFORMULA 的 QUERY 的 LEFT 的 VALUE 更紧凑。当然,这将取决于您从何处获得意见以及您是否对此有任何发言权。
此外,根据您将 运行 对给定数据集的查询次数,实际上可能需要将公式拆分为单独的部分并输出部分结果以保持代码成为 12 个不同查询和公式的合并。如果不需要别人查看结果,您可以随时选择隐藏特定的列和行。