• DİKKAT

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

makro ile formül girilen hücreler

Katılım
6 Mayıs 2014
Mesajlar
264
Excel Vers. ve Dili
office 365
Merhabalar;
Ömer Bara Bey ile Korhan Ayhan Bey'in forumdaki cevaplarında yararlanarak şöyle bir makro uyguladım tabloma.

Private Sub Worksheet_Activate()
Range("Q8:DL").FormulaR1C1 = _
"=IF(AND(COUNTIF(RC2:RC6,R1C),COUNTIF(RC2:RC6,R2C),COUNTIF(RC2:RC6,R3C)),RC1,"""")"
End Sub

ancak makroyu uyguladığım hücrelere formül geliyor bu normal mi acaba
 
Merhaba,
Evet, normaldir, çünkü siz bu hücrelere formül yazılma komutunu vermişsiniz.
Eğer formül olmasını istemiyorsanız aşağıdaki kodu End Sub dan önceki satıra ilave ederseniz formül sonucu değere dönüşür.
Kod:
Range("Q8:DL8").Value = Range("Q8:DL8").Value
 
Dosyanızda veri olan satır sayısı fazla ise ve formül uygulanacak alan fazla ise yavaşlama yaşayabilirsiniz.

Bu tarz dosyalarda formül uygula değere çevir yöntemi uygulanarak çalışmalarınıza hız kazandırabilirsiniz.
 
Korhan Bey forumda sizin bahsettiğiniz şöyle bir formülünüz var :
Private Sub Worksheet_Activate()
With Range("B2:B" & Cells(Rows.Count, 1).End(3).Row)
.Formula = "=SUMIF(Veri!A:A,A2,Veri!E:E)"
.Value = .Value
End With
End Sub

Bu makronuza benim uzun formüllerimi yazmak biraz zor geldi. Bir de
";" yerine "," yazarak formülü hiç değiştirmeden biraz daha uzun bir formülümü sizin makronuza uyarladım ama sonuç vermeyince sorumdaki makroya yöneldim. Sayfamda satır ve sütun sayısı çok.Birçok sütunda da formül olduğu için tekrar denemekte fayda var. Çünkü excel kitapçığı çalışılmayacak kadar yavaş
 
formülü uygula değere çevir yönteminde makroya formülü kolayca uygulamanın bir yolu var mı. uzun formülleri çevirmek zor oluyor.birçoğu da uyguladıktan sonra hata veriyor
 
Kod içindeki aşağıdaki bölümü;

Kod:
.Formula =

Aşağıdaki gibi kullanabilirsiniz.

Kod:
.FormulaLocal =

Bu şekilde kullandığınız dile göre formül yazabilirsiniz.

Eğer sonuç alamazsanız kullandığınız formülleri foruma ekleyip destek isteyebilirsiniz.
 
Sayın Korhan,
uyguladım ama bir yerde yanlış yapıyorum. şu formülü örnek olarak verebilirim

Private Sub Worksheet_Activate()
With Range("K8:K" & Cells(Rows.Count, 1).End(3).Row)
.FormulaLocal = "=SUMPRODUCT(((($B8:$F8)/2)<>NSAT(($B8:$F8)/2))*($B8:$F8<>""))"
.Value = .Value
End With
End Sub
 
aslında makroya eklediğim formülde nereleri değiştirmem gerektiğini bilsem yaparım herhalde
mesela siz makroya yazdığınız
"=SUM(Veri!A:A,A2,Veri!E:E)"
kısımda fonksiyon adını ingilizceye çevirip ";" işaretini de "," olarak değiştirmişsiniz. Ben de diğer formülleri aynı şekilde değiştiriyorum ancak bu işe yaramıyor. Fomülü makroya aynen uygularken dikkat etmem gereken yerleri bilmiyorum
 
Bu formüllerin makro içinde kullanılması olayında tırnak işaretleri başta olmak üzere birçok problem oluşabiliyor. Zamanla çıkan problemlere ve çözüm yollarına aşina olacaksınız. Formülü aşağıdaki gibi deneyiniz...
Kod:
.Formula[COLOR="red"]Local[/COLOR] = "=[COLOR="red"]TOPLA.ÇARPIM[/COLOR](((($B8:$F8)/2)<>NSAT(($B8:$F8)/2))*($B8:$F8<>[COLOR="Red"]""""[/COLOR]))"
 
sayın Mucit sanırım benim sorunum başka bir sebepten kaynaklanıyor. çünkü ben bu önerinizi de denemiştim. "ambiguous name detected worksheet_activate" hatası alıyorum. aynı isimli kodları kullanmaktan bu kodların birleştirilmesinden bahseden bir yorum okudum. bunu araştırıp düzeltmeye deneyeceğim
 
Dediğiniz gibi tırnak işareti problemi ile karşılaştım. çift tırnak şeklinde değiştirerek sorunu çözdüm. Ancak başka problemler de çıkıyor. Mesela dizin formüllerini aktarırken çıkan problemi çözemedim. ya da

=EĞER(VE(EĞERSAY($B8:$F8;R$1);EĞERSAY($B8:$F8;R$2);EĞERSAY($B8:$F8;R$3));$A8;"")
şeklindeki formülü

With Range("R8:R" & Cells(Rows.Count, 1).End(3).Row)
.FormulaLocal = "=EĞER(VE(EĞERSAY($B8:$F8;R$1);EĞERSAY($B8:$F8;R$2);EĞERSAY($B8:$F8;R$3));$A8;"")"
.Value = .Value
End With

R sütununda çalışacak şekilde yazdım. R sütunu dışında birkaç sütunda daha çalışması için kodun With Range("R8:R" kısmını With Range("R8:T" şeklinde değiştirdiğimde çalışmıyor
 
Ambiguous name detected hatası sizin de farkettiğiniz gibi aynı isimle iki farklı makro kodu olduğu zaman ortaya çıkar. Sayfanızda birden fazla worksheet_activate kodu kullanmışsınız demek ki...
Sadece bir tane kullanabilirsiniz.

Dizi formülleri için .FormulaLocal yerine .FormulaArray kullanmalısınız.
Formülü aktarırken de son kısmı aşağıdaki gibi düzeltiniz.
Kod:
"=EĞER(VE(EĞERSAY($B8:$F8;R$1);EĞERSAY($B8:$F8;R$2 );EĞERSAY($B8:$F8;R$3));$A8;[COLOR="Red"]""""[/COLOR])"
Son sorunuz için bir şey söyleyemeyeceğim, tam olarak anlamadım... Çalışmayan kısmı nedir? Ne yapmasını bekliyorsunuz?
 
With Range("R8:R" & Cells(Rows.Count, 1).End(3).Row)
.FormulaLocal = "=EĞER(EĞERSAY($B8:$F8;R$1);$A8;"""")"
.Value = .Value
End With


Son sorumda demek istediğim şuydu. Yukarıdaki kodda yer alan formül R1 deki değeri B8:F8 arasında sayıp R sütununa yazıyor. Aynı formülün benzerleri sağdaki diğer sütunlarda da var. Örneğin

=EĞER(EĞERSAY($B8:$F8;S$1);$A8;"""")
=EĞER(EĞERSAY($B8:$F8;T$1);$A8;"""")
şeklinde.

Öğrenmek istediğim en baştaki makroyu R sütunu dışında diğer sütunları kapsayacak şekilde genişletmek mümkün müdür.Formülün de ona göre R1 yerine S1,T1.. gibi hücreleri sayarak değişmesi lazım. Yani burada amaç kodu her sütun için tek tek modüle eklemek değil, bir defada ilgili bütün sütunlar için çalışır hale getirmek. ben makroda ki hedef kısmını With Range("R8:Z" şeklinde değiştirip denedim ancak olmadı. Umarım anlatabilmişimdir.
 
Son düzenleme:
Kod:
.Value = .Value
Koddaki bu kısmı silip oluşan formüle bakar mısınız? Zaten bahsettiğiniz şekilde sütuna göre değişiyor. Ancak anladığım kadarıyla sizin kurduğunuz formül mantığı ile yapmak istediğiniz biraz farklı gibi...
R1 deki değeri B8:F8 arasında sayıp R sütununa yazıyor
demişsiniz, ancak formülünüz R1'deki değer B8:F8 arasında var ise A8'deki değeri yazıyor.
 
Geri
Üst