2016-09-19 69 views
0

我有一个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

+0

哪个来第一:'日期|号码或号码| date'?并且有数千个分隔符? – Parfait

+0

你在程序中碰巧有'On Error Resume Next'吗?如果值高于32,767,则CInt(Item)将溢出。你需要使用finalNumber作为'Long' - 而不是'CLng(Item)'。 – Comintern

+0

是日期|日期|号码,有时重复(即日期|日期|号码)。没有一千个分离器。我在“excel文件的图像”中插入了一个例子。我还陷入困境,因为我想强调单元格中的任何数字是否都大于3000000. –

回答

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 
相关问题