如何VBA Excelmacros的一部分的string

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

任何人都可以帮我一个过滤数据的macros。 我需要的数据是在[和]之间,所以例如[数据]

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

示例stringROW:

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

那么我需要什么?

所以我需要一个只有Sandwitch的macros,并将其粘贴到B列。 包含所有信息的string保留在A列,Sandwitch进入B列,对于所有行。

选项1:查找/replace1)将数据复制到另一列(只保存原始副本)2)执行查找/replace“* [”3)执行查找/replace“]”现在您有位于[]之间的数据。

选项2:使用公式1)让我们假设在“A”列中的原始数据2)在列“B”中应用这个公式,它将在[] = MID(A1,FIND(“[”,A1)+1, FIND( “]”,A1) – 查找( “[”,A1)-1)

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

一个通用的目的是“从x开始到下一个yfind元素”:

 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 

如果两个分隔符是相同的,按照引号,它给出了由这些封闭的第一个string。

如果你想在正则expression式中弄湿你的脚,下面的代码会带你到那里。 您必须添加对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