Makro ile hücreye formül yazdırma

Katılım
18 Mart 2007
Mesajlar
171
Excel Vers. ve Dili
OFFICE 2016
Altın Üyelik Bitiş Tarihi
02-03-2024
Sevgili arkadaşlar,
Makro ile D3 ve E3 hücresine kapalı olan excelden hesaplama yapan aşağıdaki formülü yazdırıyorum. Satislar.xlsx dosyası açık olduğunda formüller çalışıyor ama kapalı olduğunda çalışmıyor. Ben satislar xlsx açık olmadığında bu formüleleri hücreye yazdırıp çalışmasını nasıl sağlayabilirim. Yapmak istediğim kapalı olan satislar.xlsx sayfasından çokektopla formülü ile a1 hücresindeki tarih, ve a3 hücresindeki ürün koduna göre karşılığında miktar ve tutarları getireceğim ancak bunu makro ile yapacağım. Değerli yardımlarınız için şimdiden teşekkür ederim.

Range("D3").Formula = "=IF(SUMIFS([Satislar.xlsx]DB!$D:$D,[Satislar.xlsx]DB!$A:$A,$A$1,[Satislar.xlsx]DB!$B:$B,A3)=0,"""",SUMIFS([Satislar.xlsx]DB!$D:$D,[Satislar.xlsx]DB!$A:$A,$A$1,[Satislar.xlsx]DB!$B:$B,A3))"
Range("E3").Formula = "=IF(SUMIFS([Satislar.xlsx]DB!$G:$G,[Satislar.xlsx]DB!$A:$A,$A$1,[Satislar.xlsx]DB!$B:$B,A3)=0,0,SUMIFS([Satislar.xlsx]DB!$G:$G,[Satislar.xlsx]DB!$A:$A,$A$1,[Satislar.xlsx]DB!$B:$B,A3))"
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
SUMIFS yerine SUMPRODUCT işlevini kullanın.
 
Katılım
18 Mart 2007
Mesajlar
171
Excel Vers. ve Dili
OFFICE 2016
Altın Üyelik Bitiş Tarihi
02-03-2024
SUMIFS yerine SUMPRODUCT işlevini kullanın.
Levent üstad, sumproduct oldu cevap için çok teşekkür ederim artık satışlar dosyası açık olmadan da çalışıyor çok teşekkür ederim. Yalnız excel hesaplama çok uzun sürüyor. Bende makro başına Application.Calculation = xlCalculationManual yazıp makro sonunda Automatic yapmayı denedim ancak formülleri aşağıaki filldown ile 566. satıra kadar çoğaltıp sonra değer olarak kalmasını istiyorum fakat makro başında hesaplamayı manuele çevirince hesaplama olmadığı için bütün satırlara ilk satırdaki değerleri atıyor yani formül çalışmıyor. calculationmanueli iptal edince hesaplama çok uzun sürüyor. Bunun farklı bir yöntemi var mıdır?
With Range("D3:F566")
.FillDown
.Value = .Value
End With
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,193
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Formülde ki başvuru alanlarını daraltmayi deneyiniz.

A:A yerine A1:A1000 gibi daha az satırı baz alın. Böylece hesaplama bir nebze olsun hizlanacaktır.

Bunun dışında kapalı dosyalar için ADO yöntemini deneyebilirsiniz. En hızlı sorgulama tekniklerinden biridir.
 
Katılım
18 Mart 2007
Mesajlar
171
Excel Vers. ve Dili
OFFICE 2016
Altın Üyelik Bitiş Tarihi
02-03-2024
Formülde ki başvuru alanlarını daraltmayi deneyiniz.

A:A yerine A1:A1000 gibi daha az satırı baz alın. Böylece hesaplama bir nebze olsun hizlanacaktır.

Bunun dışında kapalı dosyalar için ADO yöntemini deneyebilirsiniz. En hızlı sorgulama tekniklerinden biridir.
Korhan üstad, alanı daralttım 100bin yaptım ama çok etkilemedi, daha 19 şubattayız 50.000 satır veri olduğu için A:A yaptım ama timer fonksiyonu ile ölçtüm çok fazla etkilemedi. ADO yöntemiyle veriyi excelde tmp adında bir sheete çekip oradan sumproduct yada sumifs yapayım diyorum ama tekrar aynı 50bin satırı tmp adında bir sayfaya çekmek ile dışarıda hazır var onun içinden çoketopla arasında hız anlamında fark olur mu bilemedim. ado ile gruplayarak veri çekmeyi, 50bin satır içinden belirli tarihe göre, belirli ürünidleri ile gruplayıp sanki pivot tablo oluşturuyormuşum gibi yapabilsem olur aslında ama o derece yapamıyorum
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,193
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
ADO ile formülle yapmak istediğiniz işlemin sonucunu dosyanıza aktaracaksınız. Bütün veriyi aktarmanız zaten anlamsız olacaktır.

ADO zaten yapısı gereği kapalı dosyalar üzerinde işlem yapmaktadır ve oldukça hızlıdır. Forumda bolca örnek var. Arama yaparsanız ulaşabilirsiniz. Dosya erişimi için altın üyelik yapmanız gerekecektir. Hatırlatmak isterim.
 
Üst