我只需要将特定字符串拆分为数字,然后从 Google 工作表中的特定字符串中最大化这些数字?

I would need to split only specific strings to numbers and then maximize these numbers from the specific strings in Google sheets?

我的 google sheet 散布 sheet 个单元格的示例


1 AAA C1 BBB C4 AAA C7

A1:“AAA C1” B1:“BBB C4” C1:“AAA C7”


我需要最大化所有以“AAA”开头的字符串中字母“C”之后的最高数字。我只是通过使用公式达到最大化“C”之后的所有数字:

=Max(ARRAYFORMULA(VALUE(REGEXREPLACE(a1:c1,"[^[:digit:]]", ""))))

然而,使用上面的公式我无法 select 仅以“AAA”开头的字符串。我试过函数 =maxifs,但它不允许将诸如 MID 之类的字符串函数应用于单元格范围。

这是我的第一个问题,我希望一切都清楚,并且有人可以帮助我解决这个问题。

谢谢!

我认为您只需要更改您的 REGEX 表达式。

^A{3}[^A].*?C(?=\d+)
  • ^A{3}[^A] : 刚好以三个大写开头 A
  • .*?C : 找到第一个大写 C
  • (?=\d+) : C 后跟至少一个数字。

这将提取您要用 空字符串替换的部分。
例如AAA C1 将提取 AAA C,替换后将只留下 1

建议的解决方案 #1:

=Max(ARRAYFORMULA(VALUE(REGEXREPLACE(FILTER(A1:C1,ISNUMBER(SEARCH("AAA",A1:C1))),"[^[:digit:]]", ""))))

我基本上保留了您原来的公式,因为您已经按原样理解了它。我所做的只是用那个范围的 FILTER 替换你的范围。

FILTER 单独 — FILTER(A1:C1,ISNUMBER(SEARCH("AAA",A1:C1))) — 仅保留搜索“AAA”导致位置编号的范围内的那些条目(即,“AAA”的所有匹配项与其他任何内容一样导致错误)。

如果“AAA”必须出现在字符串的最前面,您可以使用这个版本:

=Max(ARRAYFORMULA(VALUE(REGEXREPLACE(FILTER(A1:C1,SEARCH("AAA",A1:C1)=1),"[^[:digit:]]", ""))))

建议的解决方案 #2:

=Max(ARRAYFORMULA(IFERROR(VALUE(REGEXEXTRACT(A1:C1,"^AAA.+(\d+)$")),-9^9)))

这将从 REGEXEXTRACT 中找到仅匹配“AAA”单元格的最大值。如果某些东西与“AAA”模式不匹配,IFERROR 将 return 一个非常高的负数(这将排除那些永远成为 MAX 的人)。

尝试:

=MAX(INDEX(1*IFNA(REGEXEXTRACT(A1:C1; "^AAA.+(\d+)"))))

你提到:

...maximize the highest numbers after the letter "C" from all the strings that start with "AAA".

提到的答案适用于一行。
如果您想在更复杂的情况下将其应用于任何行范围,您可以使用

=MAX(INDEX(IFERROR( 
   REGEXEXTRACT(FLATTEN(A1:C),"^AAA .*C(\d+)")+0)))