【问题标题】:excel 2010 parse out sections of a variable length text stringexcel 2010解析出可变长度文本字符串的部分
【发布时间】:2016-09-08 22:42:51
【问题描述】:

我的数据通常以 CMB1.I2.CB3.str01/02+ 或 01-02.01+ 或该设置的一些随机变化形式出现。我相信最坏的情况是 AR1.IN2.CM3.ST04/05+。

现在我在 col A2-A1000、col B、C、D 等中拥有完整的字符串数据,我正在尝试按部分分隔完整的字符串。我通过在 excel 中使用 left , mid, len and search 函数来分隔字符串,并让用户输入分隔符(在本例中为所有 .,但有时 - 或 / 等)。所以我的公式看起来像这样

使用此示例,AR1.IN2.CM3.ST04/05+ 位于单元格 A5 中,分隔符/分隔符 (.'s) 位于单元格 B2 - D2 中

A5:AR1.IN2.CM3.ST04/05+
A6:A1.I2.CM3.ST06/07-
A7:01.03.4.8/9+

B5 : AR1
b5 中的 eq : =LEFT(A5,SEARCH($B$2,A5,1)-1)

C5 : IN2
C5 中的 eq : =MID(A5,LEN(B5&$B$2)+1,SEARCH($C$2,A5,LEN(B5&$B$2)+1)-LEN(B5&$B$2&$C$2))

D5 : CM3
D5 中的 eq : =MID(A5,LEN(B5&$B$2&C5&$C$2)+1,SEARCH($D$2,A5,LEN(B5&$B$2&C5&$C$2&$D$2)+1)-LEN(B5&$B$2&$C$2&C5&$D$2))

E5 : ST04/05+
E5 中的 eq:=RIGHT(A5,LEN(A5)-LEN(B5&$B$2&C5&$C$2&D5&$D$2))

我的方程式工作正常,但我希望有更简单的方法?当我试图向他们解释每个公式的作用时,我的同事眼睛都呆滞了

【问题讨论】:

  • 你最后用了什么?

标签: excel string parsing split


【解决方案1】:

要缩短公式,您可以:

  1. 添加辅助列来存储分隔符的第一个、第二个等外观的位置。这将为您节省大量阅读/写作,但最重要的是,它将使您的公式更具可读性/可理解性。 这是编程中的一个基本概念,我认为Excel中的公式也应该遵守这个规则。
  2. 添加带有部分字符串剥离结果的辅助列。这些可能是隐藏的、分组的和/或非常狭窄的,因此它们不会打扰。 SUBSTITUTE 和 FIND 在这里可能有用。
  3. 使用 VBA 函数 Split(部分离开 Formulas 领域)。我非常喜欢这个,我经常在用户定义的公式中使用它。
  4. 使用文本到列(完全离开公式领域)。

你的同事看起来会恢复正常...

【讨论】:

  • 我在拆分数据的列上方有分隔符。这些是公式中的锁定单元格。我有大量围绕此步骤运行的 VBA 代码,我将其保留为公式,以便如果我的同事需要调整它,他们可以使用公式。我将研究拆分 vba 功能。我已经有辅助列远离工作表的一侧
【解决方案2】:

更简单的方法。使用 A 列中的数据,在 B1 中输入:

=TRIM(MID(SUBSTITUTE($A1,".",REPT(" ",999)),COLUMNS($A:A)*999-998,999))

将其横向和向下复制。例如:

这类似于“Text-to-Columns”,但有一个公式。

【讨论】:

  • 这肯定是一个更清洁的公式。我假设如果我将"." 更改为单元格引用,则不会出现任何问题。分隔符通常只是.,但实际上它们可以是任何字符。一旦我有解决方案,我会解决这个问题并发布结果
  • 非常好的方法!
  • 此方法的唯一问题是,由于某种原因,当分隔符是 - 符号时,等式省略了字符串末尾的 -。我之前可能没有提到它,但最后的+ 和- 是极性,需要跟踪。否则很棒的公式。
猜你喜欢
  • 2013-12-12
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
相关资源
最近更新 更多