Applying if statement to range of cells using VBA

牧云@^-^@ 提交于 2019-12-24 00:19:45

问题


I have a small range of cells, C6:C10. I'm trying to apply an if statement to this range of cells using VBA code. Currently, my code takes the output of the if statement for the first cell (C6), and replicates that value for cells C7:C10. The if statement is correct, I'm just not sure how to apply it to a range of cells in a column.

Sub Cleanup()
Dim Segment As String
Dim i As Integer
Segment = ActiveCell(6, 3).Value
For i = 6 To 10
    If Right(Left(Segment, 6), 1) = "/" Then
        ActiveCell(i, 3).Value = Left(Segment, 5)
    Else
        ActiveCell(i, 3).Value = Left(Segment, 6)
    End If
Next i
End Sub

回答1:


It should be fine if you use Cells instead of ActiveCell, except that you'll have to change your loop to go from 7 to 10 or else it will over-write the original cell as well as C7:C10.

Sub Cleanup()
Dim Segment As String
Dim i As Integer
Segment = Cells(6, 3).Value
For i = 7 To 10
    If Right(Left(Segment, 6), 1) = "/" Then
        Cells(i, 3).Value = Left(Segment, 5)
    Else
        Cells(i, 3).Value = Left(Segment, 6)
    End If
Next i
End Sub



回答2:


Sub Cleanup()
    Dim Segment As String
    Dim i As Integer
    Segment = Cells(i, 3).Value
    For i = 7 To 10
        If Right(Left(Segment, 6), 1) = "/" Then
            cells(i, 3).Value = Left(Segment, 5)
        Else
            Cells(i, 3).Value = Left(Segment, 6)
        End If
    Next i
End Sub



回答3:


here three (out of many other) possible codes, in simplicity order (the last being more simple than the first):

Option Explicit

Sub Cleanup()
    Dim Segment As String
    Dim i As Integer

    For i = 6 To 10
        Segment = Cells(i, 3).Value '<== Cells(i, 3) is the current cell as per the current row (i)
        If Mid(Segment, 6, 1) = "/" Then
            Cells(i, 3).Value = Left(Segment, 5)
        Else
            Cells(i, 3).Value = Left(Segment, 6)
        End If
    Next i
End Sub


Sub Cleanup2()
    Dim i As Integer

    For i = 6 To 10
        With Cells(i, 3) 'avoid repetitions (and a variable, too) by using 'With' keyword and implying 'Cells(i, 3)' preceeds every dot (".") till next 'End With" statement
            If Right(Left(.Value, 6), 1) = "/" Then
                .Value = Left(.Value, 5)
            Else
                .Value = Left(.Value, 6)
            End If
        End With
    Next i
End Sub


Sub Cleanup3()
    Dim i As Integer

    For i = 6 To 10
        With Cells(i, 3)
            .Value = Left(.Value, IIf(Mid(.Value, 6, 1) = "/", 5, 6)) ' use Iif function to avoid multiple lines. Also use 'Mid' function in lieu of 'Right(Left(..))'
        End With
    Next i
End Sub


来源:https://stackoverflow.com/questions/37142200/applying-if-statement-to-range-of-cells-using-vba

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!