• DİKKAT

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

Makroda Kullanmaya Çalıştığım FORMÜLde SORUN

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,986
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Herkese merhabalar !...

Excel sayfamda; I3 hücresine aşağıdaki formülü (DİZİ FORMÜL OLARAK) uyguladım, sonra da aşağı doğru çoğalttım ve sonuç aldım.
{=EĞER(YADA(G3=1;G3="");0;DOLAYLI("J"&KÜÇÜK(EĞER($A2:A$3=A3;SATIR($A2:A$3));EĞERSAY($A2:A$3;A3))))}

Bu formülden maksadım;
Formülün bulunduğu satırda G sütununda 1'den farklı bir değer varsa, aynı satırda A sütunundaki değeri önceki satırlarda ara bulduğun son eşleşmenin karşısında " J " sütunundaki karşılığını yazmak.

Excel sayfamı formüllerden arındırmaya çalışıyorum. Bu yüzden yukarıdaki formülü " I " sütununa kodlarla uygulamak için kod bölümünde;
Sheets("üretim2").Range("I3:I" & son - 1) = "IF(OR(G3=1,G3=""),0,INDIRECT(""J""&SMALL(IF($A2:A$3=A3,ROW($A2:A$3)),COUNTIF($A2:A$3;A3)))"
Sheets("üretim2").Range("I3:I" & son).Value = Sheets("üretim2").Range("I3:I" & son).Value

yazdığımda sorun yaşadım ve siteye baktığımda dizi formülleri için EVALUATE kodunun kullanılacağını görünce kod sayfasındaki satırı;
Sheets("üretim2").Range("I3:I" & son - 1) = EVALUATE("IF(OR(G3=1,G3=""),0,INDIRECT(""J""&SMALL(IF($A2:A$3=A3,ROW($A2:A$3)),COUNTIF($A2:A$3;A3)))")
Sheets("üretim2").Range("I3:I" & son).Value = Sheets("üretim2").Range("I3:I" & son).Value
şeklinde değiştirdim.

Aldığım sonuç tüm sütun için #DEĞER!

Yukarıda bahsettiğim dizi formülünü I sütununa kodlarla uygulamak için ne yapmalıyım.

İlgilenenlere teşekkürler.
 
Son düzenleme:
Merhaba,

Aşağıdaki yapıyı kullanabilirsiniz. Kendi dosyanıza göre düzenlersiniz.

Kod:
Sub Makro1()
    Son = 5000
    With Sheets("üretim2").Range("I3:I" & Son)
        .FormulaArray =  "=IF(OR(RC[-2]=1,RC[-2]=""""),0,INDIRECT(""J""&SMALL(IF(R2C1:R[-1]C[-8]=RC[-8],ROW(R2C1:R[-1]C[-8])),COUNTIF(R2C1:R[-1]C[-8],RC[-8]))))"
        .Value = .Value
    End With
End Sub
 
Teşekkür ve bir RİCA.

Merhaba,

Aşağıdaki yapıyı kullanabilirsiniz. Kendi dosyanıza göre düzenlersiniz.

Kod:
Sub Makro1()
    Son = 5000
    With Sheets("üretim2").Range("I3:I" & Son)
        .FormulaArray = "=IF(OR(G3=1,G3=""""),0,INDIRECT(""J""&SMALL(IF(A$2:A3=A3,ROW(A$2:A3)),COUNTIF(A$2:A3,A3))))"
        .Value = .Value
    End With
End Sub
Korhan Bey teşekkürler, ancak gerek mevcut makronun içine ekleyerek, gerek ayrı bir makro olarak kaydedip kodların sonuna "Call" deyip çağırarak ve gerekse de kendi makrom çalışmasını bitirdikten sonra bu makroyu el ile çalıştırarak uygulamaya çalıştım ama sonuç alamadım maalesef.

Tüm sütuna 0 değeri geliyor. Dizi formülü olup olmamayla ilgili olabilir mi acaba?
 
Son düzenleme:
Merhaba,

Örnek dosyanız olmadığı için deneme şansım olmadı. Bu sebeple nasıl sonuç üreteceğini bilemiyorum. Önerdiğim koddaki "$" işaretlerinin yerlerini kontrol edip tekrar deneyin.
 
Korhan Bey merhabalar, kusura bakmayınız lütfen.

......ancak gerek mevcut makronun içine ekleyerek, gerek ayrı bir makro olarak kaydedip kodların sonuna "Call" deyip çağırarak ve gerekse de kendi makrom çalışmasını bitirdikten sonra bu makroyu el ile çalıştırarak uygulamaya çalıştım ama sonuç alamadım maalesef.

Tüm sütuna 0 değeri geliyor. Dizi formülü olup olmamayla ilgili olabilir mi acaba?

Merhabalar Korhan Bey !...

Dün siz soruma cevap verince denemelerimi yaptım ama başarılı olamadım ve sonuç alamadığımı sayfaya yukarıdaki şekilde yazdım ki, beklentim yeni bir fikir verebileceğiniz şeklindeydi.
Ancak sanırım sitede değildiniz ve ben de biraz acil halletmem gerektiğinden diğer konuyu açmıştım. Ama maalesef o konuya da sizden başka ilgi gösteren olmadı.

Neticede amatörce bir çözüm olarak aşağıdaki gibi yaptım.
Kod:
[I3].FormulaArray = _
 "=IF(OR(RC[-2]=1,RC[-2]=""""),0,INDIRECT(""J""&SMALL(IF(R2C1:R[-1]C[-8]=RC[-8],ROW(R2C1:R[-1]C[-8])),COUNTIF(R2C1:R[-1]C[-8],RC[-8]))))"
    Range("I3").Copy
    Range("I4:I1002").Select
    ActiveSheet.Paste
    Range("I3:I1002").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False

Belki daha kısa yolu vardır ama elimden gelen bu oldu.
Şayet daha pratik bir öneriniz olursa sevinirim.


Açtığım diğer konuyu, (linki aşağıda) kapatmanızı rica ediyorum.

http://www.excel.web.tr/f48/makroda-d-z-form-l-nasyl-yazylyr-t127591.html

İyi günler dilerim.
 
Merhaba,

Son mesajınızdaki formül kısmı doğru sonucu üretiyor sanırım. Bu formülü alıp #2 nolu mesajıma uyguladım. Kodun son halini deneyiniz.
 
::.. Çözüm Bulunmuştur ..::

Merhaba,
Son mesajınızdaki formül kısmı doğru sonucu üretiyor sanırım.
Bu formülü alıp #2 nolu mesajıma uyguladım.
Kodun son halini deneyiniz.

Sayın AYHAN destek için teşekkürler.

Konu halledilmiştir.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Geri
Üst