Bir listedeki sonraki sayıları ilk değerden çıkarmak için VBA kodu


0

Bir numara listem var. Listedeki ilk sayıyı başlangıç ​​değeri olarak kullanmak ve sonraki sayıları VBA kullanarak çıkarmak istiyorum.

Birkaç başarısız girişimde bulundum:

Function less(rng As Range)
    X = 0

    For Each cell In rng
    X = X - cell.Value

    Next

    less = X

End Function

Birincisi de dahil olmak üzere tüm değerlerin çıkarılmasını sağlar. Örneğin, 5,7,3,6 dizisi için kodum -21 verecek. Ama bekliyorum -11.

Denediğim diğer kod:

Function less(rng As Range)
    X = 0

    For Each cell In rng
    X = X + cell.Value
    X = X - cell.Value

    Next

    less = X

End Function

Sadece her değeri geçersiz kılar ve 0 olarak sonuçlanır.

Listedeki ilk değeri başlangıç ​​değeri olarak nasıl yapabilirim ve ardından bundan sonraki değerlerin alt çekimlerini nasıl yapabilirim?

Burada herhangi bir değerin işareti hakkında endişe duymuyorum, yalnızca ilk değerden başlamak ve sonraki değerleri çıkarmak için verilen mantıksal dizi.

Not: VBA'da yeniyim ve bu benim ilk kodlamam.


3
(1) Kodunuz tam olarak yapması gerekeni yapıyor gibi görünüyor. Sorun ne? (2) Tüm soru, aralıktaki ilk hücreyi nasıl atlayacağınızla mı ilgili? Eğer öyleyse, daha net söylemelisin. (3) VBA'da yeni olduğunuzu söylüyorsunuz. Genel olarak programlamada yeni misiniz? Sorunlarınızı (her ne olursa olsun) iyi bildiğiniz bir programlama dilinde nasıl çözersiniz? Lütfen yorumlara cevap vermeyin; sorunuzu daha net ve daha eksiksiz hale getirmek için düzenleyin .
Scott,

Aralık şu değerlerden oluşuyorsa ne olacağını umduğunuzu açıklamanızı isteyebilir miyim: -5, 7, -3, 6? BT, temel aritmetikten negatif bir değerin çıkarılmasının aynı pozitif değeri eklemekle aynı olduğunu biliyorsunuz, yani x - -1 = x + 1, değil mi?
Tom Brunberg

Scott'un sorumu düzenlediğimi söylediği gibi, aralıktaki ilk değeri atlamak için sadece çözüme ihtiyacım var.
Deepak Aggarwal

Tom için iyi biliyorum. Verilen değer için sonuçlar -21 olacak ve kodum aynı olacak. Ancak 5,7,3,6 aralığı için de kodum -21 verecek. Ama bekliyorum -11
Deepak Aggarwal

1
Örnek kodu neden sorunuzdan kaldırdınız? Sizi anlamamızı zorlaştırmak istiyor musunuz?
teylyn

Yanıtlar:


1

Düzenle (fixer1234 tarafından yapılan yorumlardan sonra)

Sorunuzu "çıkarmadan ilk değeri atlayın, ancak bunu başlangıç ​​değeri olarak ekleyin" olarak yorumlayın:

Function less(rng As Range)
    Dim x, i As Integer
    Dim cell As Range

    For Each cell In rng
      If cell.Address = rng.Cells(1, 1).Address Then
        x = cell.Value
      Else
        x = x - cell.Value
      End If
    Next

    less = x
End Function

Bu aynı zamanda, 5, 7, 3, 6 aralığının -11 vermesi gerektiğini söylediğiniz yorumunuza göre olacaktır.


5 - 7 - 3 - 6 = -11. -5 -7-3-6 = -15. Sırasıyla -16 ve -10 alıyorsanız, bir şeyler yanlış.
fixer1234

@fixer OP sordu: Aralıktaki ilk hücre değerini atlayabildiğim herhangi bir çözüm , ergo a) 5 sonra - 7 - 3 - 6 = -16 ve b) -5 atlayın, sonra -7 --3 - 6 = -10
Tom Brunberg,

OP'nin soru hakkındaki yorumuna bakınız. İlk öğeyi atlayarak, ilk öğeyi aritmetik olarak bir başlangıç ​​noktası olarak dahil etmek ve ilk öğeyi de sıfır başlangıç ​​değerinden çıkarmak yerine ondan çıkarmak anlamına geldiğini düşünüyorum. OP'nin kodunun yaptığı ve düzeltmeye çalıştığı şey bu. Soruyu belirsiz olarak kapatmak için zaten oy kullanmıştım. Buradaki yiğit çaba ve OP bir şeyleri açıklığa kavuşturursa, haklı çıkabilirsiniz veya çabayı kurtarırsınız. :-)
fixer1234

@ fixer1234 Haklısın, söylediğin gibi soruyu yeniden yorumluyorsun, muhtemelen doğru.
Tom Brunberg

Sevgili tamirciyim, haklısın "OP'nin soru hakkındaki yorumuna bakınız. İlk maddeyi atlayarak, ilk maddeyi aritmetik olarak başlangıç ​​noktası olarak dahil etmek ve diğer öğeleri de ilk maddeyi çıkarmak yerine çıkarmaktan kastettiklerini düşünüyorum. sıfır başlangıç ​​değerinden. "
Deepak Aggarwal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.