2016-09-19 8 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

Который приходит first: 'date | номер 'или' номер | date'? И число с тысячами разделителей? – Parfait

+0

У вас возникли проблемы с 'On Error Resume Next'? 'CInt (Item)' будет переполняться, если значение превышает 32 767. Вам нужно, чтобы 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|number и number|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 

 Смежные вопросы

  • Нет связанных вопросов^_^