- Katılım
- 5 Ocak 2009
- Mesajlar
- 1,586
- Excel Vers. ve Dili
- 2003 Türkçe
DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
Altın Üyelik Hakkında Bilgi
Option Explicit
Sub HESAPLA()
Dim Satır As Integer, Sütun As Byte
Application.ScreenUpdating = False
For Satır = 3 To 16
If Satır <> 15 And Satır <> 16 Then
For Sütun = 2 To 8
If Sütun <> 7 And Sütun <> 8 Then
Cells(Satır, Sütun) = Evaluate("=SUMPRODUCT(((MONTH(itarih))=" & Cells(Satır, 1) & ")*(ioperatör=""" & Cells(2, Sütun) & """)*(imiktar))")
ElseIf Sütun = 8 Then
Cells(Satır, Sütun) = Evaluate("=SUMPRODUCT(((MONTH(itarih))=" & Cells(Satır, 1) & ")*(imiktar))")
End If
Next
ElseIf Satır = 16 Then
For Sütun = 2 To 8
If Sütun <> 7 And Sütun <> 8 Then
Cells(Satır, Sütun) = Evaluate("=SUMPRODUCT(((YEAR(itarih))=" & Cells(Satır, 1) & ")*(ioperatör=""" & Cells(2, Sütun) & """)*(imiktar))")
ElseIf Sütun = 8 Then
Cells(Satır, Sütun) = Evaluate("=SUMPRODUCT(((YEAR(itarih))=" & Cells(Satır, 1) & ")*(imiktar))")
End If
Next
End If
Next
Application.ScreenUpdating = True
MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
v.s. gibi excel fonksiyonları olmasa idi başka türlü nasıl yapılabilirdi.Evaluate("=SUMPRODUCT(((MONTH(itarih)).....
Private Sub CommandButton1_Click()
Dim Satır As Integer, Sütun As Byte
Dim s1, s2 As Worksheet
Set s1 = Sheets("insört")
Set s2 = Sheets("Miktarlar")
Application.ScreenUpdating = False
s2.Range("B3:H16").ClearContents
son = s1.Cells(65536, 1).End(3).Row
For Satır = 3 To 16
If Satır <> 15 And Satır <> 16 Then
For Sütun = 2 To 8
If Sütun <> 7 And Sütun <> 8 Then
For i = 3 To son
If s1.Cells(i, 4) = s2.Cells(2, Sütun) And Month(s1.Cells(i, 3)) = s2.Cells(Satır, 1) Then
s2.Cells(Satır, Sütun) = s2.Cells(Satır, Sütun) + s1.Cells(i, 12)
End If
Next
ElseIf Sütun = 8 Then
For i = 3 To son
If Month(s1.Cells(i, 3)) = s2.Cells(Satır, 1) Then
s2.Cells(Satır, Sütun) = s2.Cells(Satır, Sütun) + s1.Cells(i, 12)
End If
Next
End If
Next
ElseIf Satır = 16 Then
For Sütun = 2 To 8
If Sütun <> 7 And Sütun <> 8 Then
For i = 3 To son
If s1.Cells(i, 4) = s2.Cells(2, Sütun) Then
s2.Cells(Satır, Sütun) = s2.Cells(Satır, Sütun) + s1.Cells(i, 12)
End If
Next
ElseIf Sütun = 8 Then
For i = 3 To son
s2.Cells(Satır, Sütun) = s2.Cells(Satır, Sütun) + s1.Cells(i, 12)
Next
End If
Next
End If
Next
s2.Range("B3:H16").NumberFormat = "#,## ""Adet"""
Application.ScreenUpdating = True
MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
kısmınıs2.Cells(Satır, Sütun) = s2.Cells(Satır, Sütun) + s1.Cells(i, 12)
neden olmadı? neden üst üste topladı?toplam=toplam + s1.Cells(i, 12)
s2.Cells(Satır, Sütun) =toplam
Sub aktar()
For j = 2 To 6
For r = 3 To 14
bulunan1 = Sheets("Miktarlar").Cells(r, "a").Value
bulunan2 = Sheets("Miktarlar").Cells(2, j).Value
If bulunan1 & bulunan2 <> "" Then
say1 = 0
say2 = 0
For i = r To Worksheets("insört").Cells(Rows.Count, "B").End(3).Row
aranan1 = Val(Mid(Sheets("insört").Cells(i, "c").Value, 4, 2))
aranan2 = Sheets("insört").Cells(i, "d").Value
If bulunan1 & bulunan2 = aranan1 & aranan2 Then
say1 = say1 + CDbl(Sheets("insört").Cells(i, "N").Value)
say2 = say2 + 1
End If
Next i
Sheets("Miktarlar").Cells(r, j).Value = say1
Sheets("Miktarlar").Cells(r, j + 9).Value = say2
If Sheets("Miktarlar").Cells(r, j).Value = 0 Then
Sheets("Miktarlar").Cells(r, j).Value = ""
Sheets("Miktarlar").Cells(r, j + 9).Value = ""
End If
End If
Next r
Sheets("Miktarlar").Cells(16, j).Value = WorksheetFunction.Sum(Worksheets("Miktarlar").Range(Cells(2, j), Cells(14, j)))
Sheets("Miktarlar").Cells(16, j + 9).Value = WorksheetFunction.Sum(Worksheets("Miktarlar").Range(Cells(2, j + 9), Cells(14, j + 9)))
Next j
For m = 3 To 16
Sheets("Miktarlar").Cells(m, 8).Value = WorksheetFunction.Sum(Worksheets("Miktarlar").Range(Cells(m, 2), Cells(m, 6)))
Sheets("Miktarlar").Cells(m, 17).Value = WorksheetFunction.Sum(Worksheets("Miktarlar").Range(Cells(m, 11), Cells(m, 15)))
If Sheets("Miktarlar").Cells(m, 8).Value = 0 Then
Sheets("Miktarlar").Cells(m, 8).Value = ""
Sheets("Miktarlar").Cells(m, 17).Value = ""
End If
Next m
MsgBox "işlem tamam"
End Sub
Option Explicit
Sub HESAPLA()
Dim Satır As Integer, Sütun As Byte, Son_Satır As Long
Application.ScreenUpdating = False
[COLOR=red]Son_Satır[/COLOR] = Sheets("insört").Range("A65536").End(3).Row
For Satır = 3 To 16
If Satır <> 15 And Satır <> 16 Then
For Sütun = 2 To 8
If Sütun <> 7 And Sütun <> 8 Then
Cells(Satır, Sütun) = Evaluate("=SUMPRODUCT(((MONTH([COLOR=red]insört!C3:C" & Son_Satır & "[/COLOR]))=" & Cells(Satır, 1) & ")*([COLOR=red]insört!D3:D" & Son_Satır & "[/COLOR]=""" & Cells(2, Sütun) & """)*([COLOR=red]insört!N3:N" & Son_Satır & "[/COLOR]))")
If Cells(Satır, Sütun) = 0 Then Cells(Satır, Sütun) = Empty
ElseIf Sütun = 8 Then
Cells(Satır, Sütun) = Evaluate("=SUMPRODUCT(((MONTH(insört!C3:C" & Son_Satır & "))=" & Cells(Satır, 1) & ")*(insört!N3:N" & Son_Satır & "))")
If Cells(Satır, Sütun) = 0 Then Cells(Satır, Sütun) = Empty
End If
Next
ElseIf Satır = 16 Then
For Sütun = 2 To 8
If Sütun <> 7 And Sütun <> 8 Then
Cells(Satır, Sütun) = Evaluate("=SUMPRODUCT(((YEAR(insört!C3:C" & Son_Satır & "))=" & Cells(Satır, 1) & ")*(insört!D3:D" & Son_Satır & "=""" & Cells(2, Sütun) & """)*(insört!N3:N" & Son_Satır & "))")
If Cells(Satır, Sütun) = 0 Then Cells(Satır, Sütun) = Empty
ElseIf Sütun = 8 Then
Cells(Satır, Sütun) = Evaluate("=SUMPRODUCT(((YEAR(insört!C3:C" & Son_Satır & "))=" & Cells(Satır, 1) & ")*(insört!N3:N" & Son_Satır & "))")
If Cells(Satır, Sütun) = 0 Then Cells(Satır, Sütun) = Empty
End If
Next
End If
Next
Application.ScreenUpdating = True
MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
toplam = toplam + s1.Cells(i, 12)
s2.Cells(Satır, Sütun) = toplam
toplam = toplam + s1.Cells(i, 12)
[COLOR=red]s2.Cells(Satır, Sütun) = toplam[/COLOR]
[COLOR=#ff0000]toplam = 0[/COLOR]
Option Explicit
Sub HESAPLA()
Dim S1 As Worksheet, S2 As Worksheet, X As Byte, Y As Byte
Dim Tarih As Date, İlk_Tarih As Date, Son_Tarih As Date
Dim Bul As Range, Adres As String, WF As WorksheetFunction
Application.ScreenUpdating = False
Set S1 = Sheets("insört")
Set S2 = Sheets("Miktarlar")
Set WF = WorksheetFunction
S2.Range("B3:H16").ClearContents
For X = 3 To 14
İlk_Tarih = DateSerial(S2.Range("A16"), S2.Cells(X, "A"), 1)
Son_Tarih = DateSerial(S2.Range("A16"), S2.Cells(X, "A") + 1, 0)
For Tarih = İlk_Tarih To Son_Tarih
Set Bul = S1.Range("C:C").Find(Tarih, , xlValues)
If Not Bul Is Nothing Then
Adres = Bul.Address
Do
For Y = 2 To 6
If Bul.Offset(0, 1) = S2.Cells(2, Y) Then
S2.Cells(X, Y) = S2.Cells(X, Y) + Bul.Offset(0, 11)
S2.Cells(16, Y) = WF.Sum(S2.Range(S2.Cells(3, Y), S2.Cells(14, Y)))
End If
Next
Set Bul = S1.Range("C:C").FindNext(Bul)
Loop While Not Bul Is Nothing And Bul.Address <> Adres
End If
Next
If WF.Sum(S2.Range("B" & X & ":F" & X)) = 0 Then
S2.Cells(X, "H") = Empty
Else
S2.Cells(X, "H") = WF.Sum(S2.Range("B" & X & ":F" & X))
End If
S2.Cells(16, "H") = WF.Sum(S2.Range("B16:F16"))
Next
Set Bul = Nothing
Set S1 = Nothing
Set S2 = Nothing
Set WF = Nothing
Application.ScreenUpdating = True
MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
alternatif kod
Kodlardaki kırmızı bölümleri biraz izah edebilirseniz çok sevinirim.For i = r To Worksheets("insört").Cells(Rows.Count, "B").End(3).Row
aranan1 = Val(Mid(Sheets("insört").Cells(i, "c").Value, 4, 2))
aranan2 = Sheets("insört").Cells(i, "d").Value
If bulunan1 & bulunan2 = aranan1 & aranan2 Then
say1 = say1 + CDbl(Sheets("insört").Cells(i, "N").Value)
say2 = say2 + 1
End If
Selamlar,
Ergün bey kısaca sorularınızı açıklamaya çalışayım;
ilgili araştırma ve çalışmalar yapmam gerekiyor. Sizin önerebileceğiniz link, dosya v.s. varsa şimdiden çok teşşekür ederim.Redim Komutu + For-Next Döngüsüyle
Do-Loop-While Döngüsüyle + Find Komutu Kullanarak
ADO yada DAO sorgu yöntemleriyle
Dilimin dödüğünce açıklıyayım.
aranan1 = Val(Mid(Sheets("insört").Cells(i, "c").Value, 4, 2))
burada ilgili ayı bulmak için parçaal fonksiyonunu kallandık.
say1 = say1 + CDbl(Sheets("insört").Cells(i, "N").Value)
burada excelin Conversion komutunda CDbl yani değerleri sayılara dönüştürdük
siğer sorun içinde kod yazdım ancak veriler çoğaldıkca kod yavaşlıyacaktır.
Korhan Beyin uyguladığı mantıktan kodları düzenlerseniz daha hızlı verileri alırsınız.
Sub aktar2()
For j = 2 To 6
For r = 3 To 14
bulunan1 = Sheets("Miktarlar").Cells(2, j).Value
bulunan2 = Sheets("Miktarlar").Cells(r, "a").Value
say1 = 0: say2 = 0: say3 = 0: sat1 = 0
say4 = 0: say5 = 0: say6 = 0: sat2 = 0
say7 = 0: say8 = 0: say9 = 0: sat3 = 0
For i = 3 To Worksheets("insört").Cells(Rows.Count, "B").End(3).Row
aranan1 = Sheets("insört").Cells(i, "d").Value
aranan2 = Val(Mid(Sheets("insört").Cells(i, "c").Value, 4, 2))
If bulunan1 & bulunan2 = aranan1 & aranan2 Then
sat1 = sat1 + 1
If sat1 = 1 Then
say1 = CDbl(Sheets("insört").Cells(i, "M").Value)
End If
deg1 = CDbl(Sheets("insört").Cells(i, "M").Value)
say2 = say2 + CDbl(Sheets("insört").Cells(i, "M").Value)
If say3 > deg1 Then
say3 = say3
Else
say3 = deg1
End If
If say1 < deg1 Then
say1 = say1
Else
say1 = deg1
End If
End If
If bulunan1 = aranan1 Then
sat2 = sat2 + 1
If sat2 = 1 Then
say4 = CDbl(Sheets("insört").Cells(i, "M").Value)
End If
deg2 = CDbl(Sheets("insört").Cells(i, "M").Value)
say5 = say5 + CDbl(Sheets("insört").Cells(i, "M").Value)
If say6 > deg2 Then
say6 = say6
Else
say6 = deg2
End If
If say4 < deg2 Then
say4 = say4
Else
say4 = deg2
End If
End If
If bulunan2 = aranan2 Then
sat3 = sat3 + 1
If sat3 = 1 Then
say7 = CDbl(Sheets("insört").Cells(i, "M").Value)
End If
deg3 = CDbl(Sheets("insört").Cells(i, "M").Value)
say8 = say8 + CDbl(Sheets("insört").Cells(i, "M").Value)
If say9 > deg3 Then
say9 = say9
Else
say9 = deg3
End If
If say7 < deg3 Then
say7 = say7
Else
say7 = deg3
End If
End If
Next i
On Error Resume Next
Sheets("Hızlar").Cells(r, j + 1).Value = Format(say1, "#,###") & " Min" & Chr(10) & Format(Val((say2 / sat1)), "#,###") & " Ort" & Chr(10) & Format(say3, "#,###") & " Max"
Sheets("Hızlar").Cells(16, j + 1).Value = Format(say4, "#,###") & " Min" & Chr(10) & Format(Val((say5 / sat2)), "#,###") & " Ort" & Chr(10) & Format(say6, "#,###") & " Max"
Sheets("Hızlar").Cells(r, 9).Value = Format(say7, "#,###") & " Min" & Chr(10) & Format(Val((say8 / sat3)), "#,###") & " Ort" & Chr(10) & Format(say9, "#,###") & " Max"
Next r
Next j
sonsat = Worksheets("insört").Cells(Rows.Count, "M").End(xlUp).Row
yer1 = Val(WorksheetFunction.Min(Worksheets("insört").Range("M1:M" & sonsat)))
yer2 = Val(WorksheetFunction.Average(Worksheets("insört").Range("M1:M" & sonsat)))
yer3 = Val(WorksheetFunction.Max(Worksheets("insört").Range("M1:M" & sonsat)))
Cells(16, 9) = Format(yer1, "#,###") & " Min" & Chr(10) & Format(yer2, "#,###") & " Ort" & Chr(10) & Format(yer3, "#,###") & " Max"
MsgBox "işlem tamam"
End Sub
Sub aktar2()
For j = 3 To 7
For r = 3 To 14
Set s1 = Worksheets("insört")
Set s2 = Worksheets("Hızlar")
aranan1 = s2.Cells(2, j).Value
aranan2 = s2.Cells(r, "a").Value
say1 = 0: say3 = 0: sat1 = 0
say4 = 0: say6 = 0: sat2 = 0
say7 = 0: say9 = 0: sat3 = 0
miktar1 = 0: toplam1 = 0: ort1 = 0
miktar2 = 0: toplam2 = 0: ort2 = 0
miktar3 = 0: toplam3 = 0: ort3 = 0
For i = 3 To s1.Cells(Rows.Count, "B").End(3).Row
bulunan1 = s1.Cells(i, "d").Value
bulunan2 = Val(Mid(s1.Cells(i, "c").Value, 4, 2))
If aranan1 & aranan2 = bulunan1 & bulunan2 Then
sat1 = sat1 + 1
If sat1 = 1 Then
say1 = CDbl(s1.Cells(i, "M").Value)
End If
deg1 = CDbl(s1.Cells(i, "M").Value)
miktar1 = miktar1 + CDbl(s1.Cells(i, "N").Value)
toplam1 = toplam1 + CDbl(s1.Cells(i, "M").Value) * CDbl(s1.Cells(i, "N").Value)
ort1 = toplam1 / miktar1
If say3 > deg1 Then
say3 = say3
Else
say3 = deg1
End If
If say1 < deg1 Then
say1 = say1
Else
say1 = deg1
End If
End If
If aranan1 = bulunan1 Then
sat2 = sat2 + 1
If sat2 = 1 Then
say4 = CDbl(s1.Cells(i, "M").Value)
End If
deg2 = CDbl(s1.Cells(i, "M").Value)
miktar2 = miktar2 + CDbl(s1.Cells(i, "N").Value)
toplam2 = toplam2 + CDbl(s1.Cells(i, "M").Value) * CDbl(s1.Cells(i, "N").Value)
ort2 = toplam2 / miktar2
If say6 > deg2 Then
say6 = say6
Else
say6 = deg2
End If
If say4 < deg2 Then
say4 = say4
Else
say4 = deg2
End If
End If
If aranan2 = bulunan2 Then
sat3 = sat3 + 1
If sat3 = 1 Then
say7 = CDbl(s1.Cells(i, "M").Value)
End If
deg3 = CDbl(s1.Cells(i, "M").Value)
miktar3 = miktar3 + CDbl(s1.Cells(i, "N").Value)
toplam3 = toplam3 + CDbl(s1.Cells(i, "M").Value) * CDbl(s1.Cells(i, "N").Value)
ort3 = toplam3 / miktar3
If say9 > deg3 Then
say9 = say9
Else
say9 = deg3
End If
If say7 < deg3 Then
say7 = say7
Else
say7 = deg3
End If
End If
Next i
On Error Resume Next
s2.Cells(r, j).Value = say1 & Chr(10) & Val(ort1) & Chr(10) & say3
s2.Cells(16, j).Value = say4 & Chr(10) & Val(ort2) & Chr(10) & say6
s2.Cells(r, 9).Value = say7 & Chr(10) & Val(ort3) & Chr(10) & say9
Next r
Next j
sonsat = s1.Cells(Rows.Count, "M").End(xlUp).Row
yer1 = Val(WorksheetFunction.Min(s1.Range("M3:M" & sonsat)))
tc = WorksheetFunction.SumProduct(s1.Range("M3:M" & sonsat), s1.Range("n3:n" & sonsat))
mk = WorksheetFunction.Sum(s1.Range("n3:n" & sonsat))
yer2 = Val(tc / mk)
yer3 = Val(WorksheetFunction.Max(s1.Range("M3:M" & sonsat)))
Cells(16, 9) = yer1 & Chr(10) & yer2 & Chr(10) & yer3
MsgBox "işlem tamam"
Range("A1:K20").AutoFit
End Sub
eklediğimde neden tam olarak autofit yapamıyorum?Range("A1:K20").AutoFit
Next i
If say1 = 0 Then say1 = ""
If say4 = 0 Then say4 = ""
If say7 = 0 Then say 7 = ""
If ort1 = 0 Then ort1 = ""
On Error Resume Next
Selection.AutoFilter
Range("A1:K20").AutoFilter
kodun çalışması için 20 satırdan sonra mutlaka 1 satır boş olmalı
Columns("A:K").EntireColumn.AutoFit 'Sütunlar
Rows("1:20").EntireRow.AutoFit 'Satırlar
Selam sayın Korhan Ayhan,Selamlar,
Sütun genişliklerini otomatik ayarlamak için aşağıdaki kodu kullanabilirsiniz.
Kod:Columns("A:K").EntireColumn.AutoFit 'Sütunlar Rows("1:20").EntireRow.AutoFit 'Satırlar
VBA'da if komutu yerleşik fonksiyondaki if fonksiyonunhdan çok daha esnektir.Pek konu ile alakası olmayabilir ama WorksheetFunction. dan sonra If yani EĞER komutunu bulamadım. Neden bazı excel fonksiyonlarına karşılık gelen kodları WorksheetFunction. altında bulamıyorum?
İyi çalışmalar.
MsgBox IIf(Range("A1").Value = "", "A1 Hücresi Boş", _
IIf(IsDate(Range("A1").Value), "A1 Hücresi Tarihtir.", _
IIf(IsNumeric(Range("A1").Value), "A1 hücresi sayı", "A1 Hücresi string")))
Selam Sayın Evren Gizlen,VBA'da if komutu yerleşik fonksiyondaki if fonksiyonunhdan çok daha esnektir.
Onun için iyisi varken daha az fonksiyonel bir şeyi koymamış ms.Bence haklıda.Siz iyisi varken kötüsünü kullanırmısınız.
Ayrıca iif var vba komutu.Oda ayni if fonksiyonu gibidir.
İsterseniz onu kulanın.
Aşağıdaki iif komutu A1 hücresinin içindeki değerin ne olduğunu sorguluyor.
Kod:MsgBox IIf(Range("A1").Value = "", "A1 Hücresi Boş", _ IIf(IsDate(Range("A1").Value), "A1 Hücresi Tarihtir.", _ IIf(IsNumeric(Range("A1").Value), "A1 hücresi sayı", "A1 Hücresi string")))
Sub makro1()
Set s1 = Sheets("Sayfa1")
Set s2 = Sheets("Sayfa2")
son = s1.Range("A65536").End(3).Row
dizi = 0
For i = 3 To son
If s1.Cells(i, "D") = s2.Cells(2, "C") Then
dizi = dizi & "," & s1.Cells(i, "M")
End If
Next i
s2.Cells(5, "K") = dizi
s2.Cells(6, "K") = WorksheetFunction.Max(dizi)
End Sub
s2.Cells(5, "K") = dizi
s2.Cells(6, "K") = WorksheetFunction.Max(dizi)