Як виділити кілька рядків на основі номерів комірок стовпця?


0

Я хотів би автоматично виділити кілька рядків на основі групи чисел в одному стовпчику. Тому я мав би різний колір рядка для кожного унікального ідентифікатора сім'ї. Чи є спосіб зробити це без ручного вибору кольору в умовному форматуванні? У мене 400 сімей і 1000+ рядів. Дякую за допомогу, хлопці.

Приклад даних:

FamilyID  Stock Number     Class
1922      1361427          Box
1922      5859184          Box
1922      1422784          Box
1922      1422694          Box
2196      1336358          Circle
2196      1336244          Circle
2196      675239           Circle
2205      57813            Square
2205      863453           Square
2220      30664            Square
2220      1336732          Square
2220      22874            Square

Відповіді:


2

Якщо припустити, що FamilyID є ColumnA, використовуйте ряд правил умовного форматування в розділі Використовуйте формулу, щоб визначити, які клітинки форматувати (типу = $ a2 = 1922 (жовтий), = $ a2 = 2196 (зелений) тощо) A2і мати кожну застосувати до цілого ряду.

Приклад SU528202


Ви правильні, стовпецьA містить ідентифікатор сім'ї. Це рішення - те, чого я намагався уникати. У мене 400 сімей і 1000 рядів.
користувач184581

3
@ user184581 Це відповідає на ваше запитання, коли ви його формулювали. Ви можете відредагувати питання, щоб включити деталі про кількість сімей та рядки.
CharlieRB

0

Наступна рутинна програма Excel VBA та допоміжні функції надають функціональність для виділення декількох рядків на основі груп чисел у першому стовпчику діапазону даних, що є інакше досяжним лише при умовному форматуванні. Будь-яка кількість стовпців і рядків може бути обрана, хоча я не перевіряв продуктивність на великих таблицях.

Код є простим, пробираючи клітинки у вибраному діапазоні та застосовуючи новий колір, коли значення в першому стовпці змінюється, коли програма рухається вниз по діапазону.

Схема вибору кольору є дуже базовою. Кольори, рівновіддалені в спектрі, підтримуваному Excel (2007+), вибираються виходячи з кількості різних кольорів, встановлених у програмі (наразі 16), а потім присвоюються випадковим чином групуванням рядків у таблиці даних.

Для темних кольорів цифри або текст у клітинках встановлюються білим кольором для контрасту.

Дві допоміжні функції надають коду кольору заповнення та кольорів шрифту до основного розпорядку.

Sub ColorSortedRange()

   ' Set the fill color of rows in a selected range based on the values
   ' in the first column of the range.

   Dim Rng As Range, Rng2 As Range
   Dim Cell_ As Range
   Dim PriorCellValue As Variant
   Dim CellColor As Long, FontColorIdx As Long
   Dim NumberOfColors As Long

   With Application
      .EnableEvents = False
      .DisplayAlerts = False
      .ScreenUpdating = False
   End With

   Set Rng = Selection
   NumberOfColors = 16                 '####### SET NUMBER OF COLORS HERE #######

   For Each Cell_ In Rng.columns(1).Cells
       If Cell_.Value <> PriorCellValue Then
           CellColor = GetColorNumber(NumberOfColors)
           FontColorIdx = GetFontColorIndex(CellColor)                      '
       End If
       Set Rng2 = Range(Cell_, Cell_.Offset(0, Rng.columns.Count - 1))
       With Rng2
           With .Interior
               .Color = CellColor
               .TintAndShade = 0.5    '####### SET TINTING AND SHADING HERE #######
           End With
           .Font.ColorIndex = FontColorIdx
       End With
       PriorCellValue = Cell_.Value
   Next

   With Application
      .EnableEvents = True
      .DisplayAlerts = True
      .ScreenUpdating = True
   End With

End Sub


Function GetColorNumber(NumberOfColors As Long) As Long

   ' Returns a color number randomly chosen from the number of
   ' colors specified. This function will not work in Excel versions
   ' prior to 2007, because of limits on the number of available
   ' colors.

   Dim Step As Long
   Dim NumberOfExcelColors As Long

   NumberOfExcelColors = 16276000 'approximately
   Step = Fix(NumberOfExcelColors / NumberOfColors)
   GetColorNumber = WorksheetFunction.RandBetween(1, NumberOfColors) * Step

   ' The Randbetween function is from the Excel Analysis ToolPak. If it is
   ' unavailable the following formula can be substituted:
   '    =INT((upperbound - lowerbound + 1) * RAND() + lowerbound)

End Function


Function GetFontColorIndex(BackgroundColor As Long) As Integer

   ' Returns color index for dark grey or white, which the function selects
   ' to contrast with the cell fill color.

   Dim R As Long, G As Long, B As Long
   Dim FontThreshold As Double
   Dim Brightness As Double


   R = BackgroundColor Mod 256
   G = (BackgroundColor \ 256) Mod 256
   B = (BackgroundColor \ 256 \ 256) Mod 256
   FontThreshold = 130

   Brightness = Sqr(R * R * 0.241 + G * G * 0.691 + B * B * 0.068)

   If Brightness < FontThreshold Then
       GetFontColorIndex = 2  'white
   Else
       GetFontColorIndex = 49 'dark (1 is black)
   End If

   ' Long decimal to RGB color conversion algorithm published by Siddharth Rout
   ' at http://social.msdn.microsoft.com/Forums/en/exceldev/thread/df8a1e1e-e974
   ' -4a9c-938a-da18ae9f5252. The formula for perceived brightness of RGB colors
   ' is available in various forms on the Internet, perhaps earliest at
   ' http://alienryderflex.com/hsp.html.

End Function

СКЛАДАННЯ КОЛЬОРУ в двох словах Якщо стовпець, який потрібно перевірити, є B Створіть стовпець-помічник, скажіть у стовпці A A1: 0 A2: = MOD (OFFSET ($ A2, -1,0) + (OFFSET ($ B2, -1, 0) <> $ B2), 2) Потім встановіть умовне форматування Виберіть будь-яку комірку на рядку 1, потім виберіть весь формат робочого аркуша, умова умовного форматування 1, формули: = $ A1 = 1
користувач184581

0

Я взяв код вище і вдосконалив його, тому немає шансів, що у вас може бути наступна клітина такого ж кольору ... насолоджуйтесь :)

Dim LastColor As Long

Sub ColorSortedRange()

    LastColor = GetColorNumber(5)

   ' Set the fill color of rows in a selected range based on the values
   ' in the first column of the range.

   Dim Rng As Range, Rng2 As Range
   Dim Cell_ As Range
   Dim PriorCellValue As Variant
   Dim CellColor As Long, FontColorIdx As Long
   Dim NumberOfColors As Long

   With Application
      .EnableEvents = False
      .DisplayAlerts = False
      .ScreenUpdating = False
   End With

   Set Rng = Selection
   NumberOfColors = 50                 '####### SET NUMBER OF COLORS HERE #######

   For Each Cell_ In Rng.Columns(1).Cells
       If Cell_.Value <> PriorCellValue Then
           CellColor = GetColorNumber(NumberOfColors, LastColor)
           LastColor = CellColor
           FontColorIdx = GetFontColorIndex(CellColor)                      '
       End If
       Set Rng2 = Range(Cell_, Cell_.Offset(0, Rng.Columns.Count - 1))
       With Rng2
           With .Interior
               .Color = CellColor
               .TintAndShade = 0.5    '####### SET TINTING AND SHADING HERE #######
           End With
           .Font.ColorIndex = FontColorIdx
       End With
       PriorCellValue = Cell_.Value
   Next

   With Application
      .EnableEvents = True
      .DisplayAlerts = True
      .ScreenUpdating = True
   End With

End Sub


Function GetColorNumber(NumberOfColors As Long, Optional OldColor As Long = 0) As Long

   ' Returns a color number randomly chosen from the number of
   ' colors specified. This function will not work in Excel versions
   ' prior to 2007, because of limits on the number of available
   ' colors.

   Dim Step As Long
   Dim NumberOfExcelColors As Long

   NumberOfExcelColors = 16276000 'approximately
   Step = Fix(NumberOfExcelColors / NumberOfColors)
   GetColorNumber = WorksheetFunction.RandBetween(1, NumberOfColors) * Step

   If GetColorNumber = OldColor Then
    GetColorNumber = GetColorNumber(NumberOfColors, OldColor)
   End If


   ' The Randbetween function is from the Excel Analysis ToolPak. If it is
   ' unavailable the following formula can be substituted:
   '    =INT((upperbound - lowerbound + 1) * RAND() + lowerbound)

End Function


Function GetFontColorIndex(BackgroundColor As Long) As Integer

   ' Returns color index for dark grey or white, which the function selects
   ' to contrast with the cell fill color.

   Dim R As Long, G As Long, B As Long
   Dim FontThreshold As Double
   Dim Brightness As Double


   R = BackgroundColor Mod 256
   G = (BackgroundColor \ 256) Mod 256
   B = (BackgroundColor \ 256 \ 256) Mod 256
   FontThreshold = 130

   Brightness = Sqr(R * R * 0.241 + G * G * 0.691 + B * B * 0.068)

   If Brightness < FontThreshold Then
       GetFontColorIndex = 2  'white
   Else
       GetFontColorIndex = 49 'dark (1 is black)
   End If

   ' Long decimal to RGB color conversion algorithm published by Siddharth Rout
   ' at http://social.msdn.microsoft.com/Forums/en/exceldev/thread/df8a1e1e-e974
   ' -4a9c-938a-da18ae9f5252. The formula for perceived brightness of RGB colors
   ' is available in various forms on the Internet, perhaps earliest at
   ' http://alienryderflex.com/hsp.html.

End Function
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.