嗨,我是vba的新手,第一天使用它,我试图获取以下代码来读取列表并删除所有的字母和空格,所以我只是留在右边的列中的数字。这段代码是我在网上找到的,我正在尝试为自己的目的进行编辑,任何帮助都会被大大提高。 我仍在疯狂地搜索,看看我能找到什么。 我在线上开始出现'For each cell'
Sub Remove_Alphabets_SpecialChar_RetainDecimalNumber_Test()
Dim RegX As Object
Dim Rng As Range
Set RegX = CreateObject("vbscript.regexp")
With RegX
.Global = True
.Pattern = "[^-0-9-.]"
End With
Range(Range("d4").End(xlDown)).Select
For Each cell In Range(Selected)
Rng.Offset(, 1) = RegX.Replace(Rng, "")
Next cell
End Sub
答案 0 :(得分:1)
除非您声明并指定一个名为 Selected 的变量(可以输入 Range ),否则不会出现 Selected 这样的内容。但是,有一种称为 Selection 的东西,它引用当前选定的单元格。
Range(Range("d4"), Range("d4").End(xlDown)).Select
For Each cell In Range(Selection)
Rng.Offset(, 1) = RegX.Replace(Rng, "")
Next cell
我还将您从D列中的最后一个单元格中选择的范围扩展到包括D4中的所有单元格到D列中的最后一个单元格。
顺便说一句,最好进入VBE的工具►选项►编辑器并检查需要变量声明。可能需要一些时间来习惯,但从长远来看,您的代码将会受益。<强>附录:强>
如果我至少没有尝试让你在代码编写中使用.Select
和Selection
,那将是我的疏忽。依赖于当前选择的内容容易出错和冲突。这是您编写的直接单元格引用的例程。
Sub Remove_Alphabets_SpecialChar_RetainDecimalNumber_Test()
Dim r As Long, RegX As Object
Set RegX = CreateObject("vbscript.regexp")
With RegX
.Global = True
.Pattern = "[^-0-9-.]"
End With
For r = 4 To Range("d4").End(xlDown).Row
Cells(r, "D") = RegX.Replace(Cells(r, "D").Value, "")
Next r
Set RegX = Nothing
End Sub