对于 VBA 循环。宏 Excel 程序
Posted
技术标签:
【中文标题】对于 VBA 循环。宏 Excel 程序【英文标题】:For VBA loops. Macro Excel Program 【发布时间】:2014-06-13 11:07:24 【问题描述】:我的项目使用 VBA 时遇到问题。我有这个有数千行的列。
这些列的值如0.05, 1.3
等。它还有大于符号<
的复杂值,如<0.05, <0.02
,这是我真正的问题。我想为此解决方案使用If Else
或Looping
。但我不知道怎么做。我是 VBA 宏 excel 的初学者。
我希望从这些行中发生的事情是,如果宏检测到一个具有
Edit1:上传的图片
我希望你明白我对这件事的看法。对不起我的英语不好。感谢您的帮助。
【问题讨论】:
首先在 VBA 中使用If IsNumeric(Range) Then
捕获单元格值中带有“Range.Value = CDbl(Replace(Range.Value,"<",""))/2,假设覆盖了值。
【参考方案1】:
这是使用Autofilter
的更快方法。使用Autofilter
将确保您不必遍历每个单元格。
示例截图:
代码:
Sub Sample()
Dim ws As Worksheet
Dim rng As Range, aCell As Range, fltrdRng As Range
Dim LRow As Long
'~~> Change this to the relevant sheet
Set ws = ThisWorkbook.Sheets("Sheet1")
With ws
'~~> Remove any filters
.AutoFilterMode = False
'~~> Get the last row of Col H where your data is
LRow = .Range("H" & .Rows.Count).End(xlUp).Row
'~~> Set your range
Set rng = .Range("H1:H" & LRow)
With rng
.AutoFilter Field:=1, Criteria1:="=<*"
Set fltrdRng = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
End With
If Not fltrdRng Is Nothing Then
For Each aCell In fltrdRng.Cells
If aCell.Row > LRow Then Exit For
'~~> 8 is for Col H
If aCell.Column = 8 Then
aCell.Value = Replace(aCell.Value, "<", "")
aCell.Value = Val(Trim(aCell.Value)) / 2
End If
Next aCell
End If
'~~> Remove any filters
.AutoFilterMode = False
End With
End Sub
【讨论】:
哇,答案很快,真的很管用。非常感谢@Siddhart Rout。它有很大帮助。也感谢那些回答我问题的人。我很喜欢这个网站和周围的人,这样的天才人物。上帝保佑。【参考方案2】:然后试试这个:
Sub RemoveComplicatedValues()
Dim rng As Range, cel As Range
Dim x
Set rng = Range("H2", Range("H" & Rows.Count).End(xlUp).Address)
For Each cel In rng
If InStr(1, cel, "<") <> 0 Then
x = CSng(Split(cel, "<")(UBound(Split(cel, "<"))))
cel = x / 2
End If
Next
End Sub
如果需要,您还可以完全限定您的 Workbook
和 Sheet
。
希望这会有所帮助。
【讨论】:
以上是关于对于 VBA 循环。宏 Excel 程序的主要内容,如果未能解决你的问题,请参考以下文章
如何用VBA宏程序将excel中的内容批量复制到word文档中去
如何用VBA宏程序将excel中的内容批量复制到word文档中去
我在excel中使用VBA宏程序时,报错无法执行,为啥!前提,程序没有问题,因为单位机器运行良好
使用vba程序,实现excel数据库模板生成sql数据库结构