0

我在 C 列中有大量文本,只需要提取一部分。我可以在 Excel 中执行此操作,但希望在 VBA 中执行此操作。这是我在 Excel 中的操作方式

=MID(C2,FIND("IAV",C2)+6,11)

这是 3 个单元格中的信息片段(按行划分):

CVE:CVE-2013-3378

出价:60681

交叉引用:OSVDB #94438,IAVA #2013-A-0126

漏洞发布日期:2013/06/19

补丁发布日期:2013/06/19

插件发布日期:2013/07/24


CPE: 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 #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

4

2 回答 2

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
于 2013-10-23T16:04:58.837 回答
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
于 2013-10-23T16:52:54.910 回答