VBA Excel - 从C列中提取数据并放入D列

时间:2013-10-23 15:46:58

标签: excel vba

我在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

2 个答案:

答案 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