我有一个包含一列和一千行的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完成这个任务,这是Excel的一部分。我使用GUI中的Excel工具获得了类似的结果,但没有任何东西让我完全满足我的需要。
我如何在VBScript中做这样的事情?我猜我必须使用左,右或替换的分隔符。
答案 0 :(得分:3)
这将是你:
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以防万一你没注意到......)
答案 1 :(得分:0)
以下是用VBA编写的。对于VBS,您只需要更改Range引用,并将其置于循环中:
InStr
Mid
用于查找第一个和第二个引号的位置,ag
用于提取引号之间的文本。
需要引用双引号,这就是有四个引号的原因。
答案 2 :(得分:0)
(假设你的意思是VBA ......)
添加对var ContactInfo = document.getElementById("Contact").children;
var i;
for (i = 0; i < 4; i++) {
ContactInfo[i].style.fontSize = "13px";
}
库的引用,您可以使用正则表达式来提取资产ID。假设每行A列中有一个资产ID,它将把提取的ID放入B列。
Microsoft VBScript Regular Expressions 5.5