2008-08-25 5 views
10

Tôi có một bảng tính Excel như thế nàyXen kẽ màu nhóm hàng trong Excel

 
id | data for id 
    | more data for id 
id | data for id 
id | data for id 
    | more data for id 
    | even more data for id 
id | data for id 
    | more data for id 
id | data for id 
id | data for id 
    | more data for id 

Bây giờ tôi muốn nhóm các dữ liệu của một id bằng xen kẽ màu nền của các hàng

 
var color = white 
for each row 
    if the first cell is not empty and color is white 
     set color to green 
    if the first cell is not empty and color is green 
     set color to white 
    set background of row to color 

Can bất kỳ ai giúp tôi với macro hoặc một số mã VBA

Cảm ơn

Trả lời

4

Tôi nghĩ rằng điều này làm những gì bạn đang tìm kiếm. Lật màu khi ô trong cột A thay đổi giá trị. Chạy cho đến khi không có giá trị trong cột B.

Public Sub HighLightRows() 
    Dim i As Integer 
    i = 1 
    Dim c As Integer 
    c = 3  'red 

    Do While (Cells(i, 2) <> "") 
     If (Cells(i, 1) <> "") Then 'check for new ID 
      If c = 3 Then 
       c = 4 'green 
      Else 
       c = 3 'red 
      End If 
     End If 

     Rows(Trim(Str(i)) + ":" + Trim(Str(i))).Interior.ColorIndex = c 
     i = i + 1 
    Loop 
End Sub 
+0

Tôi có thể đã hiểu sai, nhưng từ nơi tôi nhìn thấy nó và từ các thử nghiệm của tôi, thiết bị chuyển mạch này từ màu này sang hàng khác, miễn là cột A và B không trống ... không trả lời câu hỏi. Nhưng tôi có thể đã bỏ lỡ điều gì đó ... –

0

Nếu bạn chọn Điều kiện al Tùy chọn trình đơn định dạng trong mục trình đơn Định dạng, bạn sẽ nhận được một hộp thoại cho phép bạn xây dựng một số logic để áp dụng cho ô đó.

Logic của bạn có thể không giống như mã của bạn ở trên, nó có thể trông giống như:

Giá trị ô là | bằng | | và | Trắng .... Sau đó chọn màu.

Bạn có thể chọn nút thêm và tạo điều kiện lớn như bạn cần.

1

Bạn có phải sử dụng mã không? nếu bảng là tĩnh, thì tại sao không sử dụng khả năng định dạng tự động?

enter image description here

Nó cũng có thể giúp đỡ nếu bạn "hợp nhất tế bào" của cùng một dữ liệu. vì vậy có thể nếu bạn hợp nhất các ô của "dữ liệu, nhiều dữ liệu hơn, thậm chí nhiều dữ liệu hơn" vào một ô, bạn có thể dễ dàng đối phó với trường hợp "mỗi hàng là một hàng" cổ điển.

+0

Điều này tôi cần nhưng không biết cách thực hiện điều này :) dựa trên lời giải thích được cung cấp –

33

tôi sử dụng công thức này để có được đầu vào cho một định dạng có điều kiện:

=IF(B2=B1,E1,1-E1)) [content of cell E2] 

đâu cột B chứa chi tiết mà cần phải được nhóm lại và E là cột phụ. Mỗi lần ô trên (B1 trong trường hợp này) giống với ô hiện tại (B2), nội dung hàng trên của cột E được trả về. Nếu không, nó sẽ trả về 1 trừ đi nội dung đó (tức là, outupt sẽ là 0 hoặc 1, tùy thuộc vào giá trị của ô trên).

enter image description here

enter image description here

enter image description here

+6

Câu trả lời hay. Để thay thế cho chức năng MOD, bạn có thể sử dụng '1 - E1'. Vì vậy, công thức đầy đủ là '= IF (B2 = B1, E1,1-E1)' – Kasaku

+3

Trong trường hợp của tôi, tôi không thể sử dụng dấu chấm phẩy (;) trong công thức, chỉ dấu phẩy (,) được chấp nhận cho Excel. Tôi đang sử dụng MS Excel v 14.0.7106.5003 32-bit. – rockXrock

+1

Có thể tránh sử dụng cột bổ sung không? –

1

Dựa trên câu trả lời Jason Z, mà từ thử nghiệm của tôi có vẻ là sai (ít nhất là trên Excel 2010), đây là một chút mã điều đó xảy ra để làm việc cho tôi:

Public Sub HighLightRows() 
    Dim i As Integer 
    i = 2 'start at 2, cause there's nothing to compare the first row with 
    Dim c As Integer 
    c = 2  'Color 1. Check http://dmcritchie.mvps.org/excel/colors.htm for color indexes 

    Do While (Cells(i, 1) <> "") 
     If (Cells(i, 1) <> Cells(i - 1, 1)) Then 'check for different value in cell A (index=1) 
      If c = 2 Then 
       c = 34 'color 2 
      Else 
       c = 2 'color 1 
      End If 
     End If 

     Rows(Trim(Str(i)) + ":" + Trim(Str(i))).Interior.ColorIndex = c 
     i = i + 1 
    Loop 
End Sub 
+0

Tôi đã trả lời câu hỏi đầu tiên vào năm '08, vì vậy sẽ không làm tôi ngạc nhiên chút nào nếu Office 2010 phá vỡ nội dung nào đó Office 2007. –

1

Tôi đang làm việc này và cố sửa đổi nó để tôi sử dụng. Tôi có số đơn đặt hàng trong cột a và một số đơn đặt hàng có nhiều hàng. Chỉ muốn thay thế số đơn hàng trắng và xám. Những gì tôi có ở đây thay đổi mỗi hàng.

ChangeBackgroundColor() ' ChangeBackgroundColor Macro ' ' Keyboard Shortcut: Ctrl+Shift+B Dim a As Integer a = 1 Dim c As Integer c = 15 'gray Do While (Cells(a, 2) <> "") If (Cells(a, 1) <> "") Then 'check for new ID If c = 15 Then c = 2 'white Else c = 15 'gray End If End If Rows(Trim(Str(a)) + ":" + Trim(Str(a))).Interior.ColorIndex = c a = a + 1 Loop

End Sub

0

Tôi đã làm lại câu trả lời của Bartdude, cho ánh sáng Xám/trắng dựa trên một cột cấu hình, sử dụng các giá trị RGB. Một biến boolean được lật khi giá trị thay đổi và điều này được sử dụng để lập chỉ mục mảng màu sắc thông qua các giá trị số nguyên của True và False. Làm việc cho tôi vào năm 2010. Gọi cho phụ với số tờ.

Public Sub HighLightRows(intSheet As Integer) 
    Dim intRow As Integer: intRow = 2 ' start at 2, cause there's nothing to compare the first row with 
    Dim intCol As Integer: intCol = 1 ' define the column with changing values 
    Dim Colr1 As Boolean: Colr1 = True ' Will flip True/False; adding 2 gives 1 or 2 
    Dim lngColors(2 + True To 2 + False) As Long ' Indexes : 1 and 2 
      ' True = -1, array index 1. False = 0, array index 2. 
    lngColors(2 + False) = RGB(235, 235, 235) ' lngColors(2) = light grey 
    lngColors(2 + True) = RGB(255, 255, 255) ' lngColors(1) = white 

    Do While (Sheets(intSheet).Cells(intRow, 1) <> "") 
     'check for different value in intCol, flip the boolean if it's different 
     If (Sheets(intSheet).Cells(intRow, intCol) <> Sheets(intSheet).Cells(intRow - 1, intCol)) Then Colr1 = Not Colr1 
     Sheets(intSheet).Rows(intRow).Interior.Color = lngColors(2 + Colr1) ' one colour or the other 
     ' Optional : retain borders (these no longer show through when interior colour is changed) by specifically setting them 
     With Sheets(intSheet).Rows(intRow).Borders 
      .LineStyle = xlContinuous 
      .Weight = xlThin 
      .Color = RGB(220, 220, 220) 
     End With 
     intRow = intRow + 1 
    Loop 
End Sub 

thưởng Tùy chọn: cho dữ liệu SQL, màu sắc bất kỳ giá trị NULL với cùng vàng như được sử dụng trong SSMS

Public Sub HighLightNULLs(intSheet As Integer) 
    Dim intRow As Integer: intRow = 2 ' start at 2 to avoid the headings 
    Dim intCol As Integer 
    Dim lngColor As Long: lngColor = RGB(255, 255, 225) ' pale yellow 

    For intRow = intRow To Sheets(intSheet).UsedRange.Rows.Count 
     For intCol = 1 To Sheets(intSheet).UsedRange.Columns.Count 
      If Sheets(intSheet).Cells(intRow, intCol) = "NULL" Then Sheets(intSheet).Cells(intRow, intCol).Interior.Color = lngColor 
     Next intCol 
    Next intRow 
End Sub 
0

tôi sử dụng quy tắc này trong Excel để định dạng hàng xen kẽ:

  1. Đánh dấu các hàng bạn muốn áp dụng kiểu thay thế.
  2. Bấm "Conditional Formatting" -> New Rule
  3. Chọn "Sử dụng một công thức để xác định các tế bào để định dạng" (mục cuối cùng)
  4. Nhập nguyên tắc về giá trị định dạng: =MOD(ROW(),2)=0
  5. Bấm "Format" , tạo định dạng bắt buộc cho các hàng xen kẽ, ví dụ: Điền -> Màu.
  6. Bấm OK, Bấm OK.

Nếu bạn muốn định dạng cột luân phiên thay vào đó, sử dụng =MOD(COLUMN(),2)=0

Voila!

+0

Xin chào, bạn trả lời màu hàng thay thế, các câu hỏi muốn nhóm màu dữ liệu không phải là nows .. – ozmike