• DİKKAT

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

çoklu eğer formülü yerine yazılan makro

Katılım
28 Mart 2016
Mesajlar
23
Excel Vers. ve Dili
ms 2010
visual basic
Merhaba

Altta ki makroyu dosyamda kullandığımda sayısal değer gelmesi gereken

1,2,3,4,5,6,7,8,10,11,12,12,16,17,1819,20,23,24,25,26,27 parametreli değerlere veri gelmiyor.

kurgu;

1,2,3,4,5,6,7,8,10,11,12,12,16,17,1819,20,23,24,25,26,27 parametreli değerlere veriler gelecek. bu çalışmıyor

9,14,,15,22 parametreli değerlere "-" gelecek bu çalışıyor.

eğer veri bulamazsa değer bulunamadı yazacak.

Örnek Dosya altta ki linkte makroda alttadır.

Yardımcı olabilirmisiniz


http://dosya.web.tr/RzoXWW


Sub BUL_BRN()
Set s = Sheets("RAPOR")
Set e = Sheets("EYLÜL_2017")
brn2 = Array(1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 16, _
17, 18, 19, 20, 21, 23, 24, 25, 26, 27)
brn3 = Array(13, 6, 7, 55, 9, 10, 17, 18, 19, 21, 26, 27, _
23, 22, 29, 30, 31, 32, 33, 34, 35, 36, 37)
For sat = 8 To 37
If s.Cells(sat, "C") = "" Then GoTo 10
If s.Cells(sat, "C") = 9 Or s.Cells(sat, "C") = 14 Or _
s.Cells(sat, "C") = 15 Or s.Cells(sat, "C") = 22 Then
s.Cells(sat, "F") = "-"
ElseIf WorksheetFunction.CountIf(e.[E:E], s.[B1] & s.[B2]) = 0 Then
s.Cells(sat, "F") = "DEĞER BULUNAMADI"
Else
esat = WorksheetFunction.Match(s.[B1] & s.[B2], e.[E:E], 0)
esut = WorksheetFunction.Lookup(s.Cells(sat, "C"), brn2, brn3)
s.Cells(sat, "F") = Sheets("EYLÜL_2017").Cells(esat, esut)
End If
10: Next
End Sub
 
Kullandığınız prosedürün içindeki countif ve match fonksiyonlarında bulunan

Kod:
s.[B1] & s.[B2]

birleştirmesini aşağıdaki gibi değiştirin.

Kod:
[B][COLOR="Blue"]CLng([/COLOR][/B]s.[B1][B][COLOR="blue"])[/COLOR][/B] & s.[B2]
 
Merhaba.

Açtığınız bir önceki konuda sayfasındaki örnek belgeyi fark etmediğim için sorunuz nihayete erememiş.

Bu konu sayfasındaki duruma gelince (önceki konu sayfasında verdiğim kod'daki sorun) bir ilave de ben yapayım.
Hata, ilgili soruyu örnek belge olmadan sormanızdan kaynaklanıyor.

Sayın MENTEŞOĞLU'nun cevabına ek olmak üzere bir düzeltme daha yapmanız lazım.

RAPOR sayfası C sütunundaki formüllerin bir kısmı #YOK hatası vermiş.

Bu nedenle;
-- ya kod'da yer alan For sat = 8 To 37 satırından hemen sonra aşağıdaki mavi satırı eklemelisiniz,
-- ya da belirttiğim formüllerin hata vermesini engellemek için C8 hücresindeki formülü aşağıdaki
kırmızı formül ile değiştirip, aşağı doğru bu formülü kopyalamalısınız.
.
Kod:
[COLOR="Blue"]If IsError(s.Cells(sat, "C")) = True Then GoTo 10[/COLOR]
[COLOR="Red"]=EĞER(EĞERSAY('ÜRÜN AĞACI'!E:E;($B$3&A8))=0;"";DÜŞEYARA(($B$3&A8);'ÜRÜN AĞACI'!E:M;9;0))[/COLOR]
 
Tekrar merhaba.

Yanlış veri derken yanlışlığın ne olduğunu, sütun adı belirterek .... sütunundaki veri gelmesi gerekirken
..... sütunundaki veri geliyor gibi net ifade etseydiniz daha çabuk sonuca ulaşılırdı.

Kod'da, hangi sütundaki verinin getirileceği, aşağıdaki kod satırı ile, iki dizi arasındaki ilişkiye göre belirleniyor.
Array parantezi içerisindeki sayılar sütun numaralarıdır.
Aranan veri birinci dizinin (brn2 dizisi) kaçıncı elemanı ise, ikinci dizinin (brn3 adlı dizi)
o numaralı elemanı çağrılacak bilginin sütun numarası oluyor.
Kod:
esut = WorksheetFunction.Lookup(s.Cells(sat, "C"), [B][COLOR="Blue"]brn2[/COLOR][/B], [B][COLOR="Red"]brn3[/COLOR][/B])
Sonuç olarak;

► Koddaki ilgili kısmı aşağıdakiyle değiştirin,
(Fark edeceğiniz gibi, önceki kod'daki sayılarla aşağıdakiler arasında 4 fark var.
Örnek belge olmadan kod oluşturulduğu için;
önceki cevapta sütun numaralarını tespit ederken A sütunundan itibaren değil,
E sütunundan itibaren kaç sütun sağa gidilmesi gerektiğini düşünmüşüm demekki
)

► Ayrıca C sütununa uyguladığınız =EĞERHATA(DÜŞEYARA....;" ") formülün en sonundaki
ÇİFT TIRNAKların arasındaki BOŞLUK karakterini silin.
.
Kod:
[B][COLOR="Red"][SIZE="4"]brn3[/SIZE][/COLOR][/B] = Array(17, 10, 11, 59, 13, 14, 21, 22, 23, 25, 30, 31, _
            27, 26, 33, 34, 35, 36, 37, 38, 39, 40, 41)
 
Geri
Üst