İki Kritere göre match fonksiyonu

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,062
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba,
Aşağıdaki kodda iki farklı değeri (Ara1, Ara2) farklı sütunlarda aramasını ayrı-ayrı yaparak satır numarasını bulabiliyoruz.

Yalnız benim istediğim bu aranan iki değerin (Ara1, Ara2) arama sonucunda bulundukları "ortak kesiştiği" satırı bulmak

Özetle: Ara1' i B sütunda arayacak, Ara2' yi C sütununda arayacak ortak bulduğu satır bilgisini verecek bana;

Kod:
Dim ara1 As String
Dim ara2 As String
Dim Rng1 As Range
Dim Rng2 As Range

Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim r1 As Integer, r2 As Integer
Dim LastRow As Integer


Set sh1 = Sayfa6
Set sh2 = Sayfa8

ara1 = Sayfa2.Range("A2").Value
ara2 = Sayfa2.Range("B2").Value

LastRow = sh1.Cells(sh1.Rows.Count, "B").End(xlUp).Row

Set Rng1 = sh1.Range("B2:B" & LastRow)
Set Rng2 = sh1.Range("C2:C" & LastRow)

r1 = WorksheetFunction.Match(ara1, Rng1, 0)
r2 = WorksheetFunction.Match(ara2, Rng2, 0)
Şimdiden teşekkürler,
iyi çalışmalar.
 

Korhan Ayhan

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

Tamer bey yine makro kaydet yöntemini kullanarak hücreye bir formül yazdım. Sonra kodu elle anlaşılacak şekilde düzenledim.

C++:
Option Explicit

Sub Ikili_Arama()
    MsgBox Evaluate("SMALL(IF(A1:A1000=F1,IF(C1:C1000=G1,ROW(A1:A1000))),1)")
End Sub
Ben aynı sayfada işlem yaptım. Siz adresleri kendi dosyanıza göre düzenlersiniz.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,062
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba,

Tamer bey yine makro kaydet yöntemini kullanarak hücreye bir formül yazdım. Sonra kodu elle anlaşılacak şekilde düzenledim.

C++:
Option Explicit

Sub Ikili_Arama()
    MsgBox Evaluate("SMALL(IF(A1:A1000=F1,IF(C1:C1000=G1,ROW(A1:A1000))),1)")
End Sub
Ben aynı sayfada işlem yaptım. Siz adresleri kendi dosyanıza göre düzenlersiniz.
Korhan Hocam teşekkürler,
Aşağıdaki şekilde düzenlemeye çalıştım fakat hata verdi.
Nasıl yapabilirim?

iyi pazarlar.
Kod:
Sub Ikili_Arama()
Dim a1 As String
Dim a2 As String

a1 = "Vardiya"

a2 = "Excel"

    MsgBox Evaluate("SMALL(IF(B2:B2000=" & a1 & ",IF(C2:C2000=" & a2 & ",ROW(A2:A1000))),1)")

End Sub
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,269
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Değişkenleri formül içinde tırnaklar arasında göstermişsiniz. Metinsel ifadeler için tırnak sayılarını arttırıp deneme yapabilirsiniz.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,062
Excel Vers. ve Dili
Office 2013 İngilizce
Değişkenleri formül içinde tırnaklar arasında göstermişsiniz. Metinsel ifadeler için tırnak sayılarını arttırıp deneme yapabilirsiniz.
Korhan Hocam hala işin içinden çıkamadım, gönderdiğim kod içinde uygulayabilirseniz çok makbule geçecek, teşekkürler

iyi çalışmalar.
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,340
Excel Vers. ve Dili
2007 Türkçe
Merhaba,
Rich (BB code):
Evaluate("SMALL(IF(B2:B2000=""" & a1 & """,IF(C2:C2000=""" & a2 & """,ROW(A2:A1000))),1)")
Evaluate komutunu vermeden önce mesaj kutusu ile formülünüzün nasıl görüneceğini kontrol edebilirsiniz.
Kod:
MsgBox "SMALL(IF(B2:B2000=""" & a1 & """,IF(C2:C2000=""" & a2 & """,ROW(A2:A1000))),1)"
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,062
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba,
Rich (BB code):
Evaluate("SMALL(IF(B2:B2000=""" & a1 & """,IF(C2:C2000=""" & a2 & """,ROW(A2:A1000))),1)")
Evaluate komutunu vermeden önce mesaj kutusu ile formülünüzün nasıl görüneceğini kontrol edebilirsiniz.
Kod:
MsgBox "SMALL(IF(B2:B2000=""" & a1 & """,IF(C2:C2000=""" & a2 & """,ROW(A2:A1000))),1)"
Çok teşekkürler Korhan Hocam
iyi ki varsınız...
 

Korhan Ayhan

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

Ben kendinizin çözmesi adına sadece ipucunu paylaşmıştım. Ama son cevabı yazan @ÖmerBey'dir. Kendisine teşekkür etmeniz daha uygun olur.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,062
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba,
Rich (BB code):
Evaluate("SMALL(IF(B2:B2000=""" & a1 & """,IF(C2:C2000=""" & a2 & """,ROW(A2:A1000))),1)")
Evaluate komutunu vermeden önce mesaj kutusu ile formülünüzün nasıl görüneceğini kontrol edebilirsiniz.
Kod:
MsgBox "SMALL(IF(B2:B2000=""" & a1 & """,IF(C2:C2000=""" & a2 & """,ROW(A2:A1000))),1)"
Ömer Hocam kusura bakmayın, çok teşekkür ederim.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,062
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba,
Rich (BB code):
Evaluate("SMALL(IF(B2:B2000=""" & a1 & """,IF(C2:C2000=""" & a2 & """,ROW(A2:A1000))),1)")
Evaluate komutunu vermeden önce mesaj kutusu ile formülünüzün nasıl görüneceğini kontrol edebilirsiniz.
Kod:
MsgBox "SMALL(IF(B2:B2000=""" & a1 & """,IF(C2:C2000=""" & a2 & """,ROW(A2:A1000))),1)"
Korhan Hocam & Ömer Hocam eğer burada bir değer bulunmazsa hata veriyor,
Kod:
On Error Resume Next
ile geçiyorum, daha profesyonel bir çözümü olabilir mi?
teşekkürler, iyi çalışmalar.
 

Korhan Ayhan

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

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,062
Excel Vers. ve Dili
Office 2013 İngilizce
IFERROR eklemeyi deneyebilirsiniz.
Korhan Hocam fazla olduğumu biliyorum ama kusura bakmayın
Hücre aralığını da değişken olarak tanımlamaya çalıştım fakat yine beceremedim.

Kod:
Rng = "B2:B2000"

   MsgBox Evaluate("SMALL(IF(""" & Rng & """=""" & a1 & """,IF(C2:C2000=""" & a2 & """,ROW(A2:A1000))),1)")
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,269
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Konu çok olmak meselesi değil.

Sizlere kendinizi geliştirmek açısından anahtar kelimeleri veriyoruz ama kimse sanırım bunun için uğraşmak istemiyor.

Özellikle benimle neredeyse aynı tarihte foruma üye olan arkadaşlarım bu konuda beni şaşırtıyorlar.

Neyse siz aşağıdaki gibi bir deneyiniz.

Rich (BB code):
MsgBox Evaluate("IFERROR(SMALL(IF(""" & Rng & """=""" & a1 & """,IF(C2:C2000=""" & a2 & """,ROW(A2:A1000))),1),"""")")
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,062
Excel Vers. ve Dili
Office 2013 İngilizce
Konu çok olmak meselesi değil.

Sizlere kendinizi geliştirmek açısından anahtar kelimeleri veriyoruz ama kimse sanırım bunun için uğraşmak istemiyor.

Özellikle benimle neredeyse aynı tarihte foruma üye olan arkadaşlarım bu konuda beni şaşırtıyorlar.

Neyse siz aşağıdaki gibi bir deneyiniz.

Rich (BB code):
MsgBox Evaluate("IFERROR(SMALL(IF(""" & Rng & """=""" & a1 & """,IF(C2:C2000=""" & a2 & """,ROW(A2:A1000))),1),"""")")
Korhan Hocam haklısınız, bu tırnak işaretleri iyice kafamı karıştı,
birde bu kodun sonucu 0 geliyor.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,269
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Örnek veriyi görmek gerekir.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,269
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sorun şu;

Çift tırnak işaretlerini sadece metinsel ifadeler için arttırmanız gerekiyor.

Hücre adresi belirtirken buna gerek yok.

Bu gibi durumlarda sorunu en güzel formülü VBA ile hücreye yazdırıp normal excel formülü gibi çalışmasını sağlayarak gözlemleyebilirsiniz. Hücreye formülü yazdığınızda olması gerektiği gibi sonuç veriyorsa sonrasında VBA tarafında EVALUATE ederek sadece sonuç vermesini sağlayabilirsiniz.

Bunları yapmak içinde sürekli denemeler yapmak gerekiyor.

Sonuç olarak bahsettiğim yazım hatasını düzeltirsek sonuç aşağıdaki gibi olmalıdır.

C++:
MsgBox Evaluate("IFERROR(SMALL(IF(" & Rng & "=""" & a1 & """,IF(C2:C1000=""" & a2 & """,ROW(A2:A1000))),1),"""")")
Not : Sizin a1 ve a2 olarak tanımladığınız kriterlerinizin ikiside metinsel ifade olduğu için 3 adet çift tırnak kullanarak bunları formül içinde kullanıyoruz. Bunlardan birisi sayısal olursa formül yine hata verecektir. Bu sebeple excelde SAYI ve METİN ifadeleri çok önemlidir.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,062
Excel Vers. ve Dili
Office 2013 İngilizce
Sorun şu;

Çift tırnak işaretlerini sadece metinsel ifadeler için arttırmanız gerekiyor.

Hücre adresi belirtirken buna gerek yok.

Bu gibi durumlarda sorunu en güzel formülü VBA ile hücreye yazdırıp normal excel formülü gibi çalışmasını sağlayarak gözlemleyebilirsiniz. Hücreye formülü yazdığınızda olması gerektiği gibi sonuç veriyorsa sonrasında VBA tarafında EVALUATE ederek sadece sonuç vermesini sağlayabilirsiniz.

Bunları yapmak içinde sürekli denemeler yapmak gerekiyor.

Sonuç olarak bahsettiğim yazım hatasını düzeltirsek sonuç aşağıdaki gibi olmalıdır.

C++:
MsgBox Evaluate("IFERROR(SMALL(IF(" & Rng & "=""" & a1 & """,IF(C2:C1000=""" & a2 & """,ROW(A2:A1000))),1),"""")")
Not : Sizin a1 ve a2 olarak tanımladığınız kriterlerinizin ikiside metinsel ifade olduğu için 3 adet çift tırnak kullanarak bunları formül içinde kullanıyoruz. Bunlardan birisi sayısal olursa formül yine hata verecektir. Bu sebeple excelde SAYI ve METİN ifadeleri çok önemlidir.
Çok teşekkürler Korhan hocam,
iyi ki varsınız!
 
Üst