• DİKKAT

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

Dizi İçinde Değer Aratma

Katılım
11 Kasım 2006
Mesajlar
79
Excel Vers. ve Dili
excel 2013, Türkçe
Merhaba,
belirli bir şartta oluşturduğum diziden istediğim bir elemanı aramak için aşağıdaki gibi bir kod oluşturdum. ancak countif kısmında hata veriyor. hatanın neredeki yanlışlıktan kaynaklandığını bulabilir misiniz? teşekkür ederim.

Kod:
Sub Makro1()

t1 = Cells(6, 2) '01.10.2012 şeklinde tarih değeri çeriyor
t2 = Cells(7, 2) '08.10.2012 şeklinde tarih değeri çeriyor
syc = 2
Dim dizi(30) As Integer
Dim tt As Date

For tt = t1 To t2
    If WorksheetFunction.Weekday(tt, 2) < 6 Then
        dizi(syc - 2) = Day(tt)
    End If
        syc = syc + 1
Next

    For i = 1 To 31
        a = WorksheetFunction.CountIf(dizi, (i))
        Cells(21, i + 1) = a
            If a = 1 Then
                Range(Cells(15, i + 1), Cells(20, i + 1)).Select
            End If
    Next

End Sub
 
merhaba bildiğim kadarı ile Dizi için Countif komutunu kullanamassınız bunu döngü ile yapmanız gerekebilir.
 
selam,
aşağıdaki gibi bir çözüm işinize yararmı
------------------------------------------------------------------------------------------

Sub Makro1()
Dim dizi()
Dim tt As Date
Dim t1, t2, syc, i, a


t1 = #9/1/2012# 'şeklinde tarih değeri çeriyor
t2 = #10/11/2012# 'şeklinde tarih değeri çeriyor

ReDim dizi(t2 - t1)


syc = 2


For tt = t1 To t2
If WorksheetFunction.Weekday(tt, 2) < 6 Then
dizi(syc - 2) = Day(tt)
syc = syc + 1
End If

Next

Cells.Clear
[A1].Resize(1, UBound(dizi)).Value = dizi

For i = 1 To 31
a = WorksheetFunction.CountIf(Rows(1), (i))
Cells(21, i + 1) = a
If a = 1 Then
Range(Cells(15, i + 1), Cells(20, i + 1)).Select
End If
Next

Rows(1).Delete
End Sub
 
Aşağıdaki linkide incelemenizi öneririm.

http://www.excel.web.tr/f48/vlookup-fonsiyonunda-array-dizi-kullanymy-t24093.html

Ayrıca temel amacınız sadece sayısını bulmak ise aşağıdaki gibide yapabilirsiniz.

Kod:
.
.
For i = 1 To 31
        [B][COLOR=red]a = UBound(Filter(dizi, i))+1[/COLOR][/B]
        Cells(21, i + 1) = a
            If a = 1 Then
                Range(Cells(15, i + 1), Cells(20, i + 1)).Select
            End If
    Next
.
.

Not: Merak eden üyelerimiz olursa dizi içinde süzme yada arama işlemlerinin yapıldığı "filter" fonksiyonu hakkında da bir bilgilendirme notu yazmaya çalışırım.
 
Çok teşekkür ederim. iki tavsiyeden de faydalandım. ufak tefek değişikliklerle gayet güzel bir kod oldu. sağolun...
 
Aşağıdaki linkide incelemenizi öneririm.

Not: Merak eden üyelerimiz olursa dizi içinde süzme yada arama işlemlerinin yapıldığı "filter" fonksiyonu hakkında da bir bilgilendirme notu yazmaya çalışırım.


Levent bey çok seviniriz ilave olarak Filter komutu aramalarda tam eşleşme yapmıyor mesela 123 aradığınızda 12345'ide buluyor
bununla ilgili çözüm önerilerinde yer verirseniz daha çok seviniriz :)
saygılarımla
 
ilave olarak Filter komutu aramalarda tam eşleşme yapmıyor mesela 123 aradığınızda 12345'ide buluyor
bununla ilgili çözüm önerilerinde yer verirseniz daha çok seviniriz :)

Bunu hatırlatmanız çok iyi oldu. Filter fonksiyonu içinde böyle bir parametre mevcut değil. Daha pratik bir çözümü varmı bilmiyorum ama aşağıdaki gibi, dizideki elemanlara farklı karakterler ekleyerek herbiri, birbirini içermeyen elemanlara dönüştürüldükten sonra arama yapılması prensibi ile çözüm bulunabilir.

Kod:
.
.
For i = 1 To 31
        [B][COLOR=red]a =[/COLOR][COLOR=red]UBound(Filter(Split("!" & Join(dizi, "!,!") & "!", ","), "!" & i & "!"))+1       [/COLOR][/B]
 Cells(21, i + 1) = a
            If a = 1 Then
                Range(Cells(15, i + 1), Cells(20, i + 1)).Select
            End If
    Next
.
.
 
Geri
Üst