• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Fonksiyonda hesaplanan değeri sabitlemek

Katılım
1 Mart 2009
Mesajlar
113
Excel Vers. ve Dili
xp
Merhaba,
Fonksiyonlar bölümünde sordum ama cevap vba olabilir diye düşünüyorum.
Düşey ara fonksiyonu kullanarak veri aldığımız hücreler var.
Bu hücrelerde ürünlerin fiyatları var.
Zaman geçipte zam yapıldığında eski fiyattan satılmış ürünlerinde fiyatı zamlı hesaplanıyor.
Yani doğal olarak kaynak veri değişince dha evelden hesaplanmış olan düşey ara fonsiyonunun sonucu da otomatik değişiyor.
Benim sorum şudur:
Düşey ara fonksiyonunun ilk hesaplandığı anki sonuç sabitlenemez mi?
 
Merhaba,

Makro kullanarak yapılabilir. Küçük bir örnek dosya ekleyerek açıklarmısınız. (2003 formatında)

.
 
http://www.sendspace.com/file/5kkfcb

linkteki dosyada müşteri satış sayfasında ürün seçilince otomatik olarak fiyat gelir.
Fiyatıda veritabanı sayfasından düşey ara ile alır.
Bu fiyat değişince müşteri satış sayfasında ki eski değerler değişmesin istiyorum.
 
Küçük bir örnek ekleyin demiştim. Dosyanız çok kapsamlı olduğu için ilk bakışta anlamam zor. Bu yüzden küçük bir örnek ekliyorum inceleyerek dosyanıza uyarlarsınız.

.
 

Ekli dosyalar

İlginize teşekkürler,
İnceledim ama sanırım anlatamadım kendimi.
Kusura bakmayın biz çok haşır neşir olunca dosyanın kapsamlı olduğu aklımdan çıkmış.
Ben ihtiyacım olanı anlattığım bir dosya ekliyorum.
Saygılar.
Dosya:
http://www.sendspace.com/file/csv124
 
Merhaba,

Kodları module ekleyerek bir butona bağlayın.

Kod:
Option Explicit
Sub BulYaz()
Dim i As Long
Dim Bul1, Bul2 As Range
Dim S1, S2 As Worksheet
Set S1 = Sheets("Sayfa1")
Set S2 = Sheets("Sayfa2")
S2.Select
Range("C2:C65536").ClearContents
For i = 2 To [A65536].End(3).Row
 
    Set Bul1 = S1.Range("A:A").Find(Cells(i, "A"), LookIn:=xlValues)
    If Bul1 Is Nothing Then Exit For
 
    Set Bul2 = S1.Range("1:1").Find(Cells(i, "B"), LookIn:=xlValues)
    If Bul2 Is Nothing Then Exit For
 
    Cells(i, "C") = S1.Cells(Bul1.Row, Bul2.Column)
Next i
End Sub

.
 
Son düzenleme:
Ömer Bey
Uyguladım fakat ilk satıra firma2 ürün 3 diyorum 20 buluyor.
ilksyfadan 20 yi değiştiriyorum ve 21 yapıyorum.Hemen değişmiyor ama 2.satırıda doldurup butona tıklayıncaa 20 bir anda 21 oluyor.
 
Bu şekilde denermisiniz.

Kod:
Option Explicit
Sub BulYaz()
Dim i As Long
Dim Bul1, Bul2 As Range
Dim S1, S2 As Worksheet
Set S1 = Sheets("Sayfa1")
Set S2 = Sheets("Sayfa2")
S2.Select
Range("C2:C65536").ClearContents
For i = 2 To [A65536].End(3).Row
    Set Bul1 = S1.Range("a:a").Find(Cells(i, "A"), LookIn:=xlValues)
    Set Bul2 = S1.Range("1:1").Find(Cells(i, "B"), LookIn:=xlValues)
    If Not Bul1 Is Nothing And Not Bul2 Is Nothing Then _
    Cells(i, "C") = S1.Cells(Bul1.Row, Bul2.Column)
Next i
End Sub

.
 
Son düzenleme:
Kodu düzelttim tekrar deneyiniz.

.
 
Hata düzeldi ancak yine de fiyat değişikliğinden sonra butona tıklatılınca önceden hesaplanmış formülerin sonucu değişiyor.
 
Butona tıklamazsanız değişmez. Amacınız bu değil mi ?

Butona tıkladığınız zaman verileri alır. Daha sonra data sayfasında veriler değişse bile butona tıklamadıkça eski veriler orada kalır. Sonradan güncellemek isterseniz yeni veriler gelir.

.
 
Biz bir sayfaya karışık satış kayıtları tutuyoruz.Altalta 100lerce satır
Butona her veri girişinden sonra tıklamak zorundayım yoksa tek tek fiyatlara bakmam gerekir hangi firma kaçtan alıyor diye.Ve zam geldikten sonraki giriştede tıklatınca herşey bozuluyor.
 
Anlatmak istediklerinizi anlamıyorum maalesef. Yapmak istediğinizi detaylı açıklayın.

.
 
1.Satıra: firma miktar ürün fiyat toplam tahsilat kalan
Gibi bilgiler giriyorum ve bu alt alta karışık firmalar ve ürünlerin bu şekildeki satış kaydı şeklinde devam ediyor.Bildiğiniz gibi fiyatı başka sayfadaki 1 listeden firma adı ve ürün adına göre otomatik olarak alıyoruz.diğer veriler elle giriliyor.
ben misal veriyorum 112.satırda iken zam yapmam gerekti.Yukarıda aynı yıla ait 112 adet satış kaydı varken yani.Diğer sayfadan fiyatları değiştirdiğimde yukarıdaki 112 verinin fiyatlarının değişmemesi ve yeni veri gireceğim 113. satırında fiyatının zamlı olarak otomatik gelmesini istiyorum.
Tabi benimki sadece bir istek belki de böyle bir şey mümkün bile değil. Ama olursa büyük kolaylık olacak.
Çabanız için teşekkürler.
 
Merhaba,

Kusura bakmayın işlerimin yoğunlu nedeniyle yanıtım geçikti.
Kod:
Option Explicit
Sub BulYaz()
Dim i As Long
Dim Bul1, Bul2 As Range
Dim S1, S2 As Worksheet
Set S1 = Sheets("Sayfa1")
Set S2 = Sheets("Sayfa2")
S2.Select
    For i = 2 To [A65536].End(3).Row
        If Cells(i, "C") = "" Then
            Set Bul1 = S1.Range("A:A").Find(Cells(i, "A"), LookIn:=xlValues)
            Set Bul2 = S1.Range("1:1").Find(Cells(i, "B"), LookIn:=xlValues)
            If Not Bul1 Is Nothing And Not Bul2 Is Nothing Then _
            Cells(i, "C") = S1.Cells(Bul1.Row, Bul2.Column)
        End If
    Next i
Set S1 = Nothing
Set S2 = Nothing
End Sub

Bu şekilde deneyin.

.
 
Ömer Bey,
Kusura bakmak ne demek sanki bir mecburiyetiniz varmış gibi.
Kod son haliyle çok güzel oldu tam istediğim gibi teşekkürler.
 
Ömer Bey kod çok güzel oldu ama kendi çalışmama uygulayamadım.
Sadece sayfa adlarını ve hücre adlarını değiştirdim olmadı nasıl yapsak.
 
Kod:
Option Explicit
Sub BulYaz()
Dim i As Long
Dim Bul1, Bul2 As Range
Dim S1, S2 As Worksheet
Set S1 = Sheets("Sayfa1") ' verileri aldığınız sayfa adı
Set S2 = Sheets("Sayfa2") 'sonuçları gördüğünüz sayfa adı
S2.Select
    For i = 2 To [A65536].End(3).Row ' buradaki 2 sonuçları gördüğünüz sayfadaki ilk satır _
    A ise  ölçüte baktığınız ilk değerin sütun adı
        If Cells(i, "C") = "" Then ' Buradaki C Sayfa2 de sonuçların yazıldığı sütunun adı
            Set Bul1 = S1.Range("A:A").Find(Cells(i, "A"), LookIn:=xlValues) 'A:A verilerin alındığı _
            sayfadaki ilk ölçütün arandığı sütun adı. Cells(i, "A") buradaki A ise sonuçları gördüğünüz _
            ilk ölçütün olduğun olduğu sütun adı.
            Set Bul2 = S1.Range("1:1").Find(Cells(i, "B"), LookIn:=xlValues) '1:1 verilerin alındığı _
            sayfadaki ikinci ölçütün arandığı satır numarası. Cells(i, "B") buradaki B ise sonuçları gördüğünüz _
            ikinci ölçütün olduğun olduğu sütun adı.
            If Not Bul1 Is Nothing And Not Bul2 Is Nothing Then _
            Cells(i, "C") = S1.Cells(Bul1.Row, Bul2.Column) 'Buradaki C Sayfa2 de sonuçların yazıldığı sütunun adı
        End If
    Next i
Set S1 = Nothing
Set S2 = Nothing
End Sub

Açıklamaya çalıştım. Kodları module yapıştırdıktan sonra açıklamalar yeşil renk olacaktır. Bunları okuyun.
.
 
Geri
Üst