【问题标题】:Replace linebreak with substring from another string in sequence using Excel使用Excel按顺序将换行符替换为另一个字符串中的子字符串
【发布时间】:2019-12-20 18:58:37
【问题描述】:

我想用字符串 2 中的子字符串替换字符串 1 上的换行符。替换顺序应根据字符串 2 上的换行符进行排序。 示例/想法应如下所示:

字符串 1:

date1|date2|date3|date4|date5|

字符串 2:

sentence1|sentence2|sentence3|sentence4|sentence5|

预期结果:

date1sentence1date2sentence2date3sentence3date4sentence4date5sentence5

我使用的我知道的公式不完整:

=SUBSTITUTE(A1,MID(A1,6,1),"?")

提前谢谢....

【问题讨论】:

  • Substituted 不会这样做,除非有固定数量的休息。每个换行符都需要一个替代品。你有 TEXTJOIN 吗?
  • @ScottCraner 抱歉,我不太清楚您要表达的意思,因为我对 Excel 公式有点陌生。我没有使用 TEXTJOIN。只要有效,任何公式都可以。日期的数量应与句子的数量相匹配,并由换行符分隔(w/c 我用作标记以了解序列)。这是从 CRM 导出的 CSV 文件。我只是想合并日期及其相应的句子。谢谢。
  • 问题是,“总是有5个日期和句子吗?”如果可以变化,则不能单独使用 SUBSTITUTE。
  • 不,有时是3个日期和3个句子,或者8个日期和8个句子。它通常匹配。这是实际截图screencast.com/t/2PxxMgsvt

标签: excel substitution


【解决方案1】:

如果您可以访问 CONCAT,则可以使用此数组形式:

=CONCAT(TRIM(MID(SUBSTITUTE(A1,"|",REPT(" ",999)),(ROW($ZZ1:INDEX($ZZ:$ZZ,LEN(A1)-LEN(SUBSTITUTE(A1,"|",""))))-1)*999+1,999))&TRIM(MID(SUBSTITUTE(A2,"|",REPT(" ",999)),(ROW($ZZ1:INDEX($ZZ:$ZZ,LEN(A2)-LEN(SUBSTITUTE(A2,"|",""))))-1)*999+1,999)))

作为数组公式,退出编辑模式时需要使用 Ctrl-Shift-Enter 确认,而不是 Enter。

如果有人也可以访问动态数组公式,那么他们可以使用:

=CONCAT(TRIM(MID(SUBSTITUTE(A1,"|",REPT(" ",999)),SEQUENCE(LEN(A2)-LEN(SUBSTITUTE(A2,"|","")),,1,999),999))&TRIM(MID(SUBSTITUTE(A2,"|",REPT(" ",999)),SEQUENCE(LEN(A2)-LEN(SUBSTITUTE(A2,"|","")),,1,999),999)))

它不再需要 CSE 条目。


如果每个字符串总是 5 个项目,那么可以使用 SUBSTITUTE:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"|",TRIM(MID(SUBSTITUTE(A2,"|",REPT(" ",999)),1,999)),1),"|",TRIM(MID(SUBSTITUTE(A2,"|",REPT(" ",999)),999,999)),1),"|",TRIM(MID(SUBSTITUTE(A2,"|",REPT(" ",999)),2000,999)),1),"|",TRIM(MID(SUBSTITUTE(A2,"|",REPT(" ",999)),3000,999)),1),"|",TRIM(MID(SUBSTITUTE(A2,"|",REPT(" ",999)),4000,999)),1)

它要求每个项目使用一个嵌套替换。

【讨论】:

  • 我知道你的公式有效,但我的不是我不确定它是 Excel 版本还是我以错误的方式编辑了你的公式。这是我编辑的版本:=CONCATENATE(TRIM(MID(SUBSTITUTE(A1,MID(A1,23,1),REPT(" ",999)),(ROW($ZZ1:INDEX($ZZ:$ZZ,LEN(A1)-LEN(SUBSTITUTE(A1,MID(A1,23,1),""))))-1)*999+1,999))&TRIM(MID(SUBSTITUTE(B1,MID(A1,23,1),REPT(" ",999)),(ROW($ZZ1:INDEX($ZZ:$ZZ,LEN(B1)-LEN(SUBSTITUTE(B1,MID(A1,23,1),""))))-1)*999+1,999))) 但结果只有 1 条线 screencast.com/t/e2w31uSBLXB5
  • 不是CONCATENATE,应该是CONCAT,如果你没有CONCAT,那么你需要vba来做到这一点。
  • 非常感谢,你是救世主。请问我可以使用这个公式的最少的 Excel 版本是什么?其他替代品,如谷歌表格?再次感谢
  • 它似乎在谷歌表格中工作,但最后缺少一行句子。 screencast.com/t/FnVc6AyXygWM
  • 那是因为您的测试数据在字符串末尾也显示了|。如果不是这种情况,则需要在LEN(A1)-LEN(SUBSTITUTE(A1,"|","")) 之后添加+1
猜你喜欢
  • 2011-04-06
  • 2011-06-06
  • 2011-12-21
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2019-05-14
相关资源
最近更新 更多