• DİKKAT

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

Makro ile hücreye formül yazdırma

  • Konbuyu başlatan Konbuyu başlatan emsey
  • Başlangıç tarihi Başlangıç tarihi
Katılım
18 Mart 2007
Mesajlar
171
Excel Vers. ve Dili
OFFICE 2016
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))"
 
SUMIFS yerine SUMPRODUCT işlevini kullanın.
 
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
 
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.
 
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
 
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.
 
Geri
Üst