【问题标题】:How can i select blank and cell while doing loop in excel vba?在excel vba中循环时如何选择空白和单元格?
【发布时间】:2019-02-14 12:47:02
【问题描述】:

我想在 F 列中粘贴“Thomos”六次,其中 F 列中的单元格值为空白,而 J 列中的单元格值为非空白。

之后我想在 F 列中粘贴“jerry”六次,其中 K 列中的单元格值为非空白,F 列中的单元格值为空白。

当我运行代码时,jerry 会粘贴到 F 列中存在 Thomos 的单元格中。

Sub populate()

Dim iVal As Integer
Dim Val As Integer
For Each Cel In Range("J2:J100")
    For Each blk In Range("F2:F100")
        If Cel.value <> "" And blk.value = "" Then
            Cel.Offset(0, -4).value = "Thomos"
        Else
        End If
        iVal = Application.WorksheetFunction.CountIf(Range("F2:F100"), "Thomos")
        If iVal = 6 Then
            Exit For
        End If
    Next
Next

For Each Rng In Range("K2:K100")
    For Each blk2 In Range("F2:F100")
        If Rng.value <> "" And blk2.value = "" Then
            Rng.Offset(0, -5).value = "jerry"
        Else
        End If
        Val = Application.WorksheetFunction.CountIf(Range("F2:F100"), "jerry")
        If Val = 6 Then
            Exit For
        End If
    Next
Next
End Sub

【问题讨论】:

  • "Thomos" 在同一单元格中的 f 列 6 次?在同一列的相邻行中?

标签: excel vba


【解决方案1】:

每次遍历JK 中的一个单元格时,您都会遍历F 中的所有单元格。因此,如果(例如)Cel 对于单元格 K4 不是 "" 并且 blk2 对于单元格 """",则您已经满足了您的条件并且 K4.Offset(0,-5) 将被分配一个值 @987654331 @ 是否 it 为空白。您只需要一个:

iVal = 0
For Each Cel In Range("F2:F100")
    If Cel.value = "" And Cell.Offset(0,4).value <> "" Then
        Cel.value = "Thomos"
        iVal = iVal + 1
    End If
    If iVal = 6 Then
        Exit For
    End If
Next

ival = 0
For Each Cel In Range("F2:F100")
    If Cel.value = "" And Cell.Offset(0,5).value <> "" Then
        Cel.value = "Jerry"
        iVal = iVal + 1
    End If
    If iVal = 6 Then
        Exit For
    End If
Next

另一种选择:

iVal1 = 0
iVal2 = 0
For Each Cel In Range("F2:F100")
    If Cel.value = "" And Cell.Offset(0,4).value <> "" and iVal1 <6 Then
        Cel.value = "Thomos"
        iVal1 = iVal1 + 1
    End If
    If Cel.value = "" And Cell.Offset(0,5).value <> "" and iVal2 <6 Then
        Cel.value = "Jerry"
        iVal2 = iVal2 + 1
    End If
    If iVal1 = 6 and iVal2 = 6 Then
        Exit For
    End If
Next

【讨论】:

    【解决方案2】:

    非常感谢您的帮助。以下是我在您的帮助下编写的代码。

    Sub populate()
    
    Dim iVal As Integer
    Dim iVal2 As Integer
    iVal = Application.WorksheetFunction.CountIf(Range("F2:F100"), Range("x2"))
    iVal2 = Application.WorksheetFunction.CountIf(Range("F2:F100"), Range("x3"))
    ival3 = Application.WorksheetFunction.CountIf(Range("F2:F100"), Range("x4"))
    iVal1 = 0
    iVal2 = 0
    ival3 = 0
    For Each Cel In Range("F2:F100")
        If Cel.value = "" And Cel.Offset(0, 4).value <> "" And iVal < Range("y2") Then
            Cel.value = Range("x2")
            iVal = iVal + 1
        End If
        If Cel.value = "" And Cel.Offset(0, 5).value <> "" And iVal2 < Range("y3") Then
            Cel.value = Range("x3")
            iVal2 = iVal2 + 1
        End If
            If Cel.value = "" And Cel.Offset(0, 6).value <> "" And ival3 < Range("y4") Then
            Cel.value = Range("x4")
            ival3 = ival3 + 1
        End If
        If iVal1 = Range("y2") And iVal2 = Range("y3") And ival3 = Range("y4") Then
            Exit For
        End If
    Next
    End Sub

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多