首页 > 解决方案 > 条件格式 - 如何引用单元格本身?

问题描述

我试图编写 VBA 代码来设置列的条件格式,以便当单元格包含小写和大写字母的混合时,用黄色填充单元格。列号将由变量 c 确定。最后行号将由变量 last_row 确定。

以下代码未按预期工作。看起来 LCase(xlCellValue) 总是返回“1”而不是小写格式的单元格内容。因此条件变为“CellValue <> 1”,它没有做我想要做的事情。

c = 1
last_row = 10
Range(Cells(1, c), Cells(last_row, c)). _
  FormatConditions.Add(xlCellValue, xlNotEqual, LCase(xlCellValue)). _
  Interior.ColorIndex = 6

所以我想我将不得不使用 xlExpression 而不是 xlCellValue。但是我应该如何编写公式以便它包含变量 c 和 last_row?谢谢!

标签: vbaexcel

解决方案


在这里,试试这个:

Sub test()
c = 1
last_row = 10
Range(Cells(1, c), Cells(last_row, c)). _
  FormatConditions.Add(xlExpression, , "=NOT(Exact(" & Cells(1, c).Address(RowAbsolute:=False) & ",Lower(" & Cells(1, c).Address(RowAbsolute:=False) & ")))"). _
  Interior.ColorIndex = 6
End Sub

我不知道与的比较xlCellValue, xlNotEqual是否区分大小写;但是,Excel 有一个Exact区分大小写的比较功能。当字符串不是全部小写时,我添加了一个Not以使公式的返回为真。由于这是使用 Excel 函数设置的,因此我也将其替换为.LcaseLower


笔记:

使用您遵循的逻辑,如果整个字符串是大写的,它也会变成黄色。如果您只想在混合情况下进行调节,则应改用以下代码:

Sub test()
c = 1
last_row = 10
Range(Cells(1, c), Cells(last_row, c)). _
  FormatConditions.Add(xlExpression, , "=NOT(OR(Exact(" & Cells(1, c).Address(RowAbsolute:=False) & ",Lower(" & Cells(1, c).Address(RowAbsolute:=False) & ")),Exact(" & Cells(1, c).Address(RowAbsolute:=False) & ",Upper(" & Cells(1, c).Address(RowAbsolute:=False) & "))))"). _
  Interior.ColorIndex = 6
End Sub

推荐阅读