首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Excel文件中保留所有引号之间的所有内容

在Excel文件中保留所有引号之间的所有内容
EN

Stack Overflow用户
提问于 2015-07-29 21:29:22
回答 3查看 47关注 0票数 2

我有一个Excel文件(xlsx),它有一个列和一千行。

示例:

代码语言:javascript
复制
row A| oulzdwdwjdwojd=."A180202"wodwdojwdowj
row B| dwodjwodjwdowj-."N310302"wdwdwdwdwdw
row C| wdowduwoduwoduwdowudowudwoduwoduwdouw
row D| woduwoduwdowu-"N330201"

在报价之间,有很多垃圾与资产编号混在一起。我需要删除所有的东西,除了里面的报价。给我留下这样的东西

代码语言:javascript
复制
row A| A180202
row B| N310302
row C| N330201

我是VBS的完全初学者。我相信我可以用C++或Java编写一个程序来完成这个任务,但是我不知道如何用VBScript完成这样的任务,这是VBScript的一部分。我在GUI中使用Excel工具获得了类似的结果,但没有留下我所需要的任何东西。

我该如何在VBScript中做这样的事情呢?我想我必须用左、右或替换的分隔符。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-29 21:48:59

这会让你:

VBA

代码语言:javascript
复制
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中的循环可能看起来就像我想象的那样:

代码语言:javascript
复制
for(var i = 0; i <= 1000; i++){
    if(RE.Test(Excel.Workbooks.ActiveWorkbook.Cells(i, 1).Value2)){
        // Blah blah....
    }
}

(我不写Java,以防你没注意到.)

票数 3
EN

Stack Overflow用户

发布于 2015-07-29 21:40:27

下面是用VBA编写的。对于VBS,只需更改范围引用,并将其放入循环中:

代码语言:javascript
复制
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 Sub

InStr用于查找第一和第二引号的位置,Mid用于提取引号之间的文本。

双引号需要引用,这就是为什么有四个引号。

票数 0
EN

Stack Overflow用户

发布于 2015-07-29 21:45:04

(假设你指的是VBA.)

添加对Microsoft VBScript Regular Expressions 5.5库的引用,您可以使用regex提取资产ID。

代码语言:javascript
复制
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 Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31711485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档