【问题标题】:Conditional Formatting - Number stored as text条件格式 - 数字存储为文本
【发布时间】:2018-05-28 19:36:31
【问题描述】:

我尝试使用 VBA 为列添加条件格式,以便当单元格值不等于参考值时,用黄色填充单元格。

' c represent the column number, lRow represent the last row
' RefVal is a string variable read from reference spreadsheet

Range(Cells(2, c), Cells(lRow, c)).FormatConditions. _
    Add(xlCellValue, xlNotEqual, RefVal).Interior.ColorIndex = 6

运行代码后,条件规则如下:

我真正想要的是下面(注意183957 周围的引号):

这是因为我正在处理的单元格是“数字存储为文本”。如果我使用第一个条件规则,它将始终为“真”。只有第二条规则才能进行真正的比较。

我该如何解决这个问题?我无法控制电子表格的内容。我该如何比较“文本到文本”与“文本到数字”?还是有更简单的解决方案?

【问题讨论】:

  • 将单元格格式化为数字Columns(3).NumberFormat = "0"
  • 我无法控制单元格。我只想比较“文本模式”下的所有单元格。我该怎么做?谢谢!
  • 您可以尝试为特定文本设置条件格式_不包含

标签: vba excel


【解决方案1】:

您可以完全在 VBA 中做到这一点:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.EnableEvents = False

    Dim lastRow As Long, i As Long, RefVal As String 'maybe other appropriate datatype
    RefVal = Worksheets("ReferenceSheetNameHere!").Cells(1, 1).Value 'in Cells, specify coordinates of a cell with reference value!
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 1 To lastRow
        If Cells(i, 1).Value <> RefVal Then
            Cells(i, 1).Interior.ColorIndex = 6
        Else
            Cells(i, 1).Interior.ColorIndex = 0
        End If
    Next

    Application.EnableEvents = True
End Sub

请注意(如代码中的 cmets 所述)您必须指定参考值所在的位置。

具有此签名的此方法处理包括单元格更改在内的工作表更改事件,因此它模仿自动过滤器,但功能更强大。

为了让它工作,这个代码应该粘贴到你要处理的工作表对应的VBA文件中,即当你打开VBA编辑器时,你应该在树的左侧选择工作表。

【讨论】:

  • 迈克尔,感谢您的意见。但是,我需要比较的参考值是一个变量,它从另一个参考电子表格中读取。所以我不能只在 VBA 中使用字符串“183957”。我需要使用像 RefVal 这样的变量。
  • 然后声明它,例如:Dim compareValue As Variant,您可以使用其他适当的数据类型并为其赋值并使用此变量:If Cells(i, 1).Value &lt;&gt; compareValue Then
  • 然后我们回到原来的问题——我想给单元格添加条件格式。我想我应该使用 xlCellValue、xlNotEqual、compareValue 条件。但是,由于数据类型不匹配,此条件将始终为真,因为字符串不等于数字。所以我的问题是 - 使用条件格式实现这一目标的最佳方法是什么?
  • 我们如何回到原来的问题?我不明白你。我为您提供了完整的解决方案。你的进一步评论与我的回答毫无共同之处。你连我的回答都听懂了吗?
  • 您的解决方案是“如果 Cells(i, 1).Value compareValue Then”。如何使用 VBA 代码将此解决方案放入单元格的条件格式中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多