在本网站和其他一些网站的帮助下,我几乎解决了这个工作相关的项目,我原本认为它远远超出了我的能力范围。这个社区提供了极大的帮助,我要为此感谢所有人。我遇到的最后一件事是,目前每次我在工作表上添加/更新数据时,都需要花费大量时间来重新计算所有正在使用的公式。我认为发生这种情况的主要原因是我的一列中的数据之间有很多空白单元格。
事情是这样的。我有一张有 2 页的 Google Sheet。第一页名为 Raw,有 3 列,用于导入从其他地方复制/粘贴的“原始”数据。第二页名为 Clean,有 3 列,用于收集我需要的清理后的数据。干净表格上的 A 列和 C 列很好,没有很多空白单元格。由于原始数据的来源以及我从中提取的内容,B 列中我实际需要的数据字符串之间留有大量空白单元格。这是我在干净数据页面的 B 列中使用的公式:=IFERROR(REGEXREPLACE(Raw!B2,"[$][0-9]{1,4} · ","")),您可能已经看到,它从原始页面的 B 列中提取特定字符串。所有其他与正则表达式不匹配的信息都使我的干净表格中出现空白单元格。
有人能推荐一种最佳方法来消除空白页上的空白单元格,同时仍能提取我需要的信息吗?缓慢的重新计算是我需要解决的最后一个障碍,然后我才能将其部署到工作中,让我的日常生活变得更加轻松。
提前感谢大家的任何建议,并对冗长的文字表示歉意!
答案1
REGEXREPLACE
由于Excel 中没有Google 电子表格解决方案,因此请添加 IFERROR 包装器。向下复制,这样行 ($A1) 将递增。
=ARRAYFORMULA( INDEX( REGEXREPLACE( $B$2:$B$1000, "[$][0-9]{1,4} · ", ""), SMALL( IF( REGEXREPLACE( $B$2:$B$1000, "[$][0-9]{1,4} · ", "") <> "", ROW($B$2:$B$1000) - ROW($B$2) + 1, ""), ROW($A1))))
答案2
我认为修改您的原始方法更容易。IFERROR 并不合适,因为如果没有匹配,它不会返回错误。
改变:
=IFERROR(REGEXREPLACE(Raw!B2,"[$][0-9]{1,4} · ",""))
到:
=REGEXREPLACE(Raw!B2,"[$][0-9]{1,4} · (.*)","$1")
基本上,通过将“保留”内容括在括号中来创建一个捕获组。
(.*)
然后在开头删除匹配的内容。然后使用以下命令引用捕获组:
$1
结果将类似如下:
Cell B1 Formula: =REGEXREPLACE(A1,"[$][0-9]{1,4} · (.*)","$1")
| A | B |
|____________________________________|
1 | $55 · Barley | Barley |
2 | $2 · Squid | Squid |
3 | Bread | Bread |
4 | $27 · Gun Powder | Gun Powder |
5 | 3" of Filament | 3" of Filament |
任何不匹配的内容[$][0-9]{1,4} ·
都将通过您的 RegEx 过滤器。