我有一个包含一栏和一千行的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来执行此操作,但不知道如何使用Excel的VBScript完成此类任务。使用GUI中的Excel工具也获得了类似的结果,但没有任何东西可以满足我的需求。
我将如何在VBScript中执行类似的操作?我猜想我必须使用带有左,右或替换的定界符。
这将为您:
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 Sub
VBScript.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 ...)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句