macro-vba toplama işlemi

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Forumda çok kez paylaşıldı. Artık bu tarz basit kurguları yapabiliyor olmanız gerekir.

C++:
Option Explicit

Sub Topla()
    With Range("K1:K37")
        .Formula = "=SUM(A1:J1)"
        .Value = .Value
    End With
    
    With Range("A38:K38")
        .Formula = "=SUM(A1:A37)"
        .Value = .Value
    End With
End Sub
 
Katılım
13 Eylül 2012
Mesajlar
97
Excel Vers. ve Dili
2007 türkçe
Altın Üyelik Bitiş Tarihi
19-07-2024
Forumda çok kez paylaşıldı. Artık bu tarz basit kurguları yapabiliyor olmanız gerekir.

C++:
Option Explicit

Sub Topla()
    With Range("K1:K37")
        .Formula = "=SUM(A1:J1)"
        .Value = .Value
    End With
   
    With Range("A38:K38")
        .Formula = "=SUM(A1:A37)"
        .Value = .Value
    End With
End Sub
Sy. Korhan Ayhan ;
ilginiz ve yardımınız için teşekkür ederim. şimdiye kadar formda formüller üzerine çalışma yapıyordum makroyu da yeni yeni öğrenmeye başladım. hatta bu Sayfa2 de onu bile beceremedim. Teşekkür ederim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Eğer Range ifadelerinin başında sayfa adı yoksa o anda aktif sayfa hangisi ise kod o sayfa üzerinde işlem yapar.

Sayfa yönlendirmesi yapmak için Range ifadesinin soluna sayfa adını yazmanız gerekir.

Aşağıdaki gibi yazabilirsiniz.

Tek hücre için Sheets("Sayfa1").Range("A1")
Hücre aralığı için Sheets("Sayfa1").Range("A1:A1000")
Tüm sütun için Sheets("Sayfa1").Range("A:A") ya da Sheets("Sayfa1").Columns(1) gibi yazabilirsiniz.
 
Katılım
9 Ocak 2011
Mesajlar
354
Excel Vers. ve Dili
2007 Türkçe
Altın Üyelik Bitiş Tarihi
01-07-2023
Hücreyi biçimlendirme kodu eklemeniz yeterli olacaktır. Bu tarz kodları makro kaydet yöntemi ile çok kolay şekilde elde edebilirsiniz.

C++:
Sub Topla()
[d1] = WorksheetFunction.Sum([a1:a10])
[d1].Font.Bold = True
[d1].Font.Size = 12
[d1].Font.ColorIndex = 21
[d1].Interior.Colorindex = 6
End Sub
Teşekkür ederim iyi çalışmalar.
İhtiyacı olana Renk Scalası ekte verdim.
 

Ekli dosyalar

Katılım
13 Eylül 2012
Mesajlar
97
Excel Vers. ve Dili
2007 türkçe
Altın Üyelik Bitiş Tarihi
19-07-2024
Eğer Range ifadelerinin başında sayfa adı yoksa o anda aktif sayfa hangisi ise kod o sayfa üzerinde işlem yapar.

Sayfa yönlendirmesi yapmak için Range ifadesinin soluna sayfa adını yazmanız gerekir.

Aşağıdaki gibi yazabilirsiniz.

Tek hücre için Sheets("Sayfa1").Range("A1")
Hücre aralığı için Sheets("Sayfa1").Range("A1:A1000")
Tüm sütun için Sheets("Sayfa1").Range("A:A") ya da Sheets("Sayfa1").Columns(1) gibi yazabilirsiniz.

Sy. Korhan Ayhan ;
ilginiz ve anlayışla karşılamanızdan dolayı Teşekkür ederim. Sayfa işini hallettim soldan sağa gayet güzel çalışıyor ama yukarıdan aşağı çalışmıyor onu da biraz kurcalaya kurcalaya bulurum inşaallah tekrardan teşekkür ederim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Yukarıdan aşağıya siz de ne gibi bir sorun oldu?
 
Katılım
13 Eylül 2012
Mesajlar
97
Excel Vers. ve Dili
2007 türkçe
Altın Üyelik Bitiş Tarihi
19-07-2024
Sy. Korhan Ayhan ;
Hç Birşey Yazmıyor Toplama Yapmıyor . Bende aşağıdaki gibi yaptım
Sheets("Sayfa2").Range("B39") = WorksheetFunction.Sum(Sheets("Sayfa2").Range("b2:b38"))
Sheets("Sayfa2").Range("C39") = WorksheetFunction.Sum(Sheets("Sayfa2").Range("C2:C38"))
Sheets("Sayfa2").Range("D39") = WorksheetFunction.Sum(Sheets("Sayfa2").Range("D2:D38"))
Sheets("Sayfa2").Range("E39") = WorksheetFunction.Sum(Sheets("Sayfa2").Range("E2:E38"))
Sheets("Sayfa2").Range("F39") = WorksheetFunction.Sum(Sheets("Sayfa2").Range("F2:F38"))
Sheets("Sayfa2").Range("G39") = WorksheetFunction.Sum(Sheets("Sayfa2").Range("G2:G38"))
Sheets("Sayfa2").Range("H39") = WorksheetFunction.Sum(Sheets("Sayfa2").Range("H2:H38"))
Sheets("Sayfa2").Range("I39") = WorksheetFunction.Sum(Sheets("Sayfa2").Range("I2:I38"))
Sheets("Sayfa2").Range("J39") = WorksheetFunction.Sum(Sheets("Sayfa2").Range("J2:J38"))
Sheets("Sayfa2").Range("K39") = WorksheetFunction.Sum(Sheets("Sayfa2").Range("K2:K38"))
Sheets("Sayfa2").Range("L39") = WorksheetFunction.Sum(Sheets("Sayfa2").Range("L2:L38"))
Sheets("Sayfa2").Range("M39") = WorksheetFunction.Sum(Sheets("Sayfa2").Range("M2:M38"))
 
Katılım
13 Eylül 2012
Mesajlar
97
Excel Vers. ve Dili
2007 türkçe
Altın Üyelik Bitiş Tarihi
19-07-2024
Sy. Korhan Ayhan ;
Aşağıdaki formülü modül 1 de makroda yapmak için 5 saate yakındır uğraşıyorum ama bir yerlerde takılım kalıyorum
=ÇOKETOPLA('HESAP FİŞİ'!F:F;'HESAP FİŞİ'!E:E;A2)
Yapmış olduğum makro
Dim s1 As Worksheet: Dim s2 As Worksheet: Dim s3 As Worksheet: Dim i As Integer
Set s1 = Sheets("HESAP FİŞİ"): Set s2 = Sheets("Sayfa2")
Set wf = WorksheetFunction
son1 = s1.Cells(s1.Rows.Count, "E").End(3).Row
son2 = s2.Cells(s2.Rows.Count, "A").End(3).Row
For i = 2 To son2
s2.Range("B" & i) = wf.SumIf(s1.Range("E2:E" & son1), s2.Range("A" & i), s1.Range("F2:F" & son1))
Next i

Set wf = WorksheetFunction bunda hata var diyor
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Hata veren bölüm içinde Dim ile tanımlama yapmayı denediniz mi?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sizin paylaştığınız kod için de "Dim s1 As Worksheet:" şeklinde tanımlama var. Aynı şekilde hata veren satır içinde Dim'lerin olduğu bölüme aşağıdaki gibi tanımlama yapınız.

Dim wf As WorksheetFuntion
 
Katılım
13 Eylül 2012
Mesajlar
97
Excel Vers. ve Dili
2007 türkçe
Altın Üyelik Bitiş Tarihi
19-07-2024
Sizin paylaştığınız kod için de "Dim s1 As Worksheet:" şeklinde tanımlama var. Aynı şekilde hata veren satır içinde Dim'lerin olduğu bölüme aşağıdaki gibi tanımlama yapınız.

Dim wf As WorksheetFuntion
Sy. Korhan Ayhan ;

İlginiz ve yardımınız için teşekkür ederim. Başta söylemiştim ben makronun acemisi olduğum için maalesef yapamadım.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sağlık olsun. Yavaş yavaş sizlerde öğreneceksiniz.
 
Katılım
13 Eylül 2012
Mesajlar
97
Excel Vers. ve Dili
2007 türkçe
Altın Üyelik Bitiş Tarihi
19-07-2024
Sy. Korhan Ayhan ;
aşağıda ki kodu düzenleye bilir misiniz size zahmet olmazsa

=ÇOKETOPLA('HESAP FİŞİ'!F:F;'HESAP FİŞİ'!E:E;A2) bu formül makro olacaktı.
Yapmış olduğum makro
Dim s1 As Worksheet: Dim s2 As Worksheet: Dim s3 As Worksheet: Dim i As Integer
Set s1 = Sheets("HESAP FİŞİ"): Set s2 = Sheets("Sayfa2")
Set wf = WorksheetFunction
son1 = s1.Cells(s1.Rows.Count, "E").End(3).Row
son2 = s2.Cells(s2.Rows.Count, "A").End(3).Row
For i = 2 To son2
s2.Range("B" & i) = wf.SumIf(s1.Range("E2:E" & son1), s2.Range("A" & i), s1.Range("F2:F" & son1))
Next i

Set wf = WorksheetFunction bunda hata var diyor
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kodlarınızın en tepesinde "Option Explicit" ifadesi var mı?
 
Katılım
13 Eylül 2012
Mesajlar
97
Excel Vers. ve Dili
2007 türkçe
Altın Üyelik Bitiş Tarihi
19-07-2024
Sy. Korhan Ayhan ;
Sub etopla() var ama bende sizin yaptığınız sub değiştir() makrosu vardı onun düğmesine bağlamak için Sub etopla() ifadesini kaldırdım sadece
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
O bölümde hata vermesi için kodlarınızın en tepesinde belirttiğim ifadenin olması gerekir.

Durumu görselde izah etmeye çalıştım.

229205
 
Katılım
13 Eylül 2012
Mesajlar
97
Excel Vers. ve Dili
2007 türkçe
Altın Üyelik Bitiş Tarihi
19-07-2024
Sy. Korhan Ayhan ;
Bundan bahsediyorsunuz sanırım evet var.


229210



229211
 
Katılım
13 Eylül 2012
Mesajlar
97
Excel Vers. ve Dili
2007 türkçe
Altın Üyelik Bitiş Tarihi
19-07-2024
Sy. Korhan Ayhan ;
bu şekilde hata veriyor.

229212
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
"Option Explicit" komutu varsa kod içinde kullandığınız tüm değişkenleri Dim ifadesi ile tanımlamanız gerekir. Yani zorunluluk durumu yaratır.

İki alternatifiniz var;

1 - "Option Explicit" satırını silebilirsiniz. Bu durumda kodlarınızın en başında bulunan "Dim ....." şeklinde devam eden satırların bulunması da zorunlu değildir. Yani silebilirsiniz.

2 - "Dim ...." ile başlayan satırlarınızın devamına hata veren tanımlamadığınız "wf" değişkenini ekleyerek hata durumunun önüne geçebilirsiniz. Aşağıdaki satırı makronuzun en başında ki Dim ile başlayan satırlara ekleyerek sorunu çözebilirsiniz.

Dim wf As WorksheetFunction
 
Üst