Makro ile if yada kullanımı

Katılım
11 Eylül 2011
Mesajlar
114
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
18-03-2020
Arkadaşlar bir hücreye girdiğim formülü aşağıya sürükleyince çok aşırı yer kaplamasından dolayı bunu makro ile yazdırmam mümkün mü ?

Sayfa1 de aşağıda ki formülü C2 ye giriyorum ve aşağıya doğru 100 bin satır çekiyorum buda yavaşma problemi.

=EĞER(YADA(F2=$M$1;G2=$M$1);$M$1;"")

Sayfa2 ise aşağıda ki formül var ve M5'e girip aşağıya sürüklüyorum yine onbinlerce satır

+EĞER(E5="";"";EĞER(YADA(F5="";F5=$P$3);+K5-L5;-L5))
 
Katılım
11 Eylül 2011
Mesajlar
114
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
18-03-2020
Var mı yardımcı olabilecek bir arkadaş ?
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Merhaba.

Verilecek cevapların yeni soru/sorunlar oluşturmaması için;
-- gerçek belgenizle aynı yapıda,
-- kullanılan formüller/makrolar içerisinde ve çalışır durumda
olmak üzere bir örnek belge yüklemenizde yarar var sanırım.
.
 
Katılım
11 Eylül 2011
Mesajlar
114
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
18-03-2020
Dosyada yardımcı olabilecek biri var mı acaba ?
 
Katılım
23 Eylül 2004
Mesajlar
1,754
Excel Vers. ve Dili
Excel 2010 TR
=EĞER(YADA(F2=$M$1;G2=$M$1);$M$1;"")

Yukarıdaki formülü 100000 satıra uygulamak için

For X1 = 2 to 100000

if Cells(X1,6)=Cells(1,13) or Cells(X1,7)=Cells(1,13) then
Cells(formülün yazılı olduğu hücre) = Cells(1,13)
else
Cells(formülün yazılı olduğu hücre)=""
end if

Next X1


=EĞER(E5="";"";EĞER(YADA(F5="";F5=$P$3);+K5-L5;-L5))

Yukarıdaki formülü 100000 satıra uygulamak için
For X1 = 2 to 100000
if Cells(X1,5)="" then
Cells(formülün yazılı olduğu hücre)=""
elseif Cells(X1,6)="" or Cells(X1,6)=Cells(3,16) then
Cells(formülün yazılı olduğu hücre) =Cells(X1,11)-Cells(X1,12)
else
Cells(formülün yazılı olduğu hücre) = Cells(X1,12)*-1
end if
Next X1
 
Katılım
6 Ocak 2017
Mesajlar
33
Excel Vers. ve Dili
Excel 2013, Türkçe
Dosyaya bakamıyorum da ben her zaman vba'da filldown kullanıyorum.

Kod:
Range("C2:C1000").Filldown
 
Katılım
11 Eylül 2011
Mesajlar
114
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
18-03-2020
Hüseyinkis hocam bunu uygulamakta güçlük çekiyorum. Mesela bir makro altına aynen kopyalayıp (formülün yazılı olduğu hücre) yazılan yere benim formül satırım C2 den başlıyor aşağıda ki gibi mi yazmalıyım

Sub Makro1()
For X1 = 2 To 100000

If Cells(X1, 6) = Cells(1, 13) Or Cells(X1, 7) = Cells(1, 13) Then
Cells("c2:c100000") = Cells(1, 13)
Else
Cells("c2:c100000") = ""
End If

Next X1
 
Son düzenleme:

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Merhaba.

Umarım istediğiniz eklediğim belgedeki gibi bir şeydir.
-- Konsolide sayfasında DÜĞME ile,
-- Verik sayfasında ise M1 hücresinden KASA SEÇİMİ'nin değiştirilmesi ile
işlem yapılıyor.
Her iki işlem de ilgili sayfa E sütunundaki son dolu satıra gerçekleştiriliyor.
.
 

Ekli dosyalar

Katılım
11 Eylül 2011
Mesajlar
114
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
18-03-2020
ömer hocam tam olarak istediğim şey buydu. Sadece şu sıkıntıyı çektim. mesela siz (verik) sayfasında süzme ile çekiyorsunuz ya kasayı ben bunu başka sayfadan formül ile getiriyordum. sizin dosyada ben M1 sütunundan kasayı seçince makro devreye giriyor. belki ben orada eksik bir bilgilendirme yaptım. Konsolideye gelince bir makro düğmesine basmadan otomatik hesaplama mümkün mü. konsolide sayfam benim aslında başka sayfalardan filtre yaparak getirdiğim verileri barındırıyor.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Kodu tetikleyecek işlemin ne olduğunu (kod'un tam olarak ne olunca/ne yapılınca çalışıtırılacağını)
net şekilde ifade ederseniz ona göre çözüm bulunur.

Gerçek belgeyle aynı yapıda örnek belge olmasını isteme sebebimiz zaten,
bu tür "yeni soru-yeni cevap", "ya şöyle olursa", "şunu da ilave edebilir miyiz" gibi durumların yaşanmaması.

Eklediğiniz belgede formül filan yok idi.
İsterseniz VERİK sayfasının kod bölümünde olan Worksheet_Change kod blokunu silip,
VERİK sayfasına da bir düğme ekleyip, Modül1'deki FORMUL_VERIK makrosunu bu düğmeye bağlayarak da işlem yaptırabilirsiniz.
.
 
Katılım
11 Eylül 2011
Mesajlar
114
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
18-03-2020
Ömer hocam haklısınız gerçek verilerle gitmem gerekirdi. Aslında bu dosyayı burada sizin ve arkadaşların yardımı ile tamamlamıştım ama reel dosyam da VERİTABANI sayfası ile (Formüller C sütununda) KONDOLİDE sayfasında ki (Formüller M sütununda) ve yine RAPOR sayfasında (Formüller M sütununda) formülsüz çözmek konusu daha hızlı çalışması adına aklıma geldiği için ve bir sürü makro ile kafa karıştırmamak adına ve kendim sizin kodları uyarlamak için reel veri üzerinden gitmedim. Reel veriye gelince;

Bu dosyada 5 çalışma sayfam ve 4 tane USERFORM var. USERFORM1 üzerine girdiğim kayıtları VERİTABANI sayfasında depoluyorum ve bu VERİTABANI sayfasında C sütununa da =EĞER(YADA(F2=$M$1;G2=$M$1);$M$1;"") formülünü giriyorum. Bu sayfada ki M1 ise RAPOR sayfasında ki C2.den (=RAPOR!C2) alıyor. RAPOR sayfasında RAPORSÜZ isimli bir gelişmiş filtreleme makrom var. Bu makroyu RAPOR sayfasından çalıştırmak yerine USERFORM2 üzerinde KASALAR isimli butona bağladım ve tetikleme burada başlıyor. CommandButtona basınca RAPOR sayfasında ki RAPORSÜZ makrosunu çalıştırıyor ve aynı sayfada C2 hücresini de VERİTABANI sayfasında ki (M1) hücresine bağladım olayın özeti bu. Acaba gönderdiğiniz makroları bir tetikleme olmadan çalıştırabilir miyim. (Bu arada bütün çalışma sayfalarım gizli şekilde duruyor).
 

Ekli dosyalar

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Tekrar merhaba.

Örnek belgenizde RAPOR sayfası ve VERİTABANI sayfasında hiçbir veri göremiyorum.
Bu nedenle hem UserForm2'deki gelişmiş filtrenin, hem de açtığınız bu konuyla ilgili formülün makroya uygulatılması işlemi sonuç veremez ki.

Anladığım kadarıyla, RAPOR sayfasında N5 hücresi seçildiğinde görünür hale gelen ListBox'tan seçim yapılması eylemi,
VERİTABANI sayfası C sütununa makro ile formül uygulama işleminin tetiklenmesi işlemi için uygun.

Bu nedenle;
-- RAPOR sayfasının adına fareyle sağ tıkladığınızda karşınıza gelecek VBA ekranının sağındaki mevcut kodları silip yerine aşağıdakini yapıştırın,
.
Kod:
[B][COLOR="blue"]Private Sub ListBox1_[COLOR="Red"]Change[/COLOR]()[/COLOR][/B]
n = ListBox1.Column(0) 'Kasa
Sheets("RAPOR").Range("N5") = n
Sheets("VERİTABANI").[M1] = n
Call FORMUL_V
[M5].Activate
[B][COLOR="Blue"]End Sub[/COLOR][/B]

[B][COLOR="blue"]Private Sub Worksheet_SelectionChange(ByVal Target As Range)[/COLOR][/B]
ListBox1.Visible = False
If Target.Address(0, 0) = "N5" Then
ListBox1.Visible = True
ListBox1.Top = ActiveCell.Top
End If
[B][COLOR="Blue"]End Sub[/COLOR][/B]
-- Aşağıdaki kodları MODÜL1'e yapıştırın,
-- KONSOLİDE sayfasına veri yazan makro hangisi ise o kod blokunun END SUB satırından hemen önce
Call FORMUL_K şeklinde bir satır ekleyin
.
.
Kod:
[B][COLOR="blue"]Sub FORMUL_V()[/COLOR][/B]
Set v = Sheets("VERİTABANI")
v.Range("C2:C" & Rows.Count).ClearContents
If v.Cells(Rows.Count, "E").End(3).Row > 1 Then
Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual
With v.Range("C2:C" & v.Cells(Rows.Count, "E").End(3).Row)
    .Formula = "=IF(OR(F2=$M$1,G2=$M$1),$M$1,"""")"
    .Value = .Value
End With
Application.ScreenUpdating = True: Application.Calculation = xlCalculationAutomatic
End If
[B][COLOR="blue"]End Sub[/COLOR][/B]

[B][COLOR="blue"]Sub FORMUL_K()[/COLOR][/B]
Set k = Sheets("KONSOLİDE")
k.Range("M5:M" & Rows.Count).ClearContents
If k.Cells(Rows.Count, "E").End(3).Row > 4 Then
Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual
With k.Range("M5:M" & k.Cells(Rows.Count, "E").End(3).Row)
    .Formula = "=IF(E5="""","""",IF(OR(F5="""",F5=$P$1),K5-L5+IF(ROW()=5,0,M4),IF(ROW()=5,0,M4)-L5))"
    .Value = .Value
End With
Application.ScreenUpdating = True: Application.Calculation = xlCalculationAutomatic
End If
[B][COLOR="blue"]End Sub[/COLOR][/B]
Bu şekilde istediğiniz sonuca ulaşılabilmesi lazım.
Belgenizde uygun veri olmadığından deneme şansım olmadı, umarım sorun çıkmaz. Denemeler yapınız.
.
 
Katılım
11 Eylül 2011
Mesajlar
114
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
18-03-2020
Ömer hocam elinize sağlık çok güzel bir şekilde sorunsuz çalıştı. Ancak Parametre sayfasında ki kasa isimlerini değiştirmeye çalışınca hata verip aşağıda ki bölüme yönlendirdi.

Private Sub ListBox1_Change()
n = ListBox1.Column(0) 'Kasa
Sheets("RAPOR").Range("N5") = n
Sheets("VERİTABANI").[M1] = n
Call FORMUL_V
[M5].Activate (Burada sorun yarattı)
End Sub

Sebebi olarakta şu aklıma geldi. Userform2 içinde ki Listbox15 de RAPOR sayfasındaki Listbox1 ile aynı görevi görüyordu onun kodu da aşağıda o bir çakışma yaratmış olabilir mi.

Private Sub ListBox15_Change()
n = ListBox1.Column(0) 'Kasa
Sheets("RAPOR").Range("N5") = n
Sheets("VERİTABANI").[M1] = n
Call FORMUL_V
[M5].Activate
End Sub

Bunun da sebebi bahsettiğim userform2 içinde ki Listbox15'in içinde ki bir veriye tıklayınca Listbox1'in görevini görüyor acaba bir çakışma mı oldu.
 
Son düzenleme:
Katılım
11 Eylül 2011
Mesajlar
114
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
18-03-2020
örnek dosyayı ekledim

Ömer hocam elinize sağlık çok güzel bir şekilde sorunsuz çalıştı. Ancak Parametre sayfasında ki kasa isimlerini değiştirmeye çalışınca hata verip aşağıda ki bölüme yönlendirdi.

Private Sub ListBox1_Change()
n = ListBox1.Column(0) 'Kasa
Sheets("RAPOR").Range("N5") = n
Sheets("VERİTABANI").[M1] = n
Call FORMUL_V
[M5].Activate (Burada sorun yarattı)
End Sub

Sebebi olarakta şu aklıma geldi. Userform2 içinde ki Listbox15 de RAPOR sayfasındaki Listbox1 ile aynı görevi görüyordu onun kodu da aşağıda o bir çakışma yaratmış olabilir mi.

Private Sub ListBox15_Change()
n = ListBox1.Column(0) 'Kasa
Sheets("RAPOR").Range("N5") = n
Sheets("VERİTABANI").[M1] = n
Call FORMUL_V
[M5].Activate
End Sub

Bunun da sebebi bahsettiğim userform2 içinde ki Listbox15'in içinde ki bir veriye tıklayınca Listbox1'in görevini görüyor acaba bir çakışma mı oldu.
 

Ekli dosyalar

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Merhaba.

Son sorunuzun cevabı, [M5].Activate satırını Activesheet.[M5].Activate olarak değiştirilmesi.

Biraz yorucu oldu (aslında userformları ve işlevlerini tam anlamış değilim)
ama ekteki belgeyi inceleyiniz, denemeler yapınız.

Özellikle AD TANIMLAMALARInı inceleyin. Belge içerisinde açıklamalar yazdım.
DOLAYLI işlevinin kullanıldığı AD TANIMLAMALARInın DOLAYLI parantezinin içerisindeki kısmını,
başına = işareti ekleyerek ilgili sayfada uygun bir hücreye uygularsanız daha kolay anlaşılır.

İyi çalışmalar dilerim.
.
 

Ekli dosyalar

Katılım
11 Eylül 2011
Mesajlar
114
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
18-03-2020
Ömer hocam tekrar selamlar; Gerçekten çok güzel bir çalışma olmuş. Emeğinize aklınıza sağlık.. ama bu arada sizi epeyce yormuşum :) Ben bağlantılar konusunda gerekli düzeltmeleri yaptım. Userformlara gelince hocam kullanıcılar bazen çok acemice davranıyorlar ben verileri burada listboxlara taşıyarak biraz müdahalesiz işlem sonuçlarını görmeye yönlendiriyorum. Bu arada forumda bir çok sorunun cevabında (başka arkadaşlarında hakkını yemeden) sizin isminizi görüyorum. O kadar çok insana yardım ediyorsunuz ki sadece müteşekkirim.
 
Üst