我有一个Excel文件(xlsx),它有一个列和一千行。
示例:
row A| oulzdwdwjdwojd=."A180202"wodwdojwdowj
row B| dwodjwodjwdowj-."N310302"wdwdwdwdwdw
row C| wdowduwoduwoduwdowudowudwoduwoduwdouw
row D| woduwoduwdowu-"N330201"在报价之间,有很多垃圾与资产编号混在一起。我需要删除所有的东西,除了里面的报价。给我留下这样的东西
row A| A180202
row B| N310302
row C| N330201我是VBS的完全初学者。我相信我可以用C++或Java编写一个程序来完成这个任务,但是我不知道如何用VBScript完成这样的任务,这是VBScript的一部分。我在GUI中使用Excel工具获得了类似的结果,但没有留下我所需要的任何东西。
我该如何在VBScript中做这样的事情呢?我想我必须用左、右或替换的分隔符。
发布于 2015-07-29 21:48:59
这会让你:
VBA
Sub SO()
Dim RE As Object, i As Long
Set RE = CreateObject("VBScript.RegExp")
With RE
.Pattern = """.*"""
.Global = True
.IgnoreCase = True
End With
For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
If RE.Test(Cells(i, 1).Value) Then
With Cells(i, 1)
.Value = Replace(RE.Execute(.Value)(0), """", "")
End With
Else
Cells(i, 1).ClearContents
End If
Next
Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlUp
End SubVBScript.RegExp只是一个正则表达式引擎,它允许您匹配字符串中的模式(如果您以前没有在C++或Java中遇到这种情况,我会很惊讶)。您可以设置对此的引用,但为了方便起见,我使用了后期绑定选项。
为了尝试解释,代码正在遍历A列中的每个单元格,并对其执行RegEx测试。如果模式匹配,则用匹配替换单元格的值--如果模式不匹配,则清除单元格的内容。
最后,我们使用Excel的SpecialCells方法识别A列中的任何空白单元格,同时删除它们所属的行。
如果这样做更容易,那么Java中的循环可能看起来就像我想象的那样:
for(var i = 0; i <= 1000; i++){
if(RE.Test(Excel.Workbooks.ActiveWorkbook.Cells(i, 1).Value2)){
// Blah blah....
}
}(我不写Java,以防你没注意到.)
发布于 2015-07-29 21:40:27
下面是用VBA编写的。对于VBS,只需更改范围引用,并将其放入循环中:
Sub Test()
Dim startQuote
Dim endQuote
startQuote = InStr(Range("A1").Value, """")
endQuote = InStr(startQuote + 1, Range("A1").Value, """")
Range("B1").Value = Mid(Range("A1").Value, startQuote + 1, endQuote - startQuote - 1)
End SubInStr用于查找第一和第二引号的位置,Mid用于提取引号之间的文本。
双引号需要引用,这就是为什么有四个引号。
发布于 2015-07-29 21:45:04
(假设你指的是VBA.)
添加对Microsoft VBScript Regular Expressions 5.5库的引用,您可以使用regex提取资产ID。
Public Sub DoIt()
Dim re As New RegExp
re.Pattern = """([^""]+)"""
Dim intRow As Long
For intRow = 1 To 1000
If re.Test(Cells(intRow, 1)) Then
Cells(intRow, 2) = re.Execute(Cells(intRow, 1))(0).SubMatches(0)
End If
Next
End Subhttps://stackoverflow.com/questions/31711485
复制相似问题