将所有内容保存在Excel文件中

我有一个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中做这样的事情? 我想我必须使用左,右或replace分隔符。

这会做你:

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只是一个正则expression式引擎,它允许你匹配string中的模式(如果你之前没有在C ++或Java中遇到过,我会感到惊讶)。 你可以设置一个引用,但为了方便,我已经使用了后期绑定选项。

为了尝试和解释,代码循环遍历A列中的每个单元格,并对其执行RegExtesting。 如果模式匹配,则用匹配replace单元格的值 – 如果模式匹配,则清除单元格的内容。

最后,我们使用Excel的SpecialCells方法来识别列A中的空白单元格,同时删除它们所属的行。

如果它更容易,Java中的循环可能看起来像这样我想象:

 for(var i = 0; i <= 1000; i++){ if(RE.Test(Excel.Workbooks.ActiveWorkbook.Cells(i, 1).Value2)){ // Blah blah.... } } 

(我不写Java的情况下,你没有注意到…)

以下是用VBA编写的。 对于VBS,你只需要改变Range引用,并把它放在一个循环中:

 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用于提取报价之间的文本。

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

(假设你的意思是VBA …)

添加对Microsoft VBScript Regular Expressions 5.5库的引用,您可以使用正则expression式来提取资产ID。 这假定您在A列中每行有一个资产ID,并且它将把提取的ID放入B列。

 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