将单个单元格范围更改为列范围

时间:2017-04-14 02:12:05

标签: excel vba excel-vba

以下代码有效,但现在我需要它才能用于列范围而不是单个单元格范围。     我需要替换:

CJ3单细胞至CJ柱(从第3行开始);

CK3单细胞至CK柱(从第3行开始);

CM3单细胞到CM列(从第3行开始);

CN3单细胞到CN柱(从第3行开始);

CO3单细胞到CO柱(从第3行开始)。

请有人帮忙吗?

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("CJ3").Value = "FOLLOW UP" And Range("CM3").Value = "" And Range("CN3").Value = "" Then
        Range("CO3").Value = "FOLLOW UP"
    ElseIf Range("CJ3").Value = "FOLLOW UP" And Range("CM3").Value > 0 And Range("CN3").Value = "" Then
        Range("CO3").Value = "AWAITING APPROVAL"
    ElseIf Range("CJ3").Value = "FOLLOW UP" And Range("CM3").Value > 0 And Range("CN3").Value > 0 Then
        Range("CO3").Value = "CLOSED"
    ElseIf Range("CJ3").Value = "NO FOLLOW UP" And Range("CN3").Value = "" Then
        Range("CO3").Value = "AWAITING APPROVAL"
        Range("CK3:CM3").Value = "N/A"
    ElseIf Range("CJ3").Value = "NO FOLLOW UP" And Range("CN3").Value > 0 Then
        Range("CO3").Value = "CLOSED"
        Range("CK3:CM3").Value = "N/A"
    End If
End Sub

1 个答案:

答案 0 :(得分:0)

我建议您指定代码应该使用的工作表。默认情况下是ActiveSheet。因此,我的代码与您的代码几乎没有什么不同。不同之处在于它是专门写下来的,这将有助于您了解自己的代码,从而加快故障排除(无论如何,这总是比编写代码需要更多的时间)。您还可以指定另一个工作表。例如,Set Ws = Worksheets("Sheet1")。这样会好得多,因为代码无法在另一张纸上做错误。

所以,这就是你的代码现在的样子。

Private Sub TryLoop()

    Dim Ws As Worksheet
    Dim Rl As Long                              ' last row
    Dim R As Long                               ' row

    Set Ws = ActiveSheet
    With Ws
        Rl = .Cells(.Rows.Count, 1).End(xlUp).Row
        For R = 1 To Rl
            If .Cells(R, 88).Value = "FOLLOW UP" And .Cells(R, 91).Value = "" And .Cells(R, 92).Value = "" Then
                .Cells(R, 93).Value = "FOLLOW UP"
            End If
        Next R
    End With
End Sub

Rows.Count返回活动工作表中的行数(如果已指定,则返回Ws)。根据您使用的Excel版本,至少为65,000行。是的,这需要一些时间才能完成。因此,上述封面将循环限制为实际在第1列中具有值的那些行(即列#34; A")。您也可以像这样编写此行Rl = .Cells(.Rows.Count, "A").End(xlUp).Row

现在我觉得你的代码很完美。什么是不做的?