2016-04-13 3 views
0

Я пытаюсь сравнить десятичные значения в Excel VBA и удалять строки, которые соответствуют критериям. Это был мой оригинальный код, и он пропустил много строк.Сравнение десятичных значений Excel VBA

For Each i In WSData.Range("A7", WSData.Range("A7").End(xlDown)).Cells 
    If i.Offset(0, 3).Value >= 98 Then 
     i.EntireRow.Delete 
    End If 
Next 

И значения в электронной таблице являются десятичными значениями только с знаком%.

enter image description here

Я попытался «> 97,99», потому что Excel имеет некоторые проблемы с плавающей точкой сравнения, но это еще не точно сравнивать.

Вот что он показывает после использования Selection.Value. enter image description here

enter image description here

+0

Затем вы должны иметь пользовательскую маску на цифрах. Что-то вроде '00.00"% "', что означает, что числа не являются истинными процентами, а количество mascarading в процентах. –

+0

Нет. Это значения в сотнях. Я вернулся к> = 98,00, и он работает! Спасибо. – Dombey

ответ

4

Проценты десятичного изображены с целыми числами. Например, 100,00% хранится как 1 и 98,01% хранится как .9801.

этого вам нужно настроить порог:

For Each i In WSData.Range("A7", WSData.Range("A7").End(xlDown)).Cells 
    If i.Offset(0, 3).Value >= .98 Then 
     i.EntireRow.Delete 
    End If 
Next 

Вторая проблема заключается в том, что при удалении строк лучше перебирать в обратном направлении. В противном случае это может пропустить несколько строк, потому что, когда каждая строка удаляется, она перемещается вверх, а затем следующая итерация пропускает следующую строку.

изменение, которое я из диапазона долго и использовать это:

For i = WSData.Range("A7").End(xlDown).row to 7 Step -1 
    If WSData.Cells(i,3).Value >= .98 Then 
     Row(i).Delete 
    End If 
Next 

Edit: Потому что он появляется там обычай маска на числовой формат, который навязывает номера, чтобы выглядеть как проценты попробовать это:

For i = WSData.Range("A7").End(xlDown).row to 7 Step -1 
    If WSData.Cells(i,3).Value >= 98 Then 
     Row(i).Delete 
    End If 
Next 

Если это сработает, тогда основная проблема заключалась в том, что вы искали столбец D. Смещение является аддитивным. Поэтому, когда вы использовали .offset(0,3), он перемещал три столбца из столбца A. 1 + 3 равно 4.

+0

Спасибо за catch @tigeravatar –

+1

@ Dombey Если вы удаляете строки, вам нужно работать со дна диапазона вверх, иначе ваш алгоритм не будет работать. Если вы это делаете и все еще удаляете 24,75% и т. Д., То есть что-то плохое в ваших данных. –

+0

@ Dombey Затем у вас есть смесь чисел и текста, которые выглядят как цифры. –

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