我有一个像这样的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
现在我想通过交替行的背景颜色
来对一个id的数据进行分组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
任何人都可以帮我处理宏或一些VBA代码
由于
答案 0 :(得分:38)
我使用此公式来获取条件格式的输入:
=IF(B2=B1,E1,1-E1)) [content of cell E2]
其中B列包含需要分组的项目,E是辅助列。每当上单元(在这种情况下为B1)与当前单元(B2)相同时,返回来自列E的上行内容。否则,它将返回1减去该内容(也就是说,outupt将为0或1,具体取决于上部单元格的值)。
答案 1 :(得分:4)
我认为这可以满足您的需求。当A列中的单元格更改值时,翻转颜色。运行直到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
答案 2 :(得分:2)
基于Jason Z的答案,我的测试似乎是错误的(至少在Excel 2010上),这里有一些恰好适合我的代码:
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
答案 3 :(得分:1)
你必须使用代码吗? 如果表是静态的,那么为什么不使用自动格式化功能?
如果您“合并”相同数据的单元格,它也可能会有所帮助。因此,如果将“数据,更多数据,甚至更多数据”的单元格合并到一个单元格中,您可以更轻松地处理经典的“每行是一行”的情况。
答案 4 :(得分:1)
我正在对此进行调整并尝试修改它以供我使用。我在列a中有订单号,有些订单需要多行。只想按订单号替换白色和灰色。我在这里交替每行。
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
答案 5 :(得分:0)
如果选择“格式”菜单项下的“条件格式”菜单选项,将为您提供一个对话框,允许您构建一些逻辑以应用于该单元格。
您的逻辑可能与上面的代码不同,它可能看起来更像:
细胞值是|等于| |和|白色....然后选择颜色。
您可以选择添加按钮,并根据需要调整条件。
答案 6 :(得分:0)
我根据可配置的列使用RGB值重写了Bartdude的答案,用于浅灰/白色。当值改变时,boolean var被翻转,这用于通过整数值True和False索引colors数组。在2010年为我工作。使用表格编号调用sub。
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
可选奖励:对于SQL数据,使用与SSMS中使用的黄色相同的任何NULL值着色
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
答案 7 :(得分:-1)
我在Excel中使用此规则来格式化交替的行:
=MOD(ROW(),2)=0
如果您希望格式化交替列,请使用 =MOD(COLUMN(),2)=0
瞧!