我的项目使用VBA时遇到问题。我有这个有几千行的专栏。
这些列的值类似于0.05, 1.3
等。它也有复杂的值,大于<
符号<0.05, <0.02
,这是我真正的问题。我想使用If Else
或Looping
来解决此问题。但我不知道怎么做。我是VBA macro excel的初学者。
我希望从这些行中发生的是,如果宏检测到具有&lt;它将自动除以2,因此我不会有复杂的值来获取这些行的最大值和最小值。
编辑1:上传的图片
我希望你能明白这件事。对不起我的英语不好。谢谢你的帮助。
答案 0 :(得分:1)
然后试试这个:
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
的要求
希望这会有所帮助。
答案 1 :(得分: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