Kritere Bağlı Değer bulup getirme

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
675
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba,

Bir excel çalışmam için şöylesi bir VBA koduna ihtiyacım var. Stok adlı excel sayfasının ;
D sütunu Tarih
F sütunu Ürün numarası
J sütunu fiyat

F sütununda yer alan herhangi bir ürünün, en son tarihteki fiyatını bulup userform üzerindeki bir textboxa nasıl getirebilirim.

Excelin ön yüzünde ARA(2;1/(F:F=F2);J:J) şeklinde bir formül ile sonuç alıyorum , bunu vba diline şöyle devşirdim ama debug alıyorum.
TextBox15 = WorksheetFunction.Lookup(2, 1 / (Sheets("Stok").Range("F:F") = TextBox1.Value), Sheets("Stok").Range("J:J"))

İstediğim sonuca nasıl bir vba kodu ile ulaşabilirim?
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
ADO ile çok hızlı şekilde yapabilirsiniz.
Örnek dosyanızı paylaşırsanız hızlıca cevap verilebilir.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Ya da Textbox15'ê o bahsettiğiniz formülün olduğu hücredeki değeri getirtebilirsiniz. Eğer A1 hücresindeyse:

TextBox15 = [A1].value
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
ADO ile örnek bir çözüm.
Kendinize uyarlayabileceğiniz düşünüyorum.
 

Ekli dosyalar

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
675
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Ya da Textbox15'ê o bahsettiğiniz formülün olduğu hücredeki değeri getirtebilirsiniz. Eğer A1 hücresindeyse:

TextBox15 = [A1].value
textbox15 userform üzerinde, ve yapmak istediğim şey, satırları çok fazla olan bir sheets den userform üzerindeki sayfaya veri alıp , işleyip tekrardan farklı bir sayfaya işlenen veriyi aktarmak. Yada şöyle ifade edeyim, ilgili veri sayfasından tedarikçilerden aldığım herhangi bir ürünün, en son alış fiyatını textbox15 e alıp, bu değer üzerinden belli bir kar oranı hesaplatıp satış fiyatını belirlemeye çalışmak amacım. Bunu nasıl yapabilirim diye düşünürken yazdığım formulü buldum, cevabınız için ayrıca teşekkürler, farklı çözüm yolları varsa da belirtilmesini rica ederim. Sayın nextlevel in çözümünü uyarlamaya çalışayım :)
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,330
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sizin bulduğunuz formül eğer tarihler küçükten büyüğe doğru sıralı ise doğru sonucu verecektir. Tarihler karışıksa Maksimum formülünü kullanmak daha sağlıklı olacaktır.

Sizin verdiğiniz formülün koda evrilmiş hali aşağıdaki gibidir.

C++:
Private Sub TextBox1_Change()
    If TextBox1 <> "" Then
        On Error Resume Next
        TextBox15 = ""
        TextBox15 = Evaluate("=LOOKUP(2,1/(F:F=""" & TextBox1 & """),J:J)")
        On Error GoTo 0
    End If
End Sub
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
675
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Sizin bulduğunuz formül eğer tarihler küçükten büyüğe doğru sıralı ise doğru sonucu verecektir. Tarihler karışıksa Maksimum formülünü kullanmak daha sağlıklı olacaktır.

Sizin verdiğiniz formülün koda evrilmiş hali aşağıdaki gibidir.

C++:
Private Sub TextBox1_Change()
    If TextBox1 <> "" Then
        On Error Resume Next
        TextBox15 = ""
        TextBox15 = Evaluate("=LOOKUP(2,1/(F:F=""" & TextBox1 & """),J:J)")
        On Error GoTo 0
    End If
End Sub
Korhan Bey teşekkürler, yazmış olduğunuz kodu kendi çalışmama eklemeden haklı olduğunuzu belirteyim. Tarihler karışık olacaktır. Maksimum fonksiyonu ile kod nasıl olmalı peki. Yapmaya çalıştığım şeye mak ile çözüm aramaya başlamıştım. Ancak bugün yazdığım formulü biryerden gördüm ve işimi hallettiğini sandım. Sizin demeneze göre tarihlerin karışık olduğu bir kayıt düzeninde istediğim sonucu % 100 alamam.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,330
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

C++:
Private Sub TextBox1_Change()
    If TextBox1 <> "" Then
        Set Bul = Range("F:F").Find(TextBox1, , , xlWhole)
        If Not Bul Is Nothing Then
            TextBox15 = Evaluate("=INDEX(J:J,MATCH(MAX(IF(F:F=""" & TextBox1 & """,D:D))&""" & TextBox1 & """,D:D&F:F,0))")
        Else
            TextBox15 = ""
        End If
    End If
End Sub
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
675
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
ADO ile çok hızlı şekilde yapabilirsiniz.
Örnek dosyanızı paylaşırsanız hızlıca cevap verilebilir.

Merhaba,

Ekte çalışmasını yaptığım dosya mevcut. Fazla sayfa ve userformdan oluşmakta. Öncelikle Açıklama adlı sayfaya bakılırsa anlaşılması daha kolay olur. Stok adlı excel sayfası ve userform8 üzerindeki textbox1 ve textbox15 bakılması gereken yerler. Ado ile hiç bilgim olmadığı için ve özellikle textbox1_exit altında kodlar olduğu için işin içinden çıkmam benim adıma zor diyebilirim.
 

Ekli dosyalar

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
675
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Deneyiniz.

C++:
Private Sub TextBox1_Change()
    If TextBox1 <> "" Then
        Set Bul = Range("F:F").Find(TextBox1, , , xlWhole)
        If Not Bul Is Nothing Then
            TextBox15 = Evaluate("=INDEX(J:J,MATCH(MAX(IF(F:F=""" & TextBox1 & """,D:D))&""" & TextBox1 & """,D:D&F:F,0))")
        Else
            TextBox15 = ""
        End If
    End If
End Sub

Korhan Bey,

Tür Uyuşmazlığı şeklinde bir debug veriyor. ( Could not set the value property)
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,330
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ben #4 nolu mesaj ekindeki dosyada sorunsuz çalıştırdım. Sadece dosyadaki TextBox2'yi TextBox15 olarak düzelttim.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
675
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Ben #4 nolu mesaj ekindeki dosyada sorunsuz çalıştırdım. Sadece dosyadaki TextBox2'yi TextBox15 olarak düzelttim.

Merhaba, son mesajınızdan sonra şöylesi birşey yaptım. Örnek dosyanın ilk verilerini koruyarak , vba kısmındaki kodları silip sizin verdiğiniz kodu ekledim, ve ürün 1 ya da ürün 2 şeklinde değişiklik yaptığımda sonuç textbox ında garip bir sayı uzantısı görüyorum. Kısaca istediğim sonucu alamamış oldum. sqlçözüm_1 excel dosyası bunu göstermek için.

Ancak excel sayfasındaki verilerden bir kısmını alttan başlayarak sildim , tekrar denedim ve bazı denemeler yaptım, bu sefer aradığım sonuca ulaşmış oldum. sqlçözüm_2 excel dosyası bunu göstermek için.

Ve bunları göstermek için ekran görüntüleri koydum.

Bu, donanım, pc, excel versiyonu yada benzeri bir farklılıktan kaynaklanıyor olabilir mi. Bu farklı sonuçlar hakkında en ufak fikrim yok.
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,330
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Siz sayfadaki hücreleri tıklayıp değerleri kontrol ediniz.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Cepten baktığımdan ayrıntılı inceleyemedim. Küsüratlı olan sonuçta, tarihin yanında saat verisi de olabilir. Tarih sütununu saati de gösterecek şekilde biçimlendirerek kontrol eder misiniz?
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
textbox15 userform üzerinde, ve yapmak istediğim şey, satırları çok fazla olan bir sheets den userform üzerindeki sayfaya veri alıp , işleyip tekrardan farklı bir sayfaya işlenen veriyi aktarmak. Yada şöyle ifade edeyim, ilgili veri sayfasından tedarikçilerden aldığım herhangi bir ürünün, en son alış fiyatını textbox15 e alıp, bu değer üzerinden belli bir kar oranı hesaplatıp satış fiyatını belirlemeye çalışmak amacım. Bunu nasıl yapabilirim diye düşünürken yazdığım formulü buldum, cevabınız için ayrıca teşekkürler, farklı çözüm yolları varsa da belirtilmesini rica ederim. Sayın nextlevel in çözümünü uyarlamaya çalışayım :)
Userform8 içine ilgili revizyonu işledim.
Formu nasıl doldurduğunuz bilemediğim için deneyemedim.
Çalışması lazım.
Korhan ve Yusuf beylerin çözümleriyle sonuca ulaşamazsanız ki sanmıyorum, bu dosyayı deneyebilirsiniz.
 

Ekli dosyalar

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
#3 nolu mesajımda belirttiğim çözümü sql_çözüm1 dosyanızda aşağıdaki şekilde uyguladım:

Sayfa1'in N1 hücresine aşağıdaki DİZİ formülünü girdim (DİZİ formülünü girdikten sonra hücreden CTRL+SHIFT+ENTER ile çıkılır):

=MAK(EĞER($F$1:$F$10000=$M$1;$D$1:$D$10000))

Userformdaki Textbox1'in kodunu aşağıdakiyle değiştirdim:

PHP:
Private Sub TextBox1_Change()
    If TextBox1 <> "" Then
        Set Bul = Range("F:F").Find(TextBox1, , , xlWhole)
        If Not Bul Is Nothing Then
            [M1] = TextBox1.Text
            TextBox2.Text = Format([N1], "dd/mm/yyyy")
        Else
            TextBox2 = ""
        End If
    End If
End Sub
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
675
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Userform8 içine ilgili revizyonu işledim.
Formu nasıl doldurduğunuz bilemediğim için deneyemedim.
Çalışması lazım.
Korhan ve Yusuf beylerin çözümleriyle sonuca ulaşamazsanız ki sanmıyorum, bu dosyayı deneyebilirsiniz.

Merhaba,

Dosyayı indirdim , fakat çalıştıramadım. Neden olarak, DLL şeklinde bir not aldım. Ve yine userformları açmak için kullandığım ctrl + A , G, M şeklindeki fonksiyonlar çalışmıyor olarak gördüm.

Açıklamaya çalışayım, ADO, SQL bilgim olmadığı için.

Kurgulamaya çalıştığım şey, Cari Hesap, Stok, Alıcı, Satıcı vb işlemlerinin takibinin yapılacağı bir excel çalışması. Bu yüzden ctrl + harf kombinasyonu ile userformları ekrana alıp buralardan veri girişi sağlamam gerekli.

Sizin dosyanızı indirdiğimde bu kombinasyonlar çalışmıyor durumdaydı.

Dosyanın bende çalışır haldeki asıl halini tekrar yüklüyorum. Ve exceli açtıktan sonra CTRL + m yaparsanız userform8 , satış ekranı ekrana gelecek. Ve textbox1 ile textbox2 ye 1001, 1002 şeklinde örnek stok numaraları girdiğinizde exit olayından sonra listboxlar dolacak.

Uzun olarak anlatmaya çalıştım ki, eğer yanlış değilsem, evaluate önyüz fonksiyonlarını vbaya uyarlamak için bir yöntem ve fazla verilerin olduğu sayfalardan veri alırken, kaydederken ağır çalışmakta.( böylesi birşey hatırlıyorum )

Eğer doğru ise bu sebeple, sizin sql çözüm olarak sunduğunuz yönteme daha sıcak baktım. Daha hızlı çalışır diye. Bunda da kendi bilgisayarıma indirdiğim dosya çalışmamış oldu.

Ayrıca şunu da belirteyim, textbox1 ve textbox2 in exit olayında aynı kodlar var. Bu iki textbox ı barkod okuyucudan ürün okutup listboxlara direk veri aktarmak için kurguladım. Yani imleç textbox1 ya da 2 de iken veri girmeye çalıştıkça, ya da barkod okuttukça iki textbox arasında imleç gelip gitmekte. Tek bir textbox ile çözemediğim için bu yola başvurmuştum. userform8 üzerindeki elemanlar bir satış ekranı modulü olarak tasarlandı kısaca.

Dosyamın bendeki asıl halini tekrardan yüklüyorum.

Korhan bey ve Yusuf beyin sundukları çözümleri kendimce uyarlamaya çalışıcam. Ancak ilk tercihim HIZ olayından dolayı sizin bahsettiğiniz çözüm.

Dosyanın ana işleyişi hakkında,

Cari kart tanımla yap,
Stok tanımlama yap,
Alış faturası gir, ( stok girdisi yap)
Satış işlemi yap ( stok çıktısı ve satış fiyatı belirlemek)

Kendi kurguma göre son aşamadayım.

Teşekkürler,
 

Ekli dosyalar

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
675
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Siz sayfadaki hücreleri tıklayıp değerleri kontrol ediniz.

Korhan Bey teşekkürler uyarınız için, örnek veriler arasında fiyat değerlerinde virgülden sonra çok fazla hane varmış. Bu nedenle ilk bakışta ne olduğuna anlam veremedim. İstediğim çalışıyor.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
675
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
#3 nolu mesajımda belirttiğim çözümü sql_çözüm1 dosyanızda aşağıdaki şekilde uyguladım:

Sayfa1'in N1 hücresine aşağıdaki DİZİ formülünü girdim (DİZİ formülünü girdikten sonra hücreden CTRL+SHIFT+ENTER ile çıkılır):

=MAK(EĞER($F$1:$F$10000=$M$1;$D$1:$D$10000))

Userformdaki Textbox1'in kodunu aşağıdakiyle değiştirdim:

PHP:
Private Sub TextBox1_Change()
    If TextBox1 <> "" Then
        Set Bul = Range("F:F").Find(TextBox1, , , xlWhole)
        If Not Bul Is Nothing Then
            [M1] = TextBox1.Text
            TextBox2.Text = Format([N1], "dd/mm/yyyy")
        Else
            TextBox2 = ""
        End If
    End If
End Sub

Yusuf bey, excel sayfası üzerinde işlem yapmıyorum. Excel sayfası üzerinden veri alıyorum, userform üzerindeki textboxlarda bazı işlemler yaptırıp oluşan yeni veriyi farklı excel sayfasına aktarmaya çalışıyorum. Excel sayfalarına manuel dokunuş yapmamaktayım çalışmamda.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
675
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Ben #4 nolu mesaj ekindeki dosyada sorunsuz çalıştırdım. Sadece dosyadaki TextBox2'yi TextBox15 olarak düzelttim.

Korhan Bey,

En son yazmış olduğunuz kodda şöylesi bir durum var. Yanlış anlamadıysam, excel sayfa2 açıkken hata veriyor, sayın nextlevel in dosyasındaki kodları tamamen silip sizin verdiğiniz kodu denedim, evet çalışıyor, ama sayfa1 seeçili, açıkken, benim aldığım hata kod satırında veri sayfasının tanımlı olmaması ile ilgili bir durum olabilir mi. Ya da en azından deneme yanılma yaparken kodun sayfa seçimine bağlı olarak düzgün çalıştığı gibi bir durum anladım. örnek dosya ekte,
 

Ekli dosyalar

Üst