拆分分隔的单元格并突出显示单元格是否包含特定值

时间:2016-09-19 16:50:52

标签: vba split delimiter

我有一个excel文件,其中某列的每一行都有“|”分隔的数据(日期和整数)。对于VBA,我想突出显示一个单元格,如果它包含一个大于3,000,000的值。

以下是我的代码。 sh2lrow是我当前工作表的最后一行(工作表2)。 ioSched是我正在使用的专栏。你能帮我找到更好的解决方案吗?我正在分割单元格,然后如果它是一个整数,将字符串转换为整数,然后如果大于3,000,000则以红色突出显示。

    For i = 2 To sh2lRow
        splitBudget = Split((sh2.Cells(i, ioSched)), "|")
            For Each Item In splitBudget
                If IsNumeric(Item) Then
                    finalNumber = CInt(Item)
                Else: finalNumber = 0
            End If
        If finalNumber > 3000000 Then sh2.Cells(i, ioSched).Interior.ColorIndex = 3
        Next
    Next i

enter image description here

1 个答案:

答案 0 :(得分:0)

考虑使用字符串函数Mid()Instr()来解析格式化的数字。下面假设列的模式为date|number

For i = 2 To sh2lRow
    finalnumber = CLng(Mid(Worksheets(1).Cells(i, ioSched), _
                           InStr(Worksheets(1).Cells(i, 1), "|") + 1))

    If finalnumber > 3000000 Then Worksheets(1).Cells(i, ioSched).Interior.ColorIndex = 3

如果列的模式为date|numbernumber|date(管道之前或之后没有空格),请使用条件检查添加Left()字符串函数:

For i = 2 To sh2lRow
    cellValue = Worksheets(1).Cells(i, ioSched)
    If IsNumeric(Left(cellValue, InStr(cellValue, "|") - 1)) Then
        finalnumber = CLng(Left(cellValue, InStr(cellValue, "|") - 1))
    Else
        finalnumber = CLng(Mid(cellValue, InStr(cellValue, "|") + 1))
    End If

    If finalnumber > 3000000 Then Worksheets(1).Cells(i, 1).Interior.ColorIndex = 3
Next i