基本上,我想制作一个代码,根据内容选择Excel的单元格。 我发现很难用文字解释,所以我上传了这张图片。
我想用红色边框选择包含复选标记的所有行。但是如果带有复选标记的一行后跟带有复选标记的另一行,则只需进行大量选择。 (就像我在图片中手动完成的那样)
任何解决方案?
提前致谢
答案 0 :(得分:2)
我知道我在评论中没有这么说,但是现在我已经考虑了一些,这完全可以通过条件格式来实现。
您的想法是事先设置所有边框,然后使用条件格式删除您不想要的边框。
首先,在没有复选标记的情况下,为每行设置边框。
当“通过”列为“否”时,您想要删除左右边框。使用公式规则设置条件格式以实现此目的。确保锁定列D,因为公式正在应用于多个列,并且您始终希望查看D列。
如果当前行在传递列中显示“是”,而下面的行也为“是”,则您要删除底部边框。您可以使用其他条件格式来执行此操作。
您需要使用其他条件公式来涵盖更多案例,但这是一般性的想法。
答案 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)
并根据需要调整范围以适应。