excel - 如何删除两个字符串之间的文本,包括标识符?

标签 excel excel-formula excel-2010 excel-2007 vba

我需要删除两个字符串之间的文本。
文本示例如下:

Abc%678x”cv ","@metadata":{abxkl "DataArray"}},{"columnName":"

要求是从 ,"@met 开始删除文本,直到 "}

要求是使用 、"@met"} 作为开始和结束标识符,并删除它们之间的文本(包括标识符)。

文件中可能会多次出现此开始和结束标识符。

输出应如下所示:

Abc%678x”cv "},{"columnName":"

如何编写 Excel 公式或简单的 VBA 脚本来删除两个字符串之间的文本(包括标识符)?

最佳答案

公式:

=LEFT(A1,FIND(",""@met",A1)-1)&RIGHT(A1,LEN(A1)-FIND("}",A1,FIND("""@met",A1)))

VBA函数:

Function RemoveBetweenSeparators( _
    ByVal MyString As String, _
    ByVal SepL As String, _
    ByVal SepR As String) _
    As String

    Dim sL As String
    Dim sR As String

    sL = Split(MyString, SepL)(0)
    sR = Replace(MyString, sL, "")
    sR = Replace(sR, Split(sR, SepR)(0) & SepR, "")

    RemoveBetweenSeparators = sL & sR
End Function

可以这样使用:

=RemoveBetweenSeparators(A1,"""@meta","}")

编辑:我第一次也错过了“多次出现”的要求!这使得它有点棘手,但试试这个:

Function RemoveBetweenSeparatorsMultiple( _
    ByVal MyString As String, _
    ByVal SepL As String, _
    ByVal SepR As String) _
    As String

    Dim sOut As String
    Dim sL As String

    Do Until InStr(MyString, SepL) = 0
        sL = Split(MyString, SepL)(0)
        sOut = sOut & sL
        MyString = Replace(MyString, sL & SepL, "", 1, 1)
        sL = Split(MyString, SepR)(0)
        MyString = Replace(MyString, sL & SepR, "", 1, 1)
    Loop

    RemoveBetweenSeparatorsMultiple = sOut & MyString

End Function

关于excel - 如何删除两个字符串之间的文本,包括标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47157491/

相关文章:

vba - 如果公式结果为 0,则将单元格留空

arrays - 数组分割和提取

perl - 使用perl excel win32 ole检索Excel单元格背景颜色

excel - 前置式和后置式 | Excel 中的正态分布柱形图和 S 曲线

excel - 为一系列列运行相同的 VBA 代码(一次一列)

excel-2010 - Excel 2010 CTRL+SHIFT+L。不工作

vba - 通过电子邮件发送范围而不是行

excel - 如果包含特定值,则将值从一列复制到另一列

vba - 如何在 Application.OnKey 中使用方括号? (Excel VBA)

c# - 将多个 CSV 文件中的数据导入到 Excel 工作表中