(1)尝试条件格式:
(注意:只有当值不能出现在该列表的后面时,这才会正常工作)。
基于公式创建一个规则(或两个规则,准确地说)。根据您的屏幕截图,我假设您的数据从第 3 行开始并且您想查看 C 列。
有一个相当简单的公式可用于计算列表中唯一值的数量。基本公式是从ExcelJet“借来”的,是=SUMPRODUCT(1/COUNTIF(data,data))。现在的诀窍是使用C$3:C3 范围查看从列表开头到实际行的范围。如果向下复制公式,起始行将保留,而结束行将更改。现在简单地在公式周围放一个IsOdd resp IsEven。
因此,“绿色”行的公式为 =ISODD(SUMPRODUCT(1/COUNTIF(C$3:C3,C$3:C3))),黄色行的公式为 =ISEVEN(SUMPRODUCT(1/COUNTIF(C$3:C3,C$3:C3)))。将规则应用到范围=$C$3:$C$1048576
但是,我不知道这种条件格式是否会在查询更新后“存活下来”。
(2)使用 VBA 格式化很简单。以下代码格式化表格的一列(VBA 中的表格是ListObject 类型。将列表对象和列号作为参数传递:
Sub ColorRows(table As ListObject, columnNumber As Long)
Dim cell As Range, isOdd As Boolean
For Each cell In table.DataBodyRange.Columns(columnNumber).Cells
With cell
If .Offset(-1, 0) <> .Value Then isOdd = Not isOdd
' On a standard Office color scheme, 10 is kind of green and 8 is a dirty yellow
.Interior.ThemeColor = IIf(isOdd, 10, 8)
.Interior.TintAndShade = 0.8
End With
Next
End Sub
这就是调用的样子(根据您的需要调整工作表和 listObject):
Sub test()
ColorRows ThisWorkbook.Sheets(1).ListObjects(1), 3
End Sub
现在自动调用此代码是另一回事,不幸的是相当复杂 - 如果您想要/需要,请尝试https://stackoverflow.com/search?q=vba+QueryTable+After+Refresh 以获得一些见解。一个简单的替代方法是手动触发格式化,例如通过在您的工作表上放置一个调用代码的按钮(或形状)。