Find Komutu ile ilgili Bir Sorum olacaktı..

VBA Makrolar ile ilgili sormak istedikleriniz, yapmak istedikleriniz hakkında yardım alabileceğiniz bölümdür.

Find Komutu ile ilgili Bir Sorum olacaktı..

İleti#1)  sefer_50 » 24 Şub 2011 10:46

Değerli arkadaşlar formda açtığım böyle bir gün hesabı olur mu konu başlığına cevap gelmeme nedeni olarak direk kod falan yazmadan sizlere işi havale etmişim gibi bir Algı oluştu sanırım..Aslında amacım bu değildi... işi bilen hocalarımızdan birinden böyle bir hesabın yapılıp yapılamayacağına dair bir dönüt beklemiştim..Eğer yapıyorsa yola çıkmak yapılması pek mümkün gözükmüyorsa da boştan yere uğraşmak istememiştim..Fakat şimdiki gelinen nokta şudur ki; Kıt kod bilgimi aklımda kurduğum mantıkla birleştirerek yapılabilmesi için uğraşacağım ..O yüzden de Konunun özü sürekli arama ile ilgili işlemlerden oluşacağından FİND komutunun neler yapabileceğini inceden inceye araştırıp öğrenmeye karar verdim..Bu nokta da siz değerli arkadaşlarımdan olayı anlamam açısından yardım talep ediyorum..Şimdi formda arama yaptığım zaman karşıma gelen FİND komutu ile ilgili uygulamalardan birini ele alarak irdelemek bu sayede de öğrenmek için bu konuyu açıyorum;

Kod: Tümünü seç
Sub Bul()
Dim c As Range, Aranan As String, Adres As String, ilkAdres As String
Aranan = "Ali"
With Sayfa1.Range("a1:a500")
Set c = .Find(Aranan, LookIn:=xlValues)
Adres = c.Address
If Not c Is Nothing Then
ilkAdres = c.Address
Do
Set c = .FindNext(c)
If c.Address = ilkAdres Then
Exit Do
Else
Adres = c.Address
End If
Loop While Not c Is Nothing
End If
End With
Sayfa1.Range(Adres).Activate
Set c = Nothing
End Sub


Set c = .Find(Aranan, LookIn:=xlValues)
Bu komut ile Aranan değişkenine aktarılmış olan "Ali" verisini bulup c değişkenine atıyoruz.Buraya kadar tamam.

Adres = c.Address
Adres değişkenine de Ali verisinin bulunduğu hücre olan ve bizim c diye belirlediğimiz hücrenin adresini aktarıyoruz.Değil mi(Ben bu şekilde yorumluyorum zira yanlış yorumluyorsam Hocalarımızın müdahale ederek doğruyu göstermelerini istirham ediyorum).Neyse ben anladığım şekilde yola devam edeyim ve anlayamadığım yere gelince zaten cümleler kopuklaşacak tam bu sırada hocam burası nasıl oluyor diyeceğim...
If Not c Is Nothing Then
Bu komut satırından da c değişkeninde veri varsa (Not dan dolayı olumsuzlaşıyor değil mi? Aslında is nothing değişkenin boşsa anlamına geliyor değil mi?iki olumsuz bir olumlu eder mantığı ile hareket ederek bu kanıya varıyorum umarım doğru bir kanıdır.)
ilkAdres = c.Address kokmutu ile de bu ilk verinin adresini alıp ilkAdres değişkenine atıyoruz..Sonra DO..LOOP WHİLE döngüsü kuruluyor.Yani while şartı ile belirlenen koşul TRUE olduğu sürece dönecek olan döngü..(Aslında burada aklıma gelmiyor da değil neden do while ..Loop döngüsü değilde şart yanlış da olsa bir kez de olsa çalıştırılacak olan Do..Loop While döngüsü kuruluyor.. [ilginc] ) bu döngüde de while komutuna koşulan şart if komutuna koşulan şartın aynısı yani not c is nothing c değişkeni boş değilse döngü şartı doğrulanıyor ve aradaki komutlar çalıştırılıyor.ilk komut Set c = .FindNext(c) komutu bu komut Devam et bir sonraki c değişkenine ilerle anlamına mı geliyor? ben geliyor kabul ederek devam ediyorum.Tabi döngüde devam ederek bir sonraki c ilkAdres verisinde depolanan veri ile aynı olursa da Exit Do komutu ile döngüden çıkılıyor..ELSE değilse ilkAdres değilse Adres değişkeni Adres=c.Address komutu ile güncelleniyor..Şimdi hocalarım doğru yorumlayabilmişiyim artı bir de buradaki döngünün neden do while Loop değilde Do Loop While şeklinde kurulduğunu açıklarmısınız...

Bir de şöyle bir kod yazdığımız zaman neden hata alırız sebebi FİND komutunun daha net anlaşılması açısından yardımcı oalcaktır sanırım..Çünkü ben hucre diye veri tipi RANGE olan bir değişken tanıplayıp bu değişkene de Sayfa1'deki A1:A100 aralığını atadıktan sonra bu aralıkta bir veri aratmaya çalışıyorum bu veriyi de msgbox yazdırmak istersem nasıl bir kod yazmamız gereklidir?
Kod: Tümünü seç
Sub findKomutu()
Dim hucre As Range
Dim veri As String
veri = "selim"
Set c = Sheets("Sayfa1").Range("A1:A100")
bul = c.Find(veri, LookIn:=xlValues)
MsgBox (bul)
End Sub

böyle bişey denedim ama olmadı..Bu sorunu açıklayıcı bir dille çözüme kavuşturursanız çok sevinirim...
Kullanıcı avatarı
sefer_50
Yeni Başlamış
 
Adı Soyadı:sefer Dölen
Kayıt: 13 Tem 2010 08:29
İleti: 49
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Aydın / SÖKE

Cevap: Find Komutu ile ilgili Bir Sorum olacaktı..

İleti#2)  habakay » 24 Şub 2011 11:38

Merhaba,
Sizin yazdığınız kodlarda aşağıdaki değişiklikleri yaptığınızda sorununuz çözülecektir.
"bul" adlı değişkeni "Range" olarak tanımladığınız için "Set" komutu ile bu değişkene atama yapmalısınız.

Sub findKomutu()
Dim hucre As Range
Dim bul As Range
Dim veri As String
veri = "selim"
Set hucre = Sheets("Sayfa1").Range("A1:A100")
Set bul = c.Find(veri, LookIn:=xlValues)
MsgBox (bul)

hucre=Nothing
bul=Nothing
veri=vbnullstring
End Sub

Bunun dışında sorduğunuz diğer kod ile ilgili açıklamaları diğer arkadaşlar daha detaylı verebilir sanıyorum.
Kullanıcı avatarı
habakay
Yeni Başlamış
 
Adı Soyadı:Halil Abakay
Kayıt: 03 May 2009 20:38
Konum: İstanbul
Meslek: İnşaat Mühendisi
Yaş: 41
İleti: 81
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Istanbul

Cevap: Find Komutu ile ilgili Bir Sorum olacaktı..

İleti#3)  sefer_50 » 24 Şub 2011 13:50

Halil bey; çok teşekkür ederim vermiş olduğunuz bilgiden dolayı..tabi herşeyden öncelikli olanı da göstermiş olduğunuz İLgi veAlakadan dolayı...Diğer kodlar ile ilgil sorularımıza da dediğiniz gibi bilgisi olan diğer arkadaşlardan cevaplar bekliyoruz...
Kullanıcı avatarı
sefer_50
Yeni Başlamış
 
Adı Soyadı:sefer Dölen
Kayıt: 13 Tem 2010 08:29
İleti: 49
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Aydın / SÖKE

Cevap: Find Komutu ile ilgili Bir Sorum olacaktı..

İleti#4)  Tarkan VURAL » 04 Mar 2011 09:41

Günaydın.
Türkçe yazım kurallarına daha fazla özen gösterirseniz çok seviniriz.

Sub Bul()
Prosedür adıdır.

Dim c As Range, Aranan As String, Adres As String, ilkAdres As String
Değişkenlerimiz. Değişkenler ile ilgili detaylı anlatım olan başlıktan faydalanabilirsiniz.

Aranan = "Ali"
Aranan adlı değişkene Ali değeri atanmış.

With Sayfa1.Range("a1:a500")
Sayfa1 A1 ve A500 aralığı ele alınmış.

Set c = .Find(Aranan, LookIn:=xlValues)
C nesne değişkenine aranan veriyi değerler içinde arayan bir find işlemi atanmış. Bu veri bulunduğunda C nesne değişkeni Nothing değeri taşımaz ve yukarıda değişkenlerde Range özelliği verilmiş olduğundan, bulunan Range' in özelliklerini alır. Eğer aranan değer bulunanamış ise, C nesne değişkeni Nothing değeri taşıyacak ve sonraki satırlarınızda yazan örneğin C.Address istediğiniz sonucu vermeyecek.

Adres = c.Address
Bulunan değerin atandığı C nesne değişkeninin hücre adresi, Adres adlı metin değişkenine atanmaya çalışılmış.

If Not c Is Nothing Then
Eğer C nothing değil ise

ilkAdres = c.Address
Yukarıdaki Eğer sorgulamasının sonucu doğru dönerse ilkadres adlı değişkene C nesne değişkeninin address özelliğinde taşıdığı değeri ata denmiş.

Do
Döngü açılmış.

Set c = .FindNext(c)
C nesne değişkenine sonraki arama sonuçları atanmak isteniyor.

If c.Address = ilkAdres Then
Eğer ilkadres değeri ile bulunan sonraki aramanın getireceği adres değeri eşit ise,

Exit Do
Döngüden hemen çık

Else
Değil ise,

Adres = c.Address
Adres değişkenine bulunan hücre adresini ata.

End If
If şartının sonu.

Loop While Not c Is Nothing
C değeri nothing olmadığı müddetçe döngüye devam et. Bu şartı bu satıra geldiğinde kontrol et, C nesne değişkeni nothing olmadıysa geriye Do kısmına dön, olduysa döngüyü bitir.

End If
If şartının sonu.

End With
With açılımının sonu.

Sayfa1.Range(Adres).Activate
Sayfa1 , adres hücresini aktif et, seç.

Set c = Nothing
C nesne değişkenini hafızadan kaldır.

End Sub
Prosedür sonu.

İyi çalışmalar. --)(
Resim
www.tarkanvural.com.tr

İnnâ lillâhi ve innâ ileyhi raciûn
Şüphesiz ki; biz Allah’a âidiz ve vakti geldiğinde O’na döndürüleceğiz.

HasbunAllâhu ve nimel vekîl
Bize Allah yeter. O ne güzel vekildir.


ExcelVBA.NET' e katkıda bulunmak ister misiniz ? O halde BAĞIŞ butonunu tıklayın...
Kullanıcı avatarı
Tarkan VURAL
Yönetim Kurulu
 
Adı Soyadı:Tarkan VURAL
Kayıt: 14 Haz 2008 18:27
Konum: @tarkanvural73
Meslek: LUU, Database Expert, Senior Software Specialist, Developer
Yaş: 45
İleti: 27005
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul - Beylikdüzü

REKLAM
Excel Logo XML Oluşturucu
Logo Object Designer ile Uyarlama

Cevap: Find Komutu ile ilgili Bir Sorum olacaktı..

İleti#5)  sefer_50 » 08 Mar 2011 09:45

Tarkan hocam; öncelikle Türkçe' yi doğru kullanma konusunda göstermiş olduğunuz hassasiyetten dolayı teşekkürlerimi sunarken, benim acale ile yazılmış olan iletimdeki hatalardan dolayı da özür dileklerimi iletmek isterim...
Yapmış olduğunuz açıklamadan dolayı çok teşekkür ederim. Hocam bir sorun daha var. Bu seferki sorun bu konu başlığı ile alakalı değil. Fakat ilgili konu başlığı altında sorunu dile getirmiş olmama rağmen konu güncelliğini yitirdiğinden dolayı görünmemesi endişesinden dolayı buradan bir kez daha hatırlatmak istedim;
viewtopic.php?f=4&t=8313 verdiğim linkte ki konuda geçen kodları da kısaca açıklamanız mümkün mü? Özellikle &H80000000 şu kodlara benzer yerleri çözemedim. Gene elimdeki kaynaktan anlamaya çalıştığım kadarı ile çözemediğim veya ilk kez karşılaştığım kod bloğuda aşağıda verilmiştir. Sizden kısaca anlatmanızı istemiş olsam da kalıcı bir öğrenme adına ilk kez karşılaştığım bu kodlar hakkında detaylı bir bilgilendirme istirham ediyorum.
strComputer = "."
strKeyPath = "KPD-Team"
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
DeleteSubkeys HKEY_CURRENT_USER, strKeyPath
Kullanıcı avatarı
sefer_50
Yeni Başlamış
 
Adı Soyadı:sefer Dölen
Kayıt: 13 Tem 2010 08:29
İleti: 49
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Aydın / SÖKE

Cevap: Find Komutu ile ilgili Bir Sorum olacaktı..

İleti#6)  Tarkan VURAL » 08 Mar 2011 11:39

Konuyu kendi başlığından takip ediniz. Konu yanıtlanmıştır.
Resim
www.tarkanvural.com.tr

İnnâ lillâhi ve innâ ileyhi raciûn
Şüphesiz ki; biz Allah’a âidiz ve vakti geldiğinde O’na döndürüleceğiz.

HasbunAllâhu ve nimel vekîl
Bize Allah yeter. O ne güzel vekildir.


ExcelVBA.NET' e katkıda bulunmak ister misiniz ? O halde BAĞIŞ butonunu tıklayın...
Kullanıcı avatarı
Tarkan VURAL
Yönetim Kurulu
 
Adı Soyadı:Tarkan VURAL
Kayıt: 14 Haz 2008 18:27
Konum: @tarkanvural73
Meslek: LUU, Database Expert, Senior Software Specialist, Developer
Yaş: 45
İleti: 27005
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul - Beylikdüzü

REKLAM
ETA - Excel Konsolide Raporlama
ETA Excel Personel Entegre Raporu

Cevap: Cevap: Find Komutu ile ilgili Bir Sorum olacaktı..

İleti#7)  pacitom » 10 Ağu 2019 10:04

Tarkan VURAL yazdı:Günaydın.
...


Set c = .Find(Aranan, LookIn:=xlValues)
C nesne değişkenine aranan veriyi değerler içinde arayan bir find işlemi atanmış. Bu veri bulunduğunda C nesne değişkeni Nothing değeri taşımaz ve yukarıda değişkenlerde Range özelliği verilmiş olduğundan, bulunan Range' in özelliklerini alır. Eğer aranan değer bulunanamış ise, C nesne değişkeni Nothing değeri taşıyacak ve sonraki satırlarınızda yazan örneğin C.Address istediğiniz sonucu vermeyecek.

Adres = c.Address
Bulunan değerin atandığı C nesne değişkeninin hücre adresi, Adres adlı metin değişkenine atanmaya çalışılmış.

If Not c Is Nothing Then
Eğer C nothing değil ise

ilkAdres = c.Address
Yukarıdaki Eğer sorgulamasının sonucu doğru dönerse ilkadres adlı değişkene C nesne değişkeninin address özelliğinde taşıdığı değeri ata denmiş.

Do
Döngü açılmış.

Set c = .FindNext(c)
C nesne değişkenine sonraki arama sonuçları atanmak isteniyor.

If c.Address = ilkAdres Then
Eğer ilkadres değeri ile bulunan sonraki aramanın getireceği adres değeri eşit ise,

Exit Do
Döngüden hemen çık

Else
Değil ise,

Adres = c.Address
Adres değişkenine bulunan hücre adresini ata.

End If
If şartının sonu.

Loop While Not c Is Nothing
C değeri nothing olmadığı müddetçe döngüye devam et. Bu şartı bu satıra geldiğinde kontrol et, C nesne değişkeni nothing olmadıysa geriye Do kısmına dön, olduysa döngüyü bitir.

...
(



Çok teşekkürler hocam çok açıklayıcı olmuş.
Kullanıcı avatarı
pacitom
 
Kayıt: 07 Tem 2017 17:29
Meslek: serbest
Yaş: 35
İleti: 5
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: izmir


Forum Genel Makro Soruları

Online Kullanıcılar

Bu forumu görüntüleyenler: AhrefsBot, bizekalan, Google Adsense [Bot], Yandex[Bot] ve 1 misafir

Bumerang - Yazarkafe