Создание границы вокруг ячеек с одинаковым значением - PullRequest
0 голосов
/ 04 июня 2010

У меня есть таблица, подобная приведенной ниже. Как я могу заставить 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 ]

2 голосов
/ 05 июня 2010

Вам необходимо использовать относительные ссылки.

  1. Выберите диапазон столбцов, для которого вы хотите выполнить условное форматирование.
  2. Введите следующие три формулы в их собственных условиях:
    • = И ($ С2 = $ С3, С3 $ = $ С4)
      • Это для средних предметов. (Границы с обеих сторон)
    • = И ($ С2 <> $ С3, С3 $ = $ С4)
      • Это первый в группе. (Граница слева, сверху, справа)
    • = И ($ С2 = $ С3, С3 $ <> $ С4)
      • Это последний в группе. (Граница слева, снизу, справа)
  3. Отформатируйте их как хотите.

Замените все «$ C» на «$ {Ваш столбец}». Обратите внимание, что при этом не будет никаких границ вокруг отдельных элементов, поскольку в выборке не может быть больше трех условий условного форматирования.

1 голос
/ 05 июня 2010

Я не вижу простого не-макро решения именно того, что вам нужно, но решение от PowerUser кажется нормальным.

Вот решение на основе макросов, которое поместит границу вокруг строк, имеющих одинаковую цифру в последнем столбце. Я предполагаю, что ваши данные в столбцах A: D.

Чтобы использовать этот макрос, просто щелкните любую ячейку в вашем списке, а затем запустите макрос.

Как краткое руководство:

  • AddBorders - это основной макрос, который просто перебирает все ячейки в последнем столбце и работает, когда подходит граница
  • AddBorder - это короткая процедура, которая добавляет границу.
  • В качестве бонуса AddBorder выбирает случайный цвет из 56-цветовой палитры Excel, чтобы каждая из ваших границ была разных цветов, чтобы облегчить просмотр

    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
    
0 голосов
/ 05 июня 2010

Вы просто пытаетесь сделать его более читабельным для человеческого глаза? Если это так, я рекомендую чередовать фоновые цвета. Например, каждый раз, когда число в этом 4-м столбце изменяется, цвет фона меняется с белого на синий и наоборот. Я делаю это все время:

  1. Создайте дополнительный столбец E. Поскольку ваш ссылочный столбец - D, введите:
    = MOD (ЕСЛИ (D5 <> D4, E4 + 1, Е4), 2)
    (т. е. если столбец D этой строки отличается от D в последней строке, измените значение с 0 на 1 или с 1 на 0)

  2. Скрыть столбец, чтобы конечный пользователь его не видел.

  3. Составьте 2 условные формулы. Первый изменит цвет строки на белый, если ваше скрытое значение равно 0. Второй изменит его на синий, если ваше скрытое значение равно 1.

Нет макросов. Нет VBA кодирования. Всего 1 скрытый столбец и несколько условных формул. И цвета все равно должны чередоваться должным образом, даже если ваш столбец D пропускает числа:)

(я использую это ежедневно на XL 2003. Я надеюсь, что это работает в 2007)

0 голосов
/ 05 июня 2010

Я вышел с этим решением, оно странно работает на моем 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
...