2016-09-19 66 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 
相關問題