如何VBA Excel宏字符串的一部分

时间:2017-09-12 15:50:04

标签: excel vba excel-vba

我目前忙于Excel工具和学习很多,但我有一个问题。目前我在行中有几行数据。在行中有很多数据,但我需要行的特定部分。当然我可以手动删除它,但为了3000行我会浪费很多时间。

任何人都可以帮助我使用过滤数据的宏。我需要的数据在[和]之间,例如[data]

我希望你们可以帮助我,如果你需要更多信息,请问我!我希望你们能帮助我!

示例字符串ROW:

[Sandwitch]><xsd:element name="T8436283"

那我需要什么?

所以我需要一个只能将Sandwitch从中取出并将其粘贴到B列中的宏。包含所有信息的字符串保留在A列,Sandwitch保留在B列和所有行。

3 个答案:

答案 0 :(得分:2)

选项1:查找/替换      1)在另一列中复制数据(只保存原始副本)      2)执行查找/替换&#34; * [&#34;      3)执行查找/替换&#34;]&#34;           现在您的数据介于[]。

之间

选项2:使用公式      1)让我们假设列中的原始数据&#34; A&#34;      2)将该公式应用于#34; B&#34;栏中。这将在[]之间提取数据         = MID(A1,FIND(&#34; [&#34;,A1)+ 1,FIND(&#34;]&#34;,A1) - 查找(&#34; [&#34;,A1 )-1)

选项3:宏      如果绝对需要,我可以帮助创建一个宏,否则先尝试两个更简单的选项。

答案 1 :(得分:0)

如果您想要使用正则表达式,请使用以下代码。您必须添加对VB脚本库的引用

Tools > References > Microsoft VBScript Regular Expressions 5.5

然后代码如下:

Sub textBetweenStuffs()

    Dim str As String
    Dim regEx As RegExp
    Dim m As Match
    Dim sHolder As MatchCollection
    Dim bracketCollection As Collection
    Dim quoteCollection As Collection

    Set regEx = New RegExp

    'Matches anything in between an opening bracket and first closing bracket
    regEx.Pattern = "\[(.*?\])"
    str = "[Sandwitch]><xsd:element name=""T8436283"""

    'populates matches into match collection
    Set sHolder = regEx.Execute(str)

    Set bracketCollection = New Collection

    'loop through values in match collection to do with as you wish
    For Each m In sHolder
        bracketCollection.Add m.Value
    Next i

    Set sHolder = Nothing

    'get values between Quotations
    regEx.Pattern = "\"(.*?\")"

    'populates matches into match collection
    Set sHolder = regEx.Execute(str)

    Set quoteCollection = New Collection

    'loop through values in match collection to do with as you wish
    For Each m In sHolder
        quoteCollection.Add m.Value
    Next i

End Sub

答案 2 :(得分:0)

一般用途“在 s 中找到元素 x 直到下一个 y ”:

Function GenExtract(FromStr As String, _
                    StartSep As String, EndSep As String) _
                As Variant

Dim StPos As Long
Dim EnPos As Long

GenExtract = CVErr(xlErrNA)
If StartSep = "" Or EndSep = "" Then Exit Function 'fail
StPos = InStr(1, FromStr, Left(StartSep, 1))
If StPos = 0 Or StPos = Len(FromStr) Then Exit Function 'fail
EnPos = InStr(StPos + 1, FromStr, Left(EndSep, 1))
If EnPos = 0 Then Exit Function 'fail

GenExtract = Mid(FromStr, StPos + 1, EnPos - StPos - 1)

End Function

如果两个分隔符相同,按引号,它会给出第一个字符串。