我在C列中有大量文字,只需要提取一部分。我可以在Excel中完成它,但是想在VBA中使用它。这是我在Excel中的方式
=MID(C2,FIND("IAV",C2)+6,11)
以下是3个单元格中的信息片段(由行分解):
CVE:CVE-2013-3378
BID:60681
Crossref:OSVDB#94438,IAVA#2013-A-0126
漏洞发布日期:2013/06/19
补丁发布日期:2013/06/19
插件发布日期:2013/07/24
CPE:cpe:/ o:microsoft:windows CPE:/ A:微软:Silverlight的
CVE:CVE-2013-3896
BID:62793
Crossref:OSVDB#98223,MSFT#MS13-087,IAVB#2013-B-0117
漏洞发布日期:2013/10/08
补丁发布日期:2013/10/08
BID:25628
Crossref:OSVDB#34600,OSVDB#43371,IAVT#2008-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
答案 0 :(得分:0)
=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 Sub
答案 1 :(得分:0)
我作弊并假设我可以搜索“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