• DİKKAT

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

kombinasyonları listelemek en yakın değer hatası

Katılım
1 Haziran 2009
Mesajlar
152
Excel Vers. ve Dili
excel 2003 ve türkçe
merhaba arkadaslar

ekteki kombinasyonları listeleyen dosyada en yakın değer hesaplamasında hatra veriyor. vba ve kod konusunda yeniyim hatayı anlatabilir misiniz?
teşekkür ederim
 

Ekli dosyalar

Selamlar,

Kod birebir arama yapmadığı için hata veriyor. İki ekleme yaparak kodu çalışır hale getirdim. Aşağıdaki şekilde denermisiniz.

Kod:
Sub HANGİ_KOMBİNASYONLAR_ARANAN_DEĞERİ_VERİYOR()
    Application.Calculation = xlCalculationManual
    Sheets("RAPOR").Select
    [A2:B65536].ClearContents
    ARANAN = Sheets("VERİ").[B2]
    SATIR = 2
    For X = 3 To Sheets.Count
    Set BUL = Sheets(X).Cells.Find(ARANAN, , , xlWhole)
    If Not BUL Is Nothing Then
    ADRES = BUL.Address
    Do
    ARANAN_SATIR = BUL.Row
    ARANAN_SÜTUN = BUL.Column
    Cells(SATIR, 1) = Sheets(X).Cells(ARANAN_SATIR, ARANAN_SÜTUN - 1)
    Cells(SATIR, 2) = ARANAN
    SATIR = SATIR + 1
    Set BUL = Sheets(X).Cells.FindNext(BUL)
    Loop While Not BUL Is Nothing And BUL.Address <> ADRES
    End If
    Next
    EN_YAKIN_1 = Evaluate("=MAX(IF('1'!B2:IV65536<VERİ!B2,'1'!B2:IV65536))")
    EN_YAKIN_2 = Evaluate("=MAX(IF('2'!B2:IV65536<VERİ!B2,'2'!B2:IV65536))")
    EN_YAKIN_3 = Evaluate("=MAX(IF('3'!B2:IV65536<VERİ!B2,'3'!B2:IV65536))")
    EN_YAKIN_4 = Evaluate("=MAX(IF('4'!B2:IV65536<VERİ!B2,'4'!B2:IV65536))")
    EN_YAKIN_5 = Evaluate("=MAX(IF('5'!B2:IV65536<VERİ!B2,'5'!B2:IV65536))")
    EN_YAKIN_6 = Evaluate("=MAX(IF('6'!B2:IV65536<VERİ!B2,'6'!B2:IV65536))")
    EN_YAKIN_7 = Evaluate("=MAX(IF('7'!B2:IV65536<VERİ!B2,'7'!B2:IV65536))")
    EN_YAKIN_8 = Evaluate("=MAX(IF('8'!B2:IV65536<VERİ!B2,'8'!B2:IV65536))")
    EN_YAKIN_9 = Evaluate("=MAX(IF('9'!B2:IV65536<VERİ!B2,'9'!B2:IV65536))")
    EN_YAKIN_10 = Evaluate("=MAX(IF('10'!B2:IV65536<VERİ!B2,'10'!B2:IV65536))")
    EN_YAKIN_11 = Evaluate("=MAX(IF('11'!B2:IV65536<VERİ!B2,'11'!B2:IV65536))")
    EN_YAKIN_12 = Evaluate("=MAX(IF('12'!B2:IV65536<VERİ!B2,'12'!B2:IV65536))")
    EN_YAKIN_13 = Evaluate("=MAX(IF('13'!B2:IV65536<VERİ!B2,'13'!B2:IV65536))")
    EN_YAKIN_14 = Evaluate("=MAX(IF('14'!B2:IV65536<VERİ!B2,'14'!B2:IV65536))")
    EN_YAKIN_15 = Evaluate("=MAX(IF('15'!B2:IV65536<VERİ!B2,'15'!B2:IV65536))")
    EN_YAKIN_16 = Evaluate("=MAX(IF('16'!B2:IV65536<VERİ!B2,'16'!B2:IV65536))")
    EN_YAKIN_17 = Evaluate("=MAX(IF('17'!B2:IV65536<VERİ!B2,'17'!B2:IV65536))")
    EN_YAKIN_18 = Evaluate("=MAX(IF('18'!B2:IV65536<VERİ!B2,'18'!B2:IV65536))")
    EN_YAKIN_19 = Evaluate("=MAX(IF('19'!B2:IV65536<VERİ!B2,'19'!B2:IV65536))")
    EN_YAKIN_20 = Evaluate("=MAX(IF('20'!B2:IV65536<VERİ!B2,'20'!B2:IV65536))")
    EN_YAKIN = WorksheetFunction.Max(EN_YAKIN_1, EN_YAKIN_2, EN_YAKIN_3, EN_YAKIN_4, EN_YAKIN_5, EN_YAKIN_6, EN_YAKIN_7, EN_YAKIN_8, EN_YAKIN_9, EN_YAKIN_10, EN_YAKIN_11, EN_YAKIN_12, EN_YAKIN_13, EN_YAKIN_14, EN_YAKIN_15, EN_YAKIN_16, EN_YAKIN_17, EN_YAKIN_18, EN_YAKIN_19, EN_YAKIN_20)
    For X = 3 To Sheets.Count
    Set BUL = Sheets(X).Cells.Find(EN_YAKIN, , , xlWhole)
    If Not BUL Is Nothing Then
    ADRES = BUL.Address
    Do
    EN_YAKIN_SATIR = BUL.Row
    EN_YAKIN_SÜTUN = BUL.Column
    Cells(SATIR, 1) = Sheets(X).Cells(EN_YAKIN_SATIR, EN_YAKIN_SÜTUN - 1)
    Cells(SATIR, 2) = EN_YAKIN
    SATIR = SATIR + 1
    Set BUL = Sheets(X).Cells.FindNext(BUL)
    Loop While Not BUL Is Nothing And BUL.Address <> ADRES
    End If
    Next
    Cells.EntireColumn.AutoFit
    Application.Calculation = xlCalculationAutomatic
    MsgBox "Toplam " & [A65536].End(3).Row - 1 & " adet kombinasyon listelenmiştir."
End Sub
 
selam Korhan Bey,

kodu denedim fakat gene calısmadı.

EN_YAKIN_1 = Evaluate("=MAX(IF('1'!B2:IV65536<VERİ!B2,'1'!B2:IV65536))")

bu hesaplamada hata veriyor.
 
Selamlar,

İlk olarak "Kombinasyoları Listele" butonuna basın. Tüm kombinasyonlar listelendikten sonra ikinci butona tıklayın. Bu şekilde yaptığınızda hata almamanız gerekiyor.
 
Korhan Bey,

ekteki örnek dosyada son yazdıgınız kod da eklenmiştir.
bir göz atar mısınız rica etsem?
en yakın değeri getirmiyor
 

Ekli dosyalar

Selamlar,

Dosyadaki kodu denedim.

"8" isimli sayfadaki 6. satırdaki 1346 değerini listeliyor.
 
bende de hata veriyor

verdiği hata resimdedir.
 

Ekli dosyalar

  • hata.JPG
    hata.JPG
    73.8 KB · Görüntüleme: 11
Selamlar,

EVALUATE komutu ile ilgili hata alıyorsunuz. Hangi excel versiyonunu kullanıyor sunuz?

Ayrıca kod içinde EVALUATE geçen satırları aşağdaki şekilde değiştirip deneme yaparmısınız.

Kod:
EN_YAKIN_1 = Application.Evaluate("=MAX(IF('1'!B2:IV65536<VERİ!B2,'1'!B2:IV65536))")
 
Selamlar,

2007 versiyonda neden hata veriyor anlamadım.

Ayrıca üstteki mesajımda önerdiğim değişikliklerden ikinci kod yazım olarak vba ile uyumsuz olduğu için sildim.
 
Korhan bey,

emeginiz icin cok tesekkür ederim.
umarım bir cevap alır ve mantıgını ögreniriz.
tekrar tekrar teşekkürler size.

iyi çalışmalar
 
Selamlar,

Sanırım problemin çözümünü buldum;

2007 versiyonda 65535 ve 65536 sayıları ile ilgili olarak bir problem varmış. Aşağıdaki linkte bazı açıklamalar yapılmış. Örnek bir resimde eklenmiş. Resimdeki hesaplama sonucu 65535 çıkması gerekirken 100000 olarak görünmektedir. Bununda dijit sayılarından kaynaklandığı belirtilmiş.

http://www.dq.winsila.com/tech-news/excel-2007-the-65535-65536-problem.html


Aşağıdaki linkteki fix düzeltme dosyasını sisteminizde çalıştırdıktan sonra makroyu tekrar deneyin.

http://download.microsoft.com/downl...16d6cef4/office-kb943075-fullfile-x86-glb.exe
 
Korhan bey,

çok teşekkür ediyorum. şu an çalışıyor.
emeginize saglık

iyi çalışmalar
 
Korhan Hocam ilginize teşekkür ederim.
Dosyayı çalıştırdıktan sonra bende versiyonla alakalı bir hata verdi. Yani kurulum yapamadım.
Şimdilik 2003 ile devam edeceğiz.
Kolay gelsin.
 
Geri
Üst