【问题标题】:Fill in cells based on the contents of a variable range of cells根据可变单元格范围的内容填充单元格
【发布时间】:2016-05-06 16:26:07
【问题描述】:

在我的电子表格中,我在包含项目编号的列中有一个数据列表。给定相邻单元格中的值(“'1 Quad”或任何值 A-D),在同一列中不应有重复项目编号的行或 8 行具有重复项目编号的行。如果项目编号的数量多于或少于所需数量(重复数字太多或遗漏的数字),那么我希望突出显示相同项目编号的整个可变范围(我只是使用 Fill 来完成)。

   For i = 3 To (mainRow - 1)
    k = i
    j = i
    If Range("G3") = "'1 Quad" Then
        If Range("E" & i).Value > (Range("E" & (i + 1)).Value - 1) Then
            Range("E" & i, "E" & (i + 1)).Interior.Color = RGB(255, 0, 0)
            i = i + 1
        End If
        If Range("E" & i).Value < (Range("E" & (i + 1)).Value - 1) Then
            Range("E" & i, "E" & (i + 1)).Interior.Color = RGB(0, 255, 0)
            i = i + 1
        End If
    ElseIf Range("G3").Value = "A" Or "B" Or "C" Or "D" Then
        Do
            If Range("E" & j).Value = Range("E" & (j + 1)).Value Then
                j = j + 1
            End If
            If Range("E" & j).Value <> Range("E" & (j + 1)).Value Then
                If j < 8 Then
                    For k = i To j
                        Range("E" & i).Interior.Color = RGB(255, 0, 0)
                    Next k
                End If

                If j > 8 Then
                    For k = i To j
                        Range("E" & i).Interior.Color = RGB(0, 255, 0)
                    Next k
                End If
                Exit Do
            End If
        While j < (mainRow - 1)
        i = k
    End If

Next i

使用此代码,我收到错误“End If without Block If”,这似乎根本不是这种情况。如果我删除最后一个“End IF”,我会收到“Next without For”错误。提前感谢您的帮助。

**我编辑了代码以包含结束 ifs,但仍然收到相同的错误。

【问题讨论】:

  • 你的两个If J &lt; 8If J &gt; 8 没有结束End If 我不认为。
  • 我把它们放在那里,但收到了同样的错误(刚刚再次验证)。无论如何,它们都会导致退出 do 循环。
  • 当 J=8 时会发生什么事情吗?也许不是,但你遇到的情况是它不是 8,所以我想我会问你的意思是 >= 或
  • 您最终需要将这些 endif 恢复原状。每个 IF 语句都需要结束 if。(可能是单行 if 除外)。如果您从 IF 语句直接向下看,则使用选项卡式格式,它应该在某些时候与 ENDIF 对齐。
  • 是的,当j=8时,应该退出do循环。我将两个“exit Do”从 if 语句中移出,并将其提高了一级。谢谢你的收获。

标签: vba excel


【解决方案1】:

您缺少 3 个 End If,并且您的 Do-While 语法已关闭。试试这个:

    Do While j < (mainRow - 1)
        If Range("E" & j).Value <> Range("E" & (j + 1)).Value Then
            If j < 8 Then
                For k = i To j
                    Range("E" & i).Interior.Color = RGB(255, 0, 0)
                Next k
                Exit Do
            End If
            If j > 8 Then
                For k = i To j
                    Range("E" & i).Interior.Color = RGB(0, 255, 0)
                Next k
                Exit Do
            End If
        End If
    Loop

【讨论】:

  • 我将“end ifs”放回原处,但仍然收到关于原始代码中最后一个“end if”的相同错误。谢谢。
  • 我意识到了。检查修复。不确定在循环之前是否需要 i=k
  • Do While/loop 解决了这个问题。谢谢!
猜你喜欢
  • 2014-09-13
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 2014-01-16
  • 2014-07-10
相关资源
最近更新 更多