【问题标题】:MS Excel - Separate texts by delimiter into specific columnsMS Excel - 通过分隔符将文本分隔到特定列中
【发布时间】:2020-03-05 20:14:47
【问题描述】:

在 MS Excel 中,我需要用逗号分隔文本,从右侧提取三项内容并将它们放在三个不同的列中,即城市、州和国家/地区。

问题:在完整地址的原文中,有时我只得到国家或州。此外,完整地址的长度也是不同的。

这是实际的spreadsheet

【问题讨论】:

    标签: excel vba excel-formula spreadsheet


    【解决方案1】:

    假设数据保存在A1:A6 中,如屏幕截图所示

    C1 中,上下复制公式:

    =IFERROR(TRIM(MID(SUBSTITUTE(","&$A1,",",REPT(" ",399)),(LEN($A1)-LEN(SUBSTITUTE(($A1),",",""))+COLUMN(A1)-2)*399,399)),"")
    

    【讨论】:

      【解决方案2】:

      如果您有带有FILTERXML 功能的 Excel 2013+,您可以使用:

      =IFERROR(FILTERXML("<t><s>" & SUBSTITUTE($A1,",","</s><s>") & "</s></t>","//s[last()-3+" & COLUMNS($A:A) & "]"),"")
      

      上下填充。

      • 创建一个 XML,每个逗号分隔的字符串都是一个 节点
      • 提取最后 3 个节点,如果不存在则返回 ""

      【讨论】:

        【解决方案3】:

        首先在一个标准模块中输入以下三个用户自定义函数:

        Public Function LastWord(s As String) As String
            Dim arr
            s = ", , , , , " & s
            arr = Split(s, ", ")
            LastWord = arr(UBound(arr))
        End Function
        
        Public Function NLastWord(s As String) As String
            Dim arr
            s = ", , , , , " & s
            arr = Split(s, ", ")
            NLastWord = arr(UBound(arr) - 1)
        End Function
        
        Public Function NNLastWord(s As String) As String
            Dim arr
            s = ", , , , , " & s
            arr = Split(s, ", ")
            NNLastWord = arr(UBound(arr) - 2)
        End Function
        

        然后在E1中输入:

        =lastword(A1)
        

        并向下复制。在 D1 中输入:

        =NLastWord(A1)
        

        并向下复制。在 C1 中输入:

        =NNLastWord(A1)
        

        并向下复制:

        【讨论】:

          猜你喜欢
          • 2010-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-29
          • 2020-09-06
          • 2019-05-11
          • 1970-01-01
          • 2018-03-17
          相关资源
          最近更新 更多