【问题标题】:Data Scrubbing In EXCELEXCEL 中的数据清理
【发布时间】:2017-04-02 18:00:00
【问题描述】:

对于所有计算机专家来说,这可能是一件容易的事!我想在 EXCEL 文本框中提取一串字符。数据集有点乱,有空格、字符和其他我不需要的文本。例如:

我需要从“ABC ABCABC12345D1”中取出 ABC12345D1

                             "ABC,ABCABC12345D1"
                             "KOhn!ABCABC12345D1"
                             "ABCABC12345D2 ABCABC12345D1"
                             "ABCABC12345D1ABCABC12345D1"
                             "MCDONALDABCABC12345D1"

但这只是我必须提取的标识符之一。我希望有一个公式可以拖动到列的其余部分。

所以,ABCABC12345D1 是由

_ _ _ 前三个字符是一个ID

_ _ _ _ _ 第二部分是位置标签

_ _ 最少的过去是它是打开还是关闭(如果无法提取它,我可以活下去。

现在我尝试取正确的 8 或 10 个字符,并取出所有空间,但有没有更清晰的方法来提取这些数据?

【问题讨论】:

    标签: excel text extraction data-scrubbing


    【解决方案1】:

    正则表达式?

    Function Regex(Cell)
        Dim RE As Object
    
        Set RE = CreateObject("vbscript.regexp")
    
        RE.Pattern = "(\w{6}\d{5}\w\d)"
        RE.Global = True
        RE.IgnoreCase = True
        Set Matches = RE.Execute(Cell) 
    
        For Each res In Matches
            Regex = Regex & "," & res
        Next res
        Regex = Mid(Regex, 2)
    End Function
    

    使用 ALT + F11 打开 VBA 编辑器。
    插入 -> 模块 将上面的代码复制粘贴到模块窗口中。 关闭 VBA 编辑器。

    在 Excel 表中写入=Regex(A1) 以激活该功能。

    【讨论】:

    • 谢谢!!有没有更简单的方法来做到这一点?我假设这是 VBA?
    • 是的,这是 VBA。没有看到你没有标记 VBA。抱歉……我可以把它变成 UDF 吗?这样您就可以将其用作公式。假设文本在 A1 中,你应该可以在 B1 中写 REGEX("A1"),它会返回你想要的部分。你可以吗?
    • 您必须使用正则表达式,因为(我猜)它并不总是 ABCABC... 使用正则表达式,您声明要查找的内容,我为六个字符、五个数字、一个字符和一位数,按此顺序。如果它看到了,不管是什么字符或数字,它都是匹配的
    • 非常感谢,我得挖一点,以前没用过REGEX!
    • 我会在明天更新我的答案,我现在在床上。我将把它变成一个 UDF 并解释如何使用它,给你正则表达式的基础知识。但是你需要告诉我你想用火柴做什么。我可以找到模式,但如何处理它。直接贴在小区里?如果有多个怎么办?和第 3 行和第 4 行一样?然后怎样呢?逗号分隔它们?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 2017-07-03
    • 1970-01-01
    • 2023-01-14
    • 2012-09-16
    • 2018-10-28
    • 2015-11-10
    相关资源
    最近更新 更多