Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除特殊字符VBA前后的字符_Vba - Fatal编程技术网

删除特殊字符VBA前后的字符

删除特殊字符VBA前后的字符,vba,Vba,我有一组带有字符串的数据,例如1782_eqjobs.hostname、519_fid_quant.hostname 我希望能够将所有字符保留在第一个“u”和“.”中,然后删除其余字符 比如, 1782_eqjobs.hostname->eqjobs 519\u fid\u quant.hostname->fid\u quant 是否可以使用宏来执行此操作?您可以使用 _(.*)\. 然后提取匹配的第1组。这有点脆弱,因为您提供的布局中的所有字符串都没有一些文本的多个实例。 我指的是实施,例

我有一组带有字符串的数据,例如1782_eqjobs.hostname、519_fid_quant.hostname

我希望能够将所有字符保留在第一个“u”和“.”中,然后删除其余字符

比如,

1782_eqjobs.hostname->eqjobs

519\u fid\u quant.hostname->fid\u quant


是否可以使用宏来执行此操作?

您可以使用

_(.*)\.
然后提取匹配的第1组。这有点脆弱,因为您提供的布局中的所有字符串都没有一些文本的多个实例。

我指的是实施,例如:

Option Explicit
Public Sub test()

    Debug.Print GetString("1782_eqjobs.hostname")

End Sub

Public Function GetString(ByVal inputString As String) As Variant
    Dim matches As Object

    With CreateObject("vbscript.regexp")
        .Global = True
        .MultiLine = True
        .IgnoreCase = True
        .Pattern = "_(.*)\."
        If .test(inputString) Then
            Set matches = .Execute(inputString)
            GetString = matches(0).SubMatches(0)
            Exit Function
        End If
    End With
    GetString = CVErr(xlErrNA)
End Function

您可以使用

_(.*)\.
然后提取匹配的第1组。这有点脆弱,因为您提供的布局中的所有字符串都没有一些文本的多个实例。

我指的是实施,例如:

Option Explicit
Public Sub test()

    Debug.Print GetString("1782_eqjobs.hostname")

End Sub

Public Function GetString(ByVal inputString As String) As Variant
    Dim matches As Object

    With CreateObject("vbscript.regexp")
        .Global = True
        .MultiLine = True
        .IgnoreCase = True
        .Pattern = "_(.*)\."
        If .test(inputString) Then
            Set matches = .Execute(inputString)
            GetString = matches(0).SubMatches(0)
            Exit Function
        End If
    End With
    GetString = CVErr(xlErrNA)
End Function
也许

Sub CleanUp()
    On Error Resume Next
    For Each c In Selection
        c.Value = Mid(c.Value, InStr(1, c.Value, "_") + 1, InStr(1, c.Value, ".") - InStr(1, c.Value, "_") - 1)
    Next c
End Sub
也许

Sub CleanUp()
    On Error Resume Next
    For Each c In Selection
        c.Value = Mid(c.Value, InStr(1, c.Value, "_") + 1, InStr(1, c.Value, ".") - InStr(1, c.Value, "_") - 1)
    Next c
End Sub

这个简单的公式可以做到:

=MID(LEFT(A1,FIND(".",A1)-1),FIND("_",A1)+1,LEN(A1))

这个简单的公式可以做到:

=MID(LEFT(A1,FIND(".",A1)-1),FIND("_",A1)+1,LEN(A1))

您可以在工作表或VBA中使用工作表函数

假设字符串在A1范围内

单元格中的函数如下所示:

=MID(A1,FIND("_",A1,1)+1,(FIND(".",A1,1)-FIND("_",A1,1))-1)
要在VBA中使用它,您需要:

worksheetfunction.MID(A1,FIND("_",A1,1)+1,(FIND(".",A1,1)-FIND("_",A1,1))-1)
希望有帮助


Phil

您可以在工作表或VBA中使用工作表函数

假设字符串在A1范围内

单元格中的函数如下所示:

=MID(A1,FIND("_",A1,1)+1,(FIND(".",A1,1)-FIND("_",A1,1))-1)
要在VBA中使用它,您需要:

worksheetfunction.MID(A1,FIND("_",A1,1)+1,(FIND(".",A1,1)-FIND("_",A1,1))-1)
希望有帮助


菲尔

看。是的,vba会做的。公式也是如此。有很多方法可以做到这一点。请参阅。是的,vba可以做到这一点。公式也是如此。有很多方法可以做到这一点。对不起,我对使用VBA完全陌生。你能解释一下你的意思吗?对不起,我对使用VBA完全陌生。你能解释一下你的意思吗?
worksheetfunction.MID(A1,FIND(“,”,A1,1)+1,(FIND(“,”,A1,1)-FIND(“,”,A1,1))-1)
不起作用。首先,Mid是一个自然的vba函数。其次,所有的
查找
都需要
工作表功能。
每个。但是为什么不使用
INSTR
?但是你会得到@mrkrister的答案。从那以后我学到了很多,我同意我以前的答案很糟糕。我必须向大家道歉。谢谢@ScottCraner纠正我的错误。
工作表函数。MID(A1,FIND(“,”,A1,1)+1,(FIND(“,”,A1,1)-FIND(“,”,A1,1))-1)
将不起作用。首先,Mid是一个自然的vba函数。其次,所有的
查找
都需要
工作表功能。
每个。但是为什么不使用
INSTR
?但是你会得到@mrkrister的答案。从那以后我学到了很多,我同意我以前的答案很糟糕。我必须向大家道歉。谢谢你@ScottCraner纠正我的错误。