【问题标题】:Populate cell with substring following last / in the string使用字符串中最后一个 / 之后的子字符串填充单元格
【发布时间】:2016-04-06 20:53:54
【问题描述】:

我有一个 CSV,其中 A 列填充了字符串,例如:

ABCDE/FGHI/JKL/MNOPQR

我需要用最后一次出现“/”之后的所有内容填充 C 列。在本例中,它必须是“MNOPQR”。

有没有可以用于此的功能? “正确”似乎没有奏效。我不知道每行子字符串的长度是多少,所以我肯定要寻找“/”。

【问题讨论】:

标签: excel csv substring vba


【解决方案1】:

如果您的文字是 A4 格式,请将其放在另一个单元格中:

=MID(A4,LEN(LEFT(A4,FIND(CHAR(1),SUBSTITUTE(A4,"/",CHAR(1),LEN(A4)-LEN(SUBSTITUTE(A4,"/",""))))))+1,LEN(A4)-LEN(LEFT(A4,FIND(CHAR(1),SUBSTITUTE(A4,"/",CHAR(1),LEN(A4)-LEN(SUBSTITUTE(A4,"/",""))))))+1)

我认为这应该可行。感谢@Jerry 的主要部分,它可以在字符串中找到最后一个/

编辑: 根据@ScottCraner,这更短:=MID(A1,SEARCH("}}}",SUBSTITUTE(A1,"/","}}}",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))‌​))+1,LEN(A1))

【讨论】:

  • 这个短一点:=MID(A1,SEARCH("}}}",SUBSTITUTE(A1,"/","}}}",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))))+1,LEN(A1))
  • @ScottCraner - 不错!我知道可能会有更快的方法,谢谢你告诉我!
  • 顺便说一句,这与 Grad eh bacon 链接中的公式几乎完全相同
  • 为什么要搜索"}}}"
  • 查看链接以获得更好的解释,但本质上我将最后一个“/”替换为“}}}”,然后搜索它。
【解决方案2】:

这里有一个更短的公式来返回字符串中最后一个分隔的子字符串。

=TRIM(RIGHT(SUBSTITUTE(A1,"/",REPT(" ",99)),99))

用 99 个空格替换分隔符,然后返回最右边的 99 个字符。前导字符也必须是空格,所以 TRIM 去掉它们。

【讨论】:

    【解决方案3】:

    使用FilterXML 的简单公式方法可能是:

        =FILTERXML("<items><i>" & SUBSTITUTE(A1,"/","</i><i>") & "</i></items>","//i[position()=last()]")
    

    从 vers 的动态特性中获利。 2019+ 您可以将单元格地址更改为范围输入,例如A1:A10 允许在所谓的溢出范围内输出。

    VBA 方法

    由于VBA 标签最近已添加到 OP, 一个明显的 VBA 方法是拆分字符串输入并通过 Ubound() 获取最后一个数组元素:

        Dim tmp As Variant
        tmp = Split("ABCDE/FGHI/JKL/MNOPQR", "/")
        Debug.print tmp(Ubound(tmp))     ' ~~> MNOPQR
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 2021-10-14
      • 2015-05-11
      • 1970-01-01
      相关资源
      最近更新 更多