2016-04-13 40 views
0

Excel VBA'da ondalık değerleri karşılaştırmaya çalışıyorum ve ölçütleriyle eşleşen satırları silmeye çalışıyorum. Bu benim orijinal kodumdu ve birçok satırda atlandı.Ondalık Değerleri Karşılaştırma 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 

Ve tablo üzerinde değerler sadece% işareti ile ondalık değerlerdir.

enter image description here

Ben Excel noktası karşılaştırma kayan bazı sorunları var ama çünkü "> 97.99" hala doğru karşılaştırmak gelmez çalıştı.

Selection.Value kullandıktan sonra gösterdiği şey aşağıdadır. enter image description here

enter image description here

+0

Rakamlar üzerinde özel bir maskeye sahip olmanız gerekir. 00.00 "%" 'gibi bir şey, sayıların gerçek yüzdeler değil, yüzde olarak maskaralık olması anlamına gelir. –

+0

Hayır. Bunlar yüzlerce değerlerdir. > = 98.00 olarak değiştirdim ve işe yarıyor! Teşekkür ederim. – Dombey

cevap

4

Yüzdeler ondalık tamsayılar ile tasvir edilir. Örneğin% 100.00, 1 olarak depolanır ve% 98.01'i .9801 olarak depolanır.

Eğer eşik ayarlamak gerekir Therefor:

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 

ikinci sorunu satırları silerken geriye doğru yineleme için en iyi olmasıdır. Aksi takdirde, bazı satırlar kaçırabilir, çünkü her satır silindiğinde, yukarı taşınır ve sonraki iterasyon bir sonraki satırı atlar. Uzun ve bir dizi

Değişim i kullanırız

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üzenleme: yüzdeleri bu deneyin gibi görünmek için numaralar zorluyor sayı biçimi üzerinde özel bir maske var göründüğünden:

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 

Eğer bu işe yararsa, o zaman ana sorun, D sütununa bakmanızdır. Ofset, katkı maddesidir. Yani .offset(0,3) kullandığında, sütun A'dan üç sütun taşınıyordu. 1 + 3, 4.

+0

catch @tigeravatar için teşekkürler –

+1

@Dombey Satırları siliyorsanız, aralığın altından çalışmanız gerekir, aksi takdirde algoritmanız çalışmayacaktır. Bunu yapıyorsanız ve hala% 24.75'i siliyorsanız, o zaman verilerinizle ilgili bir şey vardır. –

+0

@Dombey O zaman rakamlara benzeyen bir sayı ve metin karışımına sahipsiniz. –