Functiona sayfadan değer atamak

unur

Altın Üye
Katılım
8 Aralık 2005
Mesajlar
847
Excel Vers. ve Dili
İş:Excel 2000 Türkçe
Ev:Excel xp Türkçe
Altın Üyelik Bitiş Tarihi
05-09-2027
Mrb arkadaşlar makrolardan anlamıyorum. Elimde kullandığım bir function var gelir vergisini hesaplatmak için


Dim fark as double
const bir_dilim as long= 158000
const iki_dilim as long= 330000
const uc_dilim as long= 800000

şeklinde
yapmak istediğim bu 158000 330000 ve 800000 değerlerini excelde herhangi bir sayfadaki ücrelere yazmak istiyorum. o değerleri bu sayfadaki hücrelerden aldırmak istiyorum.
Örnek : Sayfa1 A1 hücresine 158000 , A2 hücresine 330000 A3 hücresine 800000 gibi

Yardımcı olacak arkadaşlara şimdiden teşekkürler
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,890
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Merhaba,
Sayfa1 A1 hücresine 158000 , A2 hücresine 330000 A3 hücresine 800000
bunu zaten kullanabilirsiniz, küçük bir örnek ekleseniz ne istediğiniz daha kolay anlaşılır.
İyi çalışmalar
 

unur

Altın Üye
Katılım
8 Aralık 2005
Mesajlar
847
Excel Vers. ve Dili
İş:Excel 2000 Türkçe
Ev:Excel xp Türkçe
Altın Üyelik Bitiş Tarihi
05-09-2027
Tevfik bey dosya ekleyemediğim için ayrıntılı açıklamaya çalıştım. function içindeki o değerleri sayfadaki hücrelerden alsın istiyorum.
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,890
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Altın Üye 'siniz arkadaşım.
Fonksiyonunuzun ne yaptığınıbilmiyorum, ama belki bu örnek size fikir verir. Diyelim D1 hücresine C1, A1 den büyükse C1 den A1 i çıkar yazalım. =EĞER(C1>$A$1;C1-$A$1;"")
inşallah iş görür
 

unur

Altın Üye
Katılım
8 Aralık 2005
Mesajlar
847
Excel Vers. ve Dili
İş:Excel 2000 Türkçe
Ev:Excel xp Türkçe
Altın Üyelik Bitiş Tarihi
05-09-2027
Tevfik bey gözden kaçırdınız sanırım
bunlar makro sayfasında; matraha göre gelir vergisini hesaplayan bir makro fonksiyonu

Dim fark as double
const bir_dilim as long= 158000
const iki_dilim as long= 330000
const uc_dilim as long= 800000
 
Katılım
6 Mart 2024
Mesajlar
328
Excel Vers. ve Dili
2010 TR & 2016 TR
Merhaba,
Sorunuzdan benim anladığım kadarıyla,
yazdığınız kodlar yerine aşağıdaki kodları kullanabilirsiniz:

C++:
Dim fark As Double

Dim bir_dilim As Long
Dim iki_dilim As Long
Dim uc_dilim As Long

bir_dilim = Range("A1").Value
iki_dilim = Range("A2").Value
uc_dilim = Range("A3").Value
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,890
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Teşekkürler, benim yazmama gerek kalmadı
 

unur

Altın Üye
Katılım
8 Aralık 2005
Mesajlar
847
Excel Vers. ve Dili
İş:Excel 2000 Türkçe
Ev:Excel xp Türkçe
Altın Üyelik Bitiş Tarihi
05-09-2027
Merhaba,
Sorunuzdan benim anladığım kadarıyla,
yazdığınız kodlar yerine aşağıdaki kodları kullanabilirsiniz:

C++:
Dim fark As Double

Dim bir_dilim As Long
Dim iki_dilim As Long
Dim uc_dilim As Long

bir_dilim = Range("A1").Value
iki_dilim = Range("A2").Value
uc_dilim = Range("A3").Value
hata verdi sanki sayfa adınında yazılması gerekiyor.
 
Katılım
6 Mart 2024
Mesajlar
328
Excel Vers. ve Dili
2010 TR & 2016 TR
Sayfa adı belirtilmeyince varsayılan olarak aktif olan sayfayı kabul eder.
özellikle sayfa adı belirtmek isterseniz eğer
Örnek: uc_dilim = Worksheets("Veriler").Range("A3").Value
 

unur

Altın Üye
Katılım
8 Aralık 2005
Mesajlar
847
Excel Vers. ve Dili
İş:Excel 2000 Türkçe
Ev:Excel xp Türkçe
Altın Üyelik Bitiş Tarihi
05-09-2027
Arkadaşlar emeklerinize sağlık ancak ben yapamadım
Dosyayı yüklemeye çalıştım ama yükleyemedim.
makrolardaki
const bir_dilim as long= 158000
const iki_dilim as long= 330000
const uc_dilim as long= 800000

158000, 330000,800000 i bordro sayfası üzerinden örnek a3 a4 ve a5 hücrelerinden almak istiyorum.

kodlar aşağıda:
Function STOPAJ2025(kumulatif_matrah As Double, matrah As Double) As Double

Dim Fark As Double
Const bir_dilim As Long = 158000
Const iki_dilim As Long = 330000
Const uc_dilim As Long = 800000

'*****ORANLAR*********
DEĞER1 = 0.15
DEĞER2 = 0.2
DEĞER3 = 0.27
DEĞER4 = 0.35

'************* I. DILIM ****************
If kumulatif_matrah <= bir_dilim Then
STOPAJ2025 = Round(matrah * DEĞER1, 2)

'************* II. DILIM ***************
ElseIf kumulatif_matrah > bir_dilim And kumulatif_matrah <= iki_dilim Then
Fark = kumulatif_matrah - bir_dilim
If Fark < matrah Then
STOPAJ2025 = (matrah - Fark) * DEĞER1
STOPAJ2025 = Round(STOPAJ2025 + Fark * DEĞER2, 2)
Else
STOPAJ2025 = Round(matrah * DEĞER2, 2)
End If

'************* III. DILIM ***************
ElseIf kumulatif_matrah > iki_dilim And kumulatif_matrah <= uc_dilim Then
Fark = kumulatif_matrah - iki_dilim
If Fark < matrah Then
STOPAJ2025 = (matrah - Fark) * DEĞER2
STOPAJ2025 = Round(STOPAJ2025 + Fark * DEĞER3, 2)
Else
STOPAJ2025 = Round(matrah * DEĞER3, 2)
End If

'************* IV. DILIM ****************
ElseIf kumulatif_matrah > uc_dilim Then
Fark = kumulatif_matrah - uc_dilim
If Fark < matrah Then
STOPAJ2025 = (matrah - Fark) * DEĞER3
STOPAJ2025 = Round(STOPAJ2025 + Fark * DEĞER4, 2)
Else
STOPAJ2025 = Round(matrah * DEĞER4, 2)
End If
End If
End Function
 
Katılım
6 Mart 2024
Mesajlar
328
Excel Vers. ve Dili
2010 TR & 2016 TR
dilim değerlerinin alınacağı hücrelerin bulunduğu sayfa isminin "bordro" olduğunu varsaydım.

bir kontrol ediniz.

C++:
Function STOPAJ2025(kumulatif_matrah As Double, matrah As Double) As Double

Dim fark As Double

Dim bir_dilim As Double
Dim iki_dilim As Double
Dim uc_dilim As Double

bir_dilim = CDbl(ThisWorkbook.Sheets("bordro").Range("A3").Value)
iki_dilim = CDbl(ThisWorkbook.Sheets("bordro").Range("A4").Value)
uc_dilim = CDbl(ThisWorkbook.Sheets("bordro").Range("A5").Value)

'*****ORANLAR*********
DEĞER1 = 0.15
DEĞER2 = 0.2
DEĞER3 = 0.27
DEĞER4 = 0.35

'************* I. DILIM ****************
If kumulatif_matrah <= bir_dilim Then
STOPAJ2025 = Round(matrah * DEĞER1, 2)

'************* II. DILIM ***************
ElseIf kumulatif_matrah > bir_dilim And kumulatif_matrah <= iki_dilim Then
fark = kumulatif_matrah - bir_dilim
If fark < matrah Then
STOPAJ2025 = (matrah - fark) * DEĞER1
STOPAJ2025 = Round(STOPAJ2025 + fark * DEĞER2, 2)
Else
STOPAJ2025 = Round(matrah * DEĞER2, 2)
End If

'************* III. DILIM ***************
ElseIf kumulatif_matrah > iki_dilim And kumulatif_matrah <= uc_dilim Then
fark = kumulatif_matrah - iki_dilim
If fark < matrah Then
STOPAJ2025 = (matrah - fark) * DEĞER2
STOPAJ2025 = Round(STOPAJ2025 + fark * DEĞER3, 2)
Else
STOPAJ2025 = Round(matrah * DEĞER3, 2)
End If

'************* IV. DILIM ****************
ElseIf kumulatif_matrah > uc_dilim Then
fark = kumulatif_matrah - uc_dilim
If fark < matrah Then
STOPAJ2025 = (matrah - fark) * DEĞER3
STOPAJ2025 = Round(STOPAJ2025 + fark * DEĞER4, 2)
Else
STOPAJ2025 = Round(matrah * DEĞER4, 2)
End If
End If
End Function
 

unur

Altın Üye
Katılım
8 Aralık 2005
Mesajlar
847
Excel Vers. ve Dili
İş:Excel 2000 Türkçe
Ev:Excel xp Türkçe
Altın Üyelik Bitiş Tarihi
05-09-2027
Çok teşekkürler Biolightant istediğim tamda bu idi,
Emeğinize sağlık.
 

unur

Altın Üye
Katılım
8 Aralık 2005
Mesajlar
847
Excel Vers. ve Dili
İş:Excel 2000 Türkçe
Ev:Excel xp Türkçe
Altın Üyelik Bitiş Tarihi
05-09-2027
işe yaramasına sevindim.
Kolay gelsin.
Küçük bir düzeltme daha isteyebilir miyim?
bir_dilim = CDbl(ThisWorkbook.Sheets("bordro").Range("A3").Value)
iki_dilim = CDbl(ThisWorkbook.Sheets("bordro").Range("A4").Value)
uc_dilim = CDbl(ThisWorkbook.Sheets("bordro").Range("A5").Value)

Bordro sayfasında A3, A4, A5 deki verileri değiştirdiğimde gelir vergilerini otomatik olarak hesaplamıyor formulu yenilediğimde yansıyor. o verileri değiştirdiğim an otomatik formüle yansıması için nasıl bir düzeltme yapabiliriz
Teşekkürler.
 
Katılım
6 Mart 2024
Mesajlar
328
Excel Vers. ve Dili
2010 TR & 2016 TR
Dim fark As Double Satırının hemen üstüne Application.Volatile True kodunu ekle

C++:
Function STOPAJ2025(kumulatif_matrah As Double, matrah As Double) As Double

Application.Volatile True

Dim fark As Double

'Diğer kodların ....
Bu sayede fonksiyon daha sık yeniden hesaplanır.


Ama eğer tam istediğin gibi anında değişim olmuyorsa,
o zaman bir_dilim, iki_dilim, uc_dilim gibi değerleri direkt hücre parametresi (Range) olarak fonksiyona geçirmen gerekir.

Yani kullanım şu şekilde olmalı:
Kod:
 =STOPAJ2025(B2;C2;bordro!A3;bordro!A4;bordro!A5)
Bu yöntem uğraştırıcı gibi görünse de hücrelerdeki her değişiklikte fonksiyon otomatik hesaplanır, F9’a gerek kalmaz.
ama o zaman Function u baştan yazmak gerekecek...
 
Üst