如何使用VBA创建条件边框?

时间:2014-05-12 21:59:50

标签: excel vba

基本上,我想制作一个代码,根据内容选择Excel的单元格。 我发现很难用文字解释,所以我上传了这张图片。

enter image description here

我想用红色边框选择包含复选标记的所有行。但是如果带有复选标记的一行后跟带有复选标记的另一行,则只需进行大量选择。 (就像我在图片中手动完成的那样)

任何解决方案?

提前致谢

3 个答案:

答案 0 :(得分:2)

我知道我在评论中没有这么说,但是现在我已经考虑了一些,这完全可以通过条件格式来实现。

您的想法是事先设置所有边框,然后使用条件格式删除您不想要的边框。

首先,在没有复选标记的情况下,为每行设置边框。

enter image description here

当“通过”列为“否”时,您想要删除左右边框。使用公式规则设置条件格式以实现此目的。确保锁定列D,因为公式正在应用于多个列,并且您始终希望查看D列。

enter image description here

如果当前行在传递列中显示“是”,而下面的行也为“是”,则您要删除底部边框。您可以使用其他条件格式来执行此操作。

enter image description here

您需要使用其他条件公式来涵盖更多案例,但这是一般性的想法。

enter image description here

答案 1 :(得分:0)

我的方法是这样:首先写一个sub,在任何范围的外面放置一个红色边框。看起来应该是这样的:

Sub ApplyBorder(inputRg as Range)
    Call inputRg.BorderAround(Weight:=xlMedium, Color:=vbRed)
End Sub

现在我们可以遍历我们的范围。如果我们找到支票,请将其包含在要给定边框的范围内。如果我们找到一个x,那么在我们所拥有的范围内应用红色边框,并将其重置为空。

Sub FormatTable()

    Dim AllTable As Range, oneRedRg As Range, oneRow As Range
    Dim iRow As Integer

    Set AllTable = GetTable

    For iRow = 1 To AllTable.Rows.Count
        Set oneRow = AllTable.Rows(iRow)
        If oneRow.Cells(1, 3) = True Then
            If oneRedRg Is Nothing Then     'if our current redRg is unset,
                Set oneRedRg = oneRow       'then this is the first one, so set it
            Else
                Set oneRedRg = Range(oneRedRg, oneRow)  'if it is already set, then expand oneRedRg to include this one
            End If
        Else
            if Not oneRedRg Is Nothing Then Call ApplyBorder(oneRedRg)  'if we find a range that need not be red, then
            Set oneRedRg = Nothing      'apply the border to our redRg and reset it to nothing
        End If
    Next iRow
    If Not oneRedRg Is Nothing Then Call ApplyBorder(oneRedRg)  'this last line captures a group of reds
                                                                'that are at the end of the table.
End Sub

我排除了" GetTable"功能。在我的回答中,GetTable返回整个表以进行迭代,没有标题。另请注意,我将支票和x更改为值" True"或"错误"在电子表格中轻松。

快乐的编码!

答案 2 :(得分:0)

具有这四个规则的CF可以起作用,其中不可见的是刻度的代码点(可能是' 252'):

SO23619627 example

并根据需要调整范围以适应。