我在C栏中有大量的文本,只需要提取一部分。我可以在Excel中这样做,但我希望在VBA中这样做。下面是我如何在Excel中这样做的
=MID(C2,FIND("IAV",C2)+6,11)下面是三个单元格中的信息片段(按行划分):
CVE: CVE-2013-3378
投标: 60681
交叉参考: OSVDB #94438,IAVA #2013-A-0126
公布日期: 2013/06/19
贴片发布日期: 2013/06/19
插件发布日期: 2013/07/24
cpe:/o:microsoft:windows cpe:/a:microsoft:silverlight
CVE: CVE-2013-3896
投标: 62793
交叉参考: OSVDB #98223,MSFT #MS13-087,IAVB #2013-B-0117
公布日期: 2013/10/08
补丁发布日期: 2013/10/08
投标: 25628
交叉参考: OSVDB #34600,OSVDB #43371,IAVT #200-T-0046,CWE #20
漏洞发布日期: 2007/09/05
补丁发布日期: 2007/09/05
插件发布日期: 2011/10/04
我的目标是在IAVA #、IAVB #和IAVT #之后提取任何内容。所以我只剩下2013-A-0126 2013-B-0117 2008-T-0046
发布于 2013-10-23 16:52:54
我作弊,并假设我可以搜索"IAV“,并添加6个字符,以找到字符串的开头。此外,列号被设置为变量。
Sub Test()
Dim ColNumber As Integer
ColNumber = 3 'Set the column you wish to run on
Worksheets("Sheet1").Activate
LastCell = Cells(Worksheets("Sheet1").Rows.Count, ColNumber).End(xlUp).Row
For TheRow = 1 To LastCell
Worksheets("Sheet1").Cells(TheRow, ColNumber + 1).Value = Mid(Worksheets("Sheet1").Cells(TheRow, ColNumber).Value, InStr(Worksheets("Sheet1").Cells(TheRow, ColNumber).Value, "IAV") + 6, 11)
Next
End Sub发布于 2013-10-23 16:04:58
=MID(C2,FIND("IAV",C2)+6,11)MID在VB中保持不变,FIND变成InStr,因此这个公式转换为:
StringVariable = Mid([C2],InStr([C2],"IAV") + 6, 11)把答案写在D栏中,对C栏中的每个单元格.
Option Explicit
Sub WriteData()
Dim RowNum as Long
Dim LastRow as Long
Dim DataString as String
LastRow = Range("C1").End(xldown).Row
For RowNum=2 to LastRow
DataString= Cells(RowNum,3) ' 3 = C
Cells(RowNum,4)=Mid(DataString,InStr(DataString,"IAV") + 6, 11)
Next RowNum
End Subhttps://stackoverflow.com/questions/19546388
复制相似问题