对于VBA循环。宏Excel程序

时间:2014-04-28 03:23:55

标签: excel vba loops excel-vba if-statement

我的项目使用VBA时遇到问题。我有这个有几千行的专栏。

这些列的值类似于0.05, 1.3等。它也有复杂的值,大于<符号<0.05, <0.02,这是我真正的问题。我想使用If ElseLooping来解决此问题。但我不知道怎么做。我是VBA macro excel的初学者。

我希望从这些行中发生的是,如果宏检测到具有&lt;它将自动除以2,因此我不会有复杂的值来获取这些行的最大值和最小值。

编辑1:上传的图片

sample image

我希望你能明白这件事。对不起我的英语不好。谢谢你的帮助。

2 个答案:

答案 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

如果需要,您还可以完全符合WorkbookSheet的要求 希望这会有所帮助。

答案 1 :(得分:1)

以下是使用Autofilter的更快捷方式。使用Autofilter将确保您不必遍历每个单元格。

示例屏幕截图

enter image description here

<强>代码

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