在具有相同值的单元格周围创建边框

时间:2010-06-04 18:53:55

标签: excel excel-vba ms-office excel-2003 conditional-formatting vba

我有一张如下表所示的表格。如何让Excel在第4列中放置具有相同编号的组的边框,以便在组周围有边框。我在想条件格式可以做到,但我想不出怎么做。所以我认为唯一的选择是宏。有人可以帮忙吗?

 1 64436 549419 1  
 2 64437 549420 1  
 3 64438 549421 1  
 4 64439 549422 1  
 5 64440 549423 1  
 6 64441 549424 1  
 7 64442 549425 1  
 8 64443 549426 1  
 9 64444 549427 1  
 10 64445 549428 1  
 11 64446 549429 1  
 12 64447 549430 1  
 13 64448 549431 2  
 14 64449 549432 2  
 15 64450 549433 2  
 16 64451 549434 2  
 17 64452 549435 2  
 18 64453 549436 2  
 19 64454 549437 2  
 20 64455 549438 2  
 21 64456 549439 2  
 22 64457 549440 4  
 23 64458 549441 4  
 24 64459 549442 5  
 25 64460 549443 5  
 26 64461 549444 5  
 27 64462 549445 5  
 28 64463 549446 5  
 29 64464 549447 5  
 30 64465 549448 6  
 31 64466 549449 6  
 32 64467 549450 6  
 33 64468 549451 6  
 34 64469 549452 6  
 35 64470 549453 6  
 36 64471 549454 6  
 37 64472 549455 9  
 38 64473 549456 9  
 39 64474 549457 9  

4 个答案:

答案 0 :(得分:2)

您需要使用相对引用。

  1. 选择要在其上执行条件格式设置的列范围。
  2. 在自己的条件下输入以下三个公式:
    • = AND($ C2 = $ C3,C3 $ = $ C4)
      • 这个是中间项目。 (双方都有边界)
    • = AND($ C2<> $ C3,C3 $ = $ C4)
      • 这个是小组中的第一个。 (左,右,右边框)
    • = AND($ C2 = $ C3,C3 $<> $ C4)
      • 这个是小组中的最后一个。 (左,下,右边框)
  3. 根据需要格式化它们。
  4. 将所有'$ C'替换为'$ {Your Column}'。请注意,这不会在单个项目周围放置任何边框,因为您在选择中不能再有三个条件格式条件。

答案 1 :(得分:1)

我无法看到一个简单的非宏解决方案,但确切地说您需要的是什么,但PowerUser的解决方案似乎没问题。

这是一个基于宏的解决方案,它将在最后一列中具有相同数字的行周围放置边框。我假设您的数据在A:D列中。

要使用此宏,只需单击列表中的任何单元格,然后触发宏。

作为快速指南:

  • AddBorders是主要的宏,它只是循环遍历最后一列中的所有单元格,并在边框合适时计算出来
  • AddBorder是一个添加边框的简短例程。
  • 作为奖励,AddBorder从Excel 56的调色板中选择一种随机颜色,以便每个边框都有不同的颜色,以便于查看

    Sub AddBorders()
        Dim startRow As Integer
        Dim iRow As Integer
        startRow = 1    
        For iRow = 2 To ActiveCell.CurrentRegion.Rows.Count    
            If WorksheetFunction.IsNumber(Cells(iRow + 1, 4)) Then
                If Cells(iRow, 4) <> Cells(iRow - 1, 4) Then
                   AddBorder startRow, iRow - 1
                   startRow = iRow
                End If
            Else
                   AddBorder startRow, iRow
            End If   
        Next iRow    
    End Sub
    
    Sub AddBorder(startRow As Integer, endRow As Integer)
        Dim borderRange As Range
        Dim randomColor As Integer
        randomColor = Int((56 * Rnd) + 1)
        Set borderRange = Range("A" & startRow & ":D" & endRow)
        borderRange.BorderAround ColorIndex:=randomColor, Weight:=xlThick    
    End Sub
    

答案 2 :(得分:0)

我推出了这个解决方案,它在我的Excel 2010上很奇怪:/ 我无法在2003年进行测试,所以如果没问题,请告诉我。

Sub PaintBorder()
Dim iRow As Integer
iRow = 1
Dim strTemp As String
strTemp = Range("D" & iRow).Value
Dim strPrev As String

Dim sectionStart As Integer
sectionStart = 1

Do
    strPrev = strTemp
    strTemp = Range("D" & iRow).Value

    If strPrev <> strTemp Then
        ActiveSheet.Range(Cells(sectionStart, 1), Cells(iRow - 1, 4)).BorderAround xlSolid, xlMedium, xlColorIndexAutomatic
        sectionStart = iRow
    End If
    iRow = iRow + 1
Loop Until strTemp = vbNullString
End Sub

答案 3 :(得分:0)

您是否只是想让人眼更具可读性?如果是这样,我建议交替使用背景颜色。例如,每次第4列中的数字发生变化时,背景颜色将从白色变为蓝色,反之亦然。我一直这样做:

  1. 制作一个附加栏目E.由于您的参考栏是D,请输入:
      的 = MOD(IF(D5&LT;&GT; D4,E4 + 1,E4),2)
    (即如果该行的列D与最后一行的D不同,则从0变为1或1变为0)

  2. 隐藏列,以便最终用户看不到它。

  3. 制作2个条件公式。如果隐藏值为0,则第一个将行颜色更改为白色。如果隐藏值为1,则第二个将其更改为蓝色。

  4. 没有宏。没有VBA编码。只有1个隐藏列和一些条件公式。即使您的列D正在跳过数字,颜色仍应正确交替:)

    (我每天在XL 2​​003上使用它。我希望它适用于2007年)