Skip to main content

AccessTr.neT


Tarih Çıkarma

Tarih Çıkarma

Çözüldü #1
Es Selamün Aleyküm

İnşallah derdimi anlatabilirim. Bence biraz karışık. Şimdiden sürç-i lisan ettiysem affınıza sığınıyorum.

Excel sayfasının 
başlama tarihi = C4:C25 arası
bitiş tarihi = D4: D25 arası
E sütununa İki tarih arası Gün farkını
F sütununa Gün sayısına göre Yıl
G sütununa Gün sayısına göre Ay
H sütununa Gün sayısına göre Gün sayılarını buluyorum.
Kod
On Error Resume Next
If Not Intersect(Target, [C4:D20]) Is Nothing Then
sat = Target.Row
Cells(sat, "E") = Day(Cells(sat, "D")) + 30 * Month(Cells(sat, "D")) + 360 * Year(Cells(sat, "D")) - (Day(Cells(sat, "C")) + 30 * Month(Cells(sat, "C")) + 360 * Year(Cells(sat, "C")))
Cells(sat, "F") = Int(Cells(sat, "E") / 360)
Cells(sat, "G") = Int((Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360) / 30)
Cells(sat, "H") = Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360 - Int((Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360) / 30) * 30

Yapmaya çalışıp ama yapamadığım işlem ise:
Eğer E sütununda ki gün sayısı 720' den küçük ise I sütununa 720 yazacak
J sütununa 2 yıldan F sütununda ki yıl farkını alacak
K sütununa 2 yıldan G sütununda ki Ay farkını alacak
L sütununa 2 yıldan H sütununda ki Gün farkını alacak

Eğer E sütununda ki gün sayısı 720 => Büyük ise I sütununa 720' den fazla olan gün sayısını yazacak
J sütununa fazla olan gün sayısını yıla çevirecek
K sütununa fazla olan gün sayısını Aya çevirecek
L sütununa fazla olan gün sayısını Güne çevirecek

Umarım anlatabildim. Yardımcı olacak tüm üstad'larıma teşekkür ederim.
Cevapla
#2
Aleyküm selam.Select Case Range("E" & Target.Row) ile end select arasındaki gibi olacak lakin ? yerler nasıl hesaplanacak bilmiyorum Img-cray

Visual Basic Code
On Error Resume Next
If Not Intersect(Target, [C4:D20]) Is Nothing Then
sat = Target.Row
Cells(sat, "E") = Day(Cells(sat, "D")) + 30 * Month(Cells(sat, "D")) + 360 * Year(Cells(sat, "D")) - (Day(Cells(sat, "C")) + 30 * Month(Cells(sat, "C")) + 360 * Year(Cells(sat, "C")))
Cells(sat, "F") = Int(Cells(sat, "E") / 360)
Cells(sat, "G") = Int((Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360) / 30)
Cells(sat, "H") = Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360 - Int((Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360) / 30) * 30

Select Case Range("E" & sat)
    Case Is < 720
        Range("i" & sat) = 720
        Range("j" & sat) = "?"
        Range("k" & sat) = "?"
        Range("L" & sat) = "?"
    Case Is >= 720
        Range("i" & sat) = "?"
        Range("j" & sat) = "?"
        Range("k" & sat) = "?"
        Range("L" & sat) = "?"
End Select
End If
Cevapla
#3
Doğru sonuç veriyormu emin değilim.

Visual Basic Code
Private Sub Worksheet_Change(ByVal Target As Range)

Dim sat As Long
Dim fark As Double
Dim toplamgun As Double, yil As Integer, ay As Integer, gun As Double
Dim c_Hucre As Range, D_Hucre As Range



Const biryil As Integer = 360
Const ikiyil As Integer = biryil * 2
Const birAy As Byte = 30

On Error Resume Next
If Not Intersect(Target, [C4:D20]) Is Nothing Then

sat = Target.Row
Set c_Hucre = Cells(sat, "C")
Set D_Hucre = Cells(sat, "D")
toplamgun = Day(D_Hucre) + birAy * Month(D_Hucre) + biryil * Year(D_Hucre) - (Day(c_Hucre) + birAy * Month(c_Hucre) + biryil * Year(c_Hucre))
yil = Int(toplamgun / biryil)
ay = Int((toplamgun - Int(toplamgun / biryil) * biryil) / birAy)
gun = toplamgun - Int(toplamgun / biryil) * biryil - Int((toplamgun - Int(toplamgun / biryil) * biryil) / birAy) * birAy

Range(Cells(sat, "E"), Cells(sat, Columns.Count)).ClearContents

Cells(sat, "E").Value = toplamgun
Cells(sat, "F").Value = yil
Cells(sat, "G").Value = ay
Cells(sat, "H").Value = gun

Select Case toplamgun
    Case Is < ikiyil
        fark = (ikiyil - toplamgun)
        Range("i" & sat).Value = ikiyil
        Range("j" & sat).Value = 2 - Range("f" & sat)
        Range("k" & sat).Value = Int((fark - Int(fark / biryil) * biryil) / birAy)
        Range("L" & sat).Value = fark - Int(fark / biryil) * biryil - Int((fark - Int(fark / biryil) * biryil) / birAy) * birAy
    Case Is >= ikiyil
        fark = (toplamgun - ikiyil)
        Range("i" & sat).Value = fark
        Range("j" & sat).Value = Int(fark / biryil)
        Range("k" & sat).Value = Int((fark - Int(fark / biryil) * biryil) / birAy)
        Range("L" & sat).Value = fark - Int(fark / biryil) * biryil - Int((fark - Int(fark / biryil) * biryil) / birAy) * birAy
End Select
End If
Set c_Hucre = Nothing
Set D_Hucre = Nothing
End Sub
Cevapla
#4
Sayın Feraz;

OLMASI GEREKEN :
Başlama 09.09.2011
Bitiş 18.02.2013
Gün Farkı  519
Yıl :  1
Ay :  5
Gün : 9

720 Gün Olayı

2 Yıl, 0 Ay, 0 Gün
1 Yıl, 5 Ay, 9 Gün
-
-----------------------
0 Yıl, 6 Ay, 21 Gün

KOD İLE GERÇEKLEŞEN
720 Gün Olayı

2 Yıl, 0 Ay, 0 Gün
1 Yıl, 5 Ay, 9 Gün
-
-----------------------
1 Yıl, 6 Ay, 21 Gün olarak hesaplıyor.
Müsait olduğunuz bir zamanda düzeltme yapabilirseniz memnun olurum

Saygı ve hürmetlerimle
Cevapla
#5
Sayın malatyalı
alttaki kodu dener misiniz?
Visual Basic Code
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [C4:D20]) Is Nothing Then
sat = Target.Row
Cells(sat, "E") = Day(Cells(sat, "D")) + 30 * Month(Cells(sat, "D")) + 360 * Year(Cells(sat, "D")) - (Day(Cells(sat, "C")) + 30 * Month(Cells(sat, "C")) + 360 * Year(Cells(sat, "C")))
Cells(sat, "F") = Int(Cells(sat, "E") / 360)
Cells(sat, "G") = Int((Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360) / 30)
Cells(sat, "H") = Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360 - Int((Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360) / 30) * 30

Select Case Range("E" & sat)
    Case Is < 720
        Range("i" & sat) = 720
        Range("j" & sat) = Int(2 - Cells(sat, "E") / 360)
        Range("k" & sat) = Int(12 - (Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360) / 30)
        Range("L" & sat) = 30 - Cells(sat, "H")
    Case Is >= 720
        Range("i" & sat) = Int((Cells(sat, "E") - 720))
        Range("j" & sat) = Int((Cells(sat, "E") - 720) / 360)
        Range("k" & sat) = Int((Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360) / 30)
        Range("L" & sat) = Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360 - Int((Cells(sat, "E") - Int(Cells(sat, "E") / 360) * 360) / 30) * 30
End Select

End If

End Sub
userx, 24-08-2009 tarihinden beri AccessTr.neT üyesidir.
Cevapla
#6
Alıntı:Cells(sat, "E") = Day(Cells(sat, "D")) + 30 * Month(Cells(sat, "D")) + 360 * Year(Cells(sat, "D")) - (Day(Cells(sat, "C")) + 30 * Month(Cells(sat, "C")) + 360 * Year(Cells(sat, "C")))
burada kullandığınız gün hesabı hatalı değil mi sayın @malatyalı
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task