Formülüm çok kasıyor aynı görevi gören makro mümkün mü acaba

vakyn

Altın Üye
Katılım
11 Ağustos 2023
Mesajlar
94
Excel Vers. ve Dili
Microsoft 365 Tr 64 Bit
Altın Üyelik Bitiş Tarihi
29-11-2024
Merhabalar

aşağı eklediğim formülü VBA koduna cevirebilmemiz mümkün mü yapay zekaya sordum fakat verdiği kod excelimi resmen kilitledi dondu görev yöneticisinden sonlandırdım konu hakkında yardımcı olacak arkadaşları davet ediyorum.

=TOPLA.ÇARPIM(EĞERHATA(ESAYIYSA(WELDLOG!$AZ$2:$AZ$94209)*(WELDLOG!$A$2:$A$94209="SRU")/ÇOKEĞERSAY(WELDLOG!$AZ$2:$AZ$94209:WELDLOG!$AZ$2:$AZ$94209;">0";WELDLOG!$D$2:$D$94209;WELDLOG!$D$2:$D$94209&"");0))
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,452
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Mutlaka kopya bir dosyada deneyiniz


Excel Formülünüz
excel
Kodu kopyala
=TOPLA.ÇARPIM(EĞERHATA(ESAYIYSA(WELDLOG!$AZ$2:$AZ$94209)*(WELDLOG!$A$2:$A$94209="SRU")/ÇOKEĞERSAY(WELDLOG!$AZ$2:$AZ$94209:WELDLOG!$AZ$2:$AZ$94209;">0";WELDLOG!$D$2:$D$94209;WELDLOG!$D$2:$D$94209&"");0))

Bu formül, WELDLOG sayfasındaki belirli aralıkları değerlendirir ve belirli koşullara göre toplama işlemi yapar.
VBA Koduna Çevirme
Aşağıda, verdiğiniz Excel formülünü VBA koduna dönüştüren bir örnek bulunmaktadır. Bu kod, formülünüzün yaptığı işlemleri VBA ile yapar. Kodu bir modül içine ekleyebilir ve gerekli yerlerde kullanabilirsiniz.

Function CalculateSumProduct() As Double
Dim ws As Worksheet
Dim lastRow As Long
Dim sumResult As Double
Dim cellValue As Variant
Dim countPositive As Long
Dim i As Long

Set ws = ThisWorkbook.Sheets("WELDLOG")
lastRow = ws.Cells(ws.Rows.Count, "AZ").End(xlUp).Row
sumResult = 0
countPositive = 0

For i = 2 To lastRow
If ws.Cells(i, "A").Value = "SRU" Then
If IsNumeric(ws.Cells(i, "AZ").Value) And ws.Cells(i, "AZ").Value > 0 Then
countPositive = countPositive + 1
sumResult = sumResult + ws.Cells(i, "D").Value
End If
End If
Next i

If countPositive > 0 Then
CalculateSumProduct = sumResult / countPositive
Else
CalculateSumProduct = 0
End If
End Function

Açıklama:
  1. ws: WELDLOG sayfasını temsil eder.
  2. lastRow: AZ sütunundaki son kullanılan satırı bulur.
  3. sumResult: Toplam değeri tutar.
  4. countPositive: Pozitif ve sayısal değerlerin sayısını tutar.
  5. For Döngüsü: A sütunundaki "SRU" değeriyle eşleşen ve AZ sütununda sayısal ve pozitif değerlere sahip satırları kontrol eder.
  6. Sonuç Hesaplama: Pozitif değerlerin sayısı 0'dan büyükse, toplam sonucu bu sayıya böler. Aksi takdirde, 0 döner.
Kullanım
  1. Excel'de bir VBA modülü oluşturun (Alt + F11 ile VBA editörünü açın ve Insert > Module seçeneğini kullanın).
  2. Yukarıdaki kodu bu modüle yapıştırın.
  3. Excel'e geri dönün ve formülünüzü =CalculateSumProduct() şeklinde bir hücreye yazabilirsiniz.
Bu VBA kodu, formülünüzün yaptığı işlemleri VBA kullanarak gerçekleştirir ve aynı sonuca ulaşmayı sağlar.
 

vakyn

Altın Üye
Katılım
11 Ağustos 2023
Mesajlar
94
Excel Vers. ve Dili
Microsoft 365 Tr 64 Bit
Altın Üyelik Bitiş Tarihi
29-11-2024
Mutlaka kopya bir dosyada deneyiniz


Excel Formülünüz
excel
Kodu kopyala
=TOPLA.ÇARPIM(EĞERHATA(ESAYIYSA(WELDLOG!$AZ$2:$AZ$94209)*(WELDLOG!$A$2:$A$94209="SRU")/ÇOKEĞERSAY(WELDLOG!$AZ$2:$AZ$94209:WELDLOG!$AZ$2:$AZ$94209;">0";WELDLOG!$D$2:$D$94209;WELDLOG!$D$2:$D$94209&"");0))

Bu formül, WELDLOG sayfasındaki belirli aralıkları değerlendirir ve belirli koşullara göre toplama işlemi yapar.
VBA Koduna Çevirme
Aşağıda, verdiğiniz Excel formülünü VBA koduna dönüştüren bir örnek bulunmaktadır. Bu kod, formülünüzün yaptığı işlemleri VBA ile yapar. Kodu bir modül içine ekleyebilir ve gerekli yerlerde kullanabilirsiniz.

Function CalculateSumProduct() As Double
Dim ws As Worksheet
Dim lastRow As Long
Dim sumResult As Double
Dim cellValue As Variant
Dim countPositive As Long
Dim i As Long

Set ws = ThisWorkbook.Sheets("WELDLOG")
lastRow = ws.Cells(ws.Rows.Count, "AZ").End(xlUp).Row
sumResult = 0
countPositive = 0

For i = 2 To lastRow
If ws.Cells(i, "A").Value = "SRU" Then
If IsNumeric(ws.Cells(i, "AZ").Value) And ws.Cells(i, "AZ").Value > 0 Then
countPositive = countPositive + 1
sumResult = sumResult + ws.Cells(i, "D").Value
End If
End If
Next i

If countPositive > 0 Then
CalculateSumProduct = sumResult / countPositive
Else
CalculateSumProduct = 0
End If
End Function

Açıklama:
  1. ws: WELDLOG sayfasını temsil eder.
  2. lastRow: AZ sütunundaki son kullanılan satırı bulur.
  3. sumResult: Toplam değeri tutar.
  4. countPositive: Pozitif ve sayısal değerlerin sayısını tutar.
  5. For Döngüsü: A sütunundaki "SRU" değeriyle eşleşen ve AZ sütununda sayısal ve pozitif değerlere sahip satırları kontrol eder.
  6. Sonuç Hesaplama: Pozitif değerlerin sayısı 0'dan büyükse, toplam sonucu bu sayıya böler. Aksi takdirde, 0 döner.
Kullanım
  1. Excel'de bir VBA modülü oluşturun (Alt + F11 ile VBA editörünü açın ve Insert > Module seçeneğini kullanın).
  2. Yukarıdaki kodu bu modüle yapıştırın.
  3. Excel'e geri dönün ve formülünüzü =CalculateSumProduct() şeklinde bir hücreye yazabilirsiniz.
Bu VBA kodu, formülünüzün yaptığı işlemleri VBA kullanarak gerçekleştirir ve aynı sonuca ulaşmayı sağlar.
Detaylı anlatımınız için çok teşekkürler.

252952

böyle bir uyarı aldım bu aşamada ne yapmam gerekiyor.
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,452
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Birden fazla bulunan isim var : diyor, dosyan olmadan nedir goremeyiz ancak : den sonraki kısmı find komutunu kullanarak ararsan sadece o isimleri gosterir. Ancak verdiğim kod dışında olan nerde incelemek ve silerek yeniden çalıştırmak gerekir. Bu durumda isim cakısması yasanmaz
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Merhaba.

Alternatif


Formül sonucu B sütununa yazar ("B2:B" bu kısmı değiştirebilirsiniz)
A sütunundaki satır sayısı kadar satıra uygulanır. (Değiştirmek için "A" kısmını değiştirin.
Değiştireceğiniz kısım With Range("B2:B" & Cells(Rows.Count, "A").End(xlUp).Row) satırındadır. Başka hiçbir yeri değiştirmeyin.

Kod:
Sub Test()
    With Range("B2:B" & Cells(Rows.Count, "A").End(xlUp).Row)
        .Formula = "=SUMPRODUCT(IFERROR(ISNUMBER(WELDLOG!$AZ$2:$AZ$94209)*(WELDLOG!$A$2:$A$94209=""SRU"")/COUNTIFS(WELDLOG!$AZ$2:$AZ$94209,"">0"",WELDLOG!$D$2:$D$94209,WELDLOG!$D$2:$D$94209&""""),0))"
        .Value = .Value
    End With
End Sub

Eğer doğru sonuç alamazsanız dosyanızı eklerseniz en doğru ve hızlı yanıtı alırsınız.
 

vakyn

Altın Üye
Katılım
11 Ağustos 2023
Mesajlar
94
Excel Vers. ve Dili
Microsoft 365 Tr 64 Bit
Altın Üyelik Bitiş Tarihi
29-11-2024
Merhaba.

Alternatif


Formül sonucu B sütununa yazar ("B2:B" bu kısmı değiştirebilirsiniz)
A sütunundaki satır sayısı kadar satıra uygulanır. (Değiştirmek için "A" kısmını değiştirin.
Değiştireceğiniz kısım With Range("B2:B" & Cells(Rows.Count, "A").End(xlUp).Row) satırındadır. Başka hiçbir yeri değiştirmeyin.

Kod:
Sub Test()
    With Range("B2:B" & Cells(Rows.Count, "A").End(xlUp).Row)
        .Formula = "=SUMPRODUCT(IFERROR(ISNUMBER(WELDLOG!$AZ$2:$AZ$94209)*(WELDLOG!$A$2:$A$94209=""SRU"")/COUNTIFS(WELDLOG!$AZ$2:$AZ$94209,"">0"",WELDLOG!$D$2:$D$94209,WELDLOG!$D$2:$D$94209&""""),0))"
        .Value = .Value
    End With
End Sub

Eğer doğru sonuç alamazsanız dosyanızı eklerseniz en doğru ve hızlı yanıtı alırsınız.
Function CalculateSumProduct() As Double
Dim ws As Worksheet
Dim lastRow As Long
Dim sumResult As Double
Dim countPositive As Long
Dim i As Long

Set ws = ThisWorkbook.Sheets("WELDLOG")
lastRow = ws.Cells(ws.Rows.Count, "AZ").End(xlUp).Row
sumResult = 0
countPositive = 0

For i = 2 To lastRow
If ws.Cells(i, "A").Value = "SRU" Then
If IsNumeric(ws.Cells(i, "AZ").Value) And ws.Cells(i, "AZ").Value > 0 Then
countPositive = countPositive + 1
sumResult = sumResult + ws.Cells(i, "D").Value
End If
End If
Next i

If countPositive > 0 Then
CalculateSumProduct = sumResult / countPositive
Else
CalculateSumProduct = 0
End If
End Function

Sub Test()
With Range("B2:B" & Cells(Rows.Count, "A").End(xlUp).Row)
.Formula = "=SUMPRODUCT(IFERROR(ISNUMBER(WELDLOG!$AZ$2:$AZ$94209)*(WELDLOG!$A$2:$A$94209=""SRU"")/COUNTIFS(WELDLOG!$AZ$2:$AZ$94209,"">0"",WELDLOG!$D$2:$D$94209,WELDLOG!$D$2:$D$94209&""""),0))"
.Value = .Value
End With
End Sub



Bu şekilde mı olması gerekiyor Muzaffer bey birleştiremedim
 

vakyn

Altın Üye
Katılım
11 Ağustos 2023
Mesajlar
94
Excel Vers. ve Dili
Microsoft 365 Tr 64 Bit
Altın Üyelik Bitiş Tarihi
29-11-2024
Yapmak istediğimi formül ile değil yazı ile sunayım isterseniz

Excelimde 10 tane alt sayfa var bunlardan birisi "weldlog"

1) weldlog da bulunan A:A sütunu "SRU" ise

2) weldlog da bulunan AZ sütununda tarih varsa

3) weldlog da bulunan D:D sütunundaki verileri dublikelerini kaldırarak topla

Sonuçu istediğim bir sayfada istediğim bir hücreye yerleştirmek.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Diğer kodları hiç kullanmayacaksınız sadece benim verdiğim kodu kullanacaksınız.

Sonuçu istediğim bir sayfada istediğim bir hücreye yerleştirmek.
Bu kısım da önemli. Bunu da belirtmelisiniz. Hangi sayfa hangi hücreler?
 

vakyn

Altın Üye
Katılım
11 Ağustos 2023
Mesajlar
94
Excel Vers. ve Dili
Microsoft 365 Tr 64 Bit
Altın Üyelik Bitiş Tarihi
29-11-2024
Diğer kodları hiç kullanmayacaksınız sadece benim verdiğim kodu kullanacaksınız.


Bu kısım da önemli. Bunu da belirtmelisiniz. Hangi sayfa hangi hücreler?

ALL UNIT SUMMARY sayfasında BB:1 Hücresi uygundur, teşekkürler.
 

vakyn

Altın Üye
Katılım
11 Ağustos 2023
Mesajlar
94
Excel Vers. ve Dili
Microsoft 365 Tr 64 Bit
Altın Üyelik Bitiş Tarihi
29-11-2024
Yapmak istediğimi formül ile değil yazı ile sunayım isterseniz

Excelimde 10 tane alt sayfa var bunlardan birisi "weldlog"

1) weldlog da bulunan A:A sütunu "SRU" ise

2) weldlog da bulunan AZ sütununda tarih varsa

3) weldlog da bulunan D: D sütunundaki verileri dublikelerini kaldırarak topla (bunlar sayı değil yazı belirtmek istedim)

Sonuçu istediğim bir sayfada istediğim bir hücreye yerleştirmek.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
ALL UNIT SUMMARY sayfasında BB1 hücresine sonucu yazar.
Sadece aşağıdaki kodu çalıştıracaksınız başka hiçbir kodun çalıştırılmasına eklenmesine gerek yok.

Kod:
Sub Test()
    With Worksheets("ALL UNIT SUMMARY").Range("BB1")
        .Formula = "=SUMPRODUCT(IFERROR(ISNUMBER(WELDLOG!$AZ$2:$AZ$94209)*(WELDLOG!$A$2:$A$94209=""SRU"")/COUNTIFS(WELDLOG!$AZ$2:$AZ$94209,"">0"",WELDLOG!$D$2:$D$94209,WELDLOG!$D$2:$D$94209&""""),0))"
        .Value = .Value
    End With
End Sub
 

vakyn

Altın Üye
Katılım
11 Ağustos 2023
Mesajlar
94
Excel Vers. ve Dili
Microsoft 365 Tr 64 Bit
Altın Üyelik Bitiş Tarihi
29-11-2024
Makroyu yazdım ama sonucu 0 olarak yansıttı acaba kod yazarken hızlı yazılarak yanlış yazılan bir komut olabilir mi.

252953
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
.Value = .Value şu kısmı silin 1. mesajda yazdığınız formülün aynısının hücreye yazıldığını göreceksiniz. Bir hata olup olmadığını kontrol edin.
 

vakyn

Altın Üye
Katılım
11 Ağustos 2023
Mesajlar
94
Excel Vers. ve Dili
Microsoft 365 Tr 64 Bit
Altın Üyelik Bitiş Tarihi
29-11-2024
Sub Test()
With Worksheets("ALL UNIT SUMMARY").Range("BB1")
.Formula = "=SUMPRODUCT(IFERROR(ISNUMBER(WELDLOG!$AZ$2:$AZ$94209)*(WELDLOG!$A$2:$A$94209=""SRU"")/COUNTIFS(WELDLOG!$AZ$2:$AZ$94209,"">0"",WELDLOG!$D$2:$D$94209,WELDLOG!$D$2:$D$94209&""""),0))"
End With
End Sub
bu şekilde yazdım ama değer yine 0 yazdı.

252954

hücre içerisine formülü yazmış.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
0 yazıyor dediğiniz hücreye sizin 1. mesajda yazdığınız formülü yazdırdım.
1. mesajda yazdığınız formülden farklı bir şey yazdırmadım.

Aşağıdakileri yaparak kontrol edin.

1- 1. mesajda yazdığınız formülde hata var.
2- 1. mesajda yazdığınız formülde hata yoksa BB1'e yazdırdığınız formül ile 1. mesajda yazdığınız formülü alt alta yazıp aralarında bir fark olup olmadığını kontrol etmelisiniz.
 
Üst