• DİKKAT

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

Find fonksiyonunda bulunamama

Katılım
9 Kasım 2015
Mesajlar
40
Excel Vers. ve Dili
2016 Türkçe
Merhaba,

Find fonksiyonu ile başlayıp bir döngü oluşturacağım ancak aranacak değeri bir değişkene atadığımda hata alıyorum.Aranacak değer bir tarih hatanın bundan kaynaklandığını düşündüm. Çözüm olarak aranacak değeri bir hücreye yazdırdım, hücre adresi verince find komutu çalışıyordu. Ama aşağıdaki şekilde kod biraz daha karmaşıklaşınca find komutu çalışmıyor malesef f8 ile inceleyince yine nothing gözüküyor.

Kod:
Dim bul As Range

For trh = 2 To Cells(2, Columns.Count).End(xlToLeft).Column

yıl = Left(Cells(2, trh), 4)
ay = Right(Cells(2, trh), 1)
If ay = 2 Then ayy = 12
If ay = 9 Then ayy = "09"
If ay = 6 Then ayy = "06"
If ay = 3 Then ayy = "03"
gün = 31

tmtrh = gün & "." & ayy & "." & yıl
Cells(176, trh) = tmtrh

Set bul = worksheets("data").Range("b:b").Find(Worksheets("veritabanı").Cells(176, trh))

Next trh

Bundan sonrasına eğer değer bulunamazsa gün-1 olarak do while döngüsü yapacağım ama malesef değer aranan yerde olmasına rağmen bul değişkeni nothing gözüküyor.

Dosya ektedir.

Teşekkürler.
 

Ekli dosyalar

Merhaba.

Aşağıdaki şekilde (kırmızı renklendirdiğim satırları silebilirsiniz),
aranan verinin data sayfasındaki konumuna ilişkin bilgileri elde etmiş olursunuz.
Kod:
[FONT="Arial Narrow"][COLOR="Red"]tmtrh = gün & "." & ayy & "." & yıl
Cells(176, trh) = tmtrh[/COLOR]
Set bul = Worksheets("data").Range("b:b").Find([COLOR="Blue"]CDate(gün & "." & ayy & "." & yıl)[/COLOR])
    If Not bul Is Nothing Then
        [B][COLOR="Blue"]satır = [/COLOR][/B]bul.Row: [B][COLOR="blue"]sütun = [/COLOR][/B]bul.Column:[B][COLOR="blue"] adres = [/COLOR][/B]bul.Address(0, 0)
    End If[/FONT]

Ayrıca kodlarınızdaki hücre başvurularında;
-- To Cells(2, Columns.Co.../ yıl=Left(Cells(2, trh...
gibi satırlarda ilgili hücrenin hangi sayfaya ait olduğunu
-- To Sheets("VeriTabanı").Cells(2, Columns.Co... / yıl=Left(Sheets("VeriTabanı").Cells(2, trh...
gibi sayfa adlarını belirtmeniz yerinde olur.
 
Son düzenleme:
Merhaba.

Aşağıdaki şekilde (kırmızı renklendirdiğim satırları silebilirsiniz),
aranan verinin data sayfasındaki konumuna ilişkin bilgileri elde etmiş olursunuz.
Kod:
[FONT="Arial Narrow"][COLOR="Red"]tmtrh = gün & "." & ayy & "." & yıl
Cells(176, trh) = tmtrh[/COLOR]
Set bul = Worksheets("data").Range("b:b").Find([COLOR="Blue"]CDate(gün & "." & ayy & "." & yıl)[/COLOR])
    If Not bul Is Nothing Then
        [B][COLOR="Blue"]satır = [/COLOR][/B]bul.Row: [B][COLOR="blue"]sütun = [/COLOR][/B]bul.Column:[B][COLOR="blue"] adres = [/COLOR][/B]bul.Address(0, 0)
    End If[/FONT]

Ayrıca kodlarınızdaki hücre başvurularında;
-- To Cells(2, Columns.Co.../ yıl=Left(Cells(2, trh...
gibi satırlarda ilgili hücrenin hangi sayfaya ait olduğunu
-- To Sheets("VeriTabanı").Cells(2, Columns.Co... / yıl=Left(Sheets("VeriTabanı").Cells(2, trh...
gibi sayfa adlarını belirtmeniz yerinde olur.

Teşekkür ederim.

Şöyle birşey yaptım ancak trh döngüsünün ikinci kısmında "run time error 13 type mismatch" hatası aldım.

Kod:
Sub deneme()
Dim bul As Range

For trh = 2 To Worksheets("VeriTabanı").Cells(2, Columns.Count).End(xlToLeft).Column

yıl = Left(Worksheets("VeriTabanı").Cells(2, trh), 4)
ay = Right(Worksheets("VeriTabanı").Cells(2, trh), 1)
If ay = 2 Then ayy = "12"
If ay = 9 Then ayy = "09"
If ay = 6 Then ayy = "06"
If ay = 3 Then ayy = "03"

For gün = 31 To 18 Step -1

Set bul = Worksheets("data").Range("b:b").Find(CDate(gün & "." & ayy & "." & yıl))

If Not bul Is Nothing Then
Cells(176, trh) = gün & "." & ayy & "." & yıl
satır = bul.Row
Exit For
End If

Next gün

Next trh

End Sub

İyi çalışmalar.
 
If Not bul Is Nothing Then bir etki yaratmıyor.

ilk seferde işlemi yapıyor ancak ikinci seferde hem if çalışmıyor hemde anladığım kadarıyla type mismatch benzeri bir sorun meydana geliyor.

3 gündür ekrana bakıyorum :)

Teşekkürler.
 
selam,
sanıyorum,
çeyrek dönemlere karşılık gelen son tarihlerin data sayfasında karşılık olan satır numaralarını bulmak ve sonuç olarak da data sayfasındaki karşılık gelen verileri listelemek istiyorsunuz...
Dikkat edilecek noktalar
1 - 31.09 ya da 31.06 olarak tarihler yok. bu şekilde yazdığınızda metin olacaktır.
2 - diyelim ki 30.06.2012 yi arattırıyorsunuz. Data sayfasında böyle bir tarih yok. Çeyrek dönem bu tarihte bittiğine göre bir sonraki tarih olan 02.07.2012 tarihini bulmanız ve bu durumda KAÇINCI fonksiyonunu kullanmak gerekir diye düşünüyorum
Çeyrek dönemler , bunlara ait son tarihler, data sayfasındaki karşılık gelen tarihler ve bu tarihlerin data sayfasındaki satır numaraları ile data sayfasının listelenmesine yönelik olarak aşağıdaki kodları kullanarak hazırlanmış dosya ektedir. İnşallah yanlış anlamıyorumdur..

Kod:
Sub liste()
Dim sonC As Long, sv As Worksheet, sl As Worksheet
Set sv = Sheets("VeriTabanı")
Set sl = Sheets("Liste")
Application.ScreenUpdating = False
sv.Select
sonC = Cells(2, 256).End(xlToLeft).Column
sl.Select
sl.Range("a2:M" & sonC).ClearContents
    With sl.Range("a2:a" & sonC - 1)
        .Formula = "=INDEX(VeriTabanı!$2:$2,1,ROW())"
        .Value = .Value
    End With
    With sl.Range("B2:B" & sonC - 1)
        .Formula = "=EOMONTH(DATE(LEFT(A2,4)*1,IF(RIGHT(A2,1)*1=2,12,RIGHT(A2,1)*1),1),0)"
        .Value = .Value
    End With
    With sl.Range("c2:c" & sonC - 1)
        .Formula = "=MATCH(B2,data!B:B,-1)"
        .Value = .Value
    End With
    With sl.Range("d2:m" & sonC - 1)
        .Formula = "=INDEX(data!B:B,$C2)"
        .Value = .Value
    End With
[a1].Select
Application.ScreenUpdating = True
End Sub

link : http://s9.dosya.tc/server/w6guld/Adel_Kalemcilik__ADEL__ddd.rar.html
 
Çok teşekkür ederim üstat yapmak istediğimi anlamışsınız. Kendime göre uyarladım :)
 
rica ediyorum...
yanlış anlamadığıma sevindim.
size kolaylar gelsin..
 
Geri
Üst