Excel, 如何将 IF 添加到循环中

Excel, how to add IF into a loop

我有一个 IF 语句,我需要通过 F 列循环它。

此循环检查 F 列中的单词“empty”,如果找到,它也会被输入到 G 列中。在 H 列中,如果当前日期不在其中,则会添加当前日期。如果 F 和 G 中有“空”,H 有日期,则 If 语句结束。

If Range("F2").Value = "empty" And Range("G2").Value = "" Then
Range("G2").Value = "empty"
ElseIf (Range("F2").Value = "empty" And Range("G2").Value = "empty") And Range("H2").Value = "" Then
Range("H2") = Date
ElseIf (Range("F2").Value = "empty" And Range("G2").Value = "empty") And Range("H2").Value <> "" Then
End If

谁能帮我把这个添加到一个循环中,通过线路?

男子气概需要通过 2 号线到达 1500。

如有任何帮助,我们将不胜感激。

亲切的问候。

尝试这样的事情

    Dim i as long
    For i = 2 to 1500 
        If Range("F" & i).Value = "empty" And Range("G" & i).Value = "" Then
           Range("G" & i).Value = "empty"
        ElseIf (Range("F" & i).Value = "empty" And Range("G" & i).Value = "empty") And Range("H" & i).Value = "" Then
           Range("H" & i) = Date
        ElseIf (Range("F" & i).Value = "empty" And Range("G" & i).Value = "empty") And Range("H" & i).Value <> "" Then
           'do something 
        End If
    Next i 

循环中的嵌套语句

Sub NestedStatements()
    
    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    
    Dim rg As Range: Set rg = ws.Range("F2:H1500")
    
    Dim rrg As Range
    
    For Each rrg In rg.Rows
        If CStr(rrg.Cells(1).Value) = "empty" Then
            Select Case CStr(rrg.Cells(2).Value)
            Case ""
                rrg.Cells(2).Value = "empty"
            Case "empty"
                If CStr(rrg.Cells(3).Value) = "" Then
                    rrg.Cells(3).Value = Date
                End If
            End Select
        End If
    Next rrg
    
End Sub

我会创建一个单独的 sub 来完成这项工作 - 你将要检查的范围传递给它:

Option Explicit

Private Const colF As Long = 6
Private Const colG As Long = 7
Private Const colH As Long = 8

'-->> this is an example of how to call the sub
Sub test_checkColumnsFtoH()
checkColumnsFtoH ThisWorkbook.Worksheets("Table1").Range("A1:I500")
End Sub

'-->> this is your new sub
Sub checkColumnsFtoH(rgToBeChecked As Range)
Dim i As Long
With rgToBeChecked
    For i = 2 To .Rows.Count
        If .Cells(i, colF).Value = "empty" And .Cells(i, colG).Value = "" Then
            .Cells(i, colG).Value = "empty"
        ElseIf (.Cells(i, colF).Value = "empty" And .Cells(i, colG).Value = "empty") _
                And .Cells(i, colH).Value = "" Then
            .Cells(i, colH) = Date
        End If
    Next
End With

End Sub
  • 我正在使用单元格 属性 来避免字符串连接(“H”和 i)
  • 您不需要最后一个 elseif - 因为那里什么也没有发生。