将所有内容保存在Excel文件中的引号之间

时间:2015-07-29 21:29:22

标签: excel vba excel-vba

我有一个包含一列和一千行的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中做这样的事情?我猜我必须使用左,右或替换的分隔符。

3 个答案:

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