Soru 12
12. sorumuzla devam edelim. Aşağıdaki gibi bir tablomuz var.
Sarı renkli hücreye formül ya da makro yazarak; tarih,araç tipi ve il seçtiğimizde uygun veriyi getireceğiz. Kolay gibi gelecek ama zorlanabilirsiniz 🙂
En azından nasıl yapılacağı hakkında yorumlarınızı yazın.
Dosyayı buradan indirebilir, cevaplarınızı yorum kısmına yazabilirsiniz.
CEVAP
{=MİN(EĞER(($A$2:$A$41=$I$2)*($C$2:$C$41=$K$2);KAYDIR($A$2;0;KAÇINCI($J$2;$B$1:$F$1;0);BAĞ_DEĞ_DOLU_SAY($A:$A)-1;1);””))}
CTRL+SHIFT+ENTER ile dizi formülü şeklinde uygulanabilir
{=KAYDIR($A$1;KAÇINCI($I$2&$K$2;$A:$A&$C:$C;0)-1;KAÇINCI($J$2;$B$1:$F$1;0))}
Merhaba
Formül ile,
*Dizi formülüdür
=DOLAYLI(ADRES(KAÇINCI(1;(A1:A41=I2)*(C1:C41=K2);0);KAÇINCI(J2;A1:F1;0)))
Makro ile,
Option Explicit
Sub Uc_Kosullu_Ara_Bul()
Dim dizi As Variant, son As Integer, x As Integer, aractipi As Byte
son = Cells(Rows.Count, “A”).End(xlUp).Row
aractipi = WorksheetFunction.Match([J2], Range(“D1:F1”), 0)
Set dizi = Range(“D1:F” & son)
For x = 1 To son
If Cells(x, “A”) = [I2] And Cells(x, “C”) = [K2] Then _
[L2] = dizi(x, aractipi)
Next x
Set dizi = Nothing
son = Empty: x = Empty: aractipi = Empty
End Sub
Merhaba,
Kodu, cevaba göre güncelledim.
Tekrar eden tarihlerin toplamını alıyor.
Option Explicit
Sub Uc_Kosullu_Ara_Bul_Topla()
Dim dizi As Variant, topla As Integer, son As Integer, x As Integer, aractipi As Byte
son = Cells(Rows.Count, “A”).End(xlUp).Row
aractipi = WorksheetFunction.Match([J2], Range(“D1:F1”), 0)
Set dizi = Range(“D1:F” & son)
For x = 1 To son
If Cells(x, “A”) = [I2] And Cells(x, “C”) = [K2] Then _
topla = topla + dizi(x, aractipi)
Next x
[L2] = topla
Set dizi = Nothing
son = Empty: x = Empty
aractipi = Empty: topla = Empty
End Sub
önce bilgileri farklı sütunda =B2&D2&İNDİS($E$1:$G$1;0;KAÇINCI($K$2;$E$1:$G$1;0)) formülle birleştirdim daha sonra =DÜŞEYARA(J2&L2&K2;A:G;KAÇINCI(K2;A1:G1;0);0) formülle buldum. Ancak fiyat başlangıç, fiyat bitiş ve il verileri aynı olan veriler mevcut bunların toplamını istiyorsanız bu formül yanlış olur.
başta formül ile yapmaya çalıştım olmadı. macroda ancak bu kadar yapabildim. tek sorun “Araç Tipi 1” deki verileri hücreye yazdıramıyorum.
Sub Makro1()
‘
‘ Makro1 Makro
‘
‘
Dim tarih As Date
Dim aractipi As String
Dim fiyat As Integer
tarih = Range(“I2”)
aractipi = Range(“J2”)
fiyat = Range(“L2”)
ss = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ss
If tarih = Cells(i, 1) And Range(“K2”).Value = Cells(i, 3) Then
If aractipi = “Araç Tipi 1” Then [L2] = Cells(i, 4)
If aractipi = “Araç Tipi 2” Then [L2] = Cells(i, 5)
If aractipi = “Araç Tipi 3” Then [L2] = Cells(i, 6)
End If
Next
End Sub
Sub deneme()
For i = 2 To 41
If Cells(2, 9) >= Cells(i, 1) And Cells(2, 9) <= Cells(i, 2) And Cells(i, 3) = Range("k2") Then
If Cells(2, 10) = Range("d1") Then j = 4 Else If Cells(2, 10) = Range("e1") Then j = 5 Else j = 6
Range("L2") = Cells(i, j)
End If
Next i
End Sub
Private Sub CommandButton1_Click()
sonsatir = Cells(Rows.Count, “a”).End(xlUp).Row
ReDim dizi_baslangic(sonsatir) As Variant
ReDim dizi_bitis(sonsatir) As Variant
ReDim dizi_sehir(sonsatir) As Variant
For i = 2 To sonsatir
dizi_baslangic(i) = Cells(i, 1)
dizi_bitis(i) = Cells(i, 2)
dizi_sehir(i) = Cells(i, 3)
Next i
For y = 2 To sonsatir
For Z = 3 To 6
If Range(“I2”) >= dizi_baslangic(y) And Range(“I2”) <= dizi_bitis(y) And Range("k2") = dizi_sehir(y) And Range("j2") = Cells(1, Z) Then
Range("L2") = Cells(y, Z)
End If
Next Z
Next y
End Sub
=EĞER(J2=”Araç Tipi 1 “;ÇOKETOPLA(D:D;C:C;K2;A:A;”=”&I2);
EĞER(J2=”Araç Tipi 2″;ÇOKETOPLA(E:E;C:C;K2;A:A;”=”&I2);
EĞER(J2=”Araç Tipi 3″;ÇOKETOPLA(F:F;C:C;K2;A:A;”=”&I2);”HATA”)))
İyi akşamlar;
=IF(J2=D1;SUMIFS(D2:D41;A2:A41;I2;C2:C41;K2);IF(J2=E1;SUMIFS(E2:E41;A2:A41;I2;C2:C41;K2);IF(J2=F1;SUMIFS(F2:F41;A2:A41;I2;C2:C41;K2))))
=İNDİS(DOLAYLI(YERİNEKOY(ADRES(1;KAÇINCI(J2;1:1;0);4);1;””)&”:”&YERİNEKOY(ADRES(1;KAÇINCI(J2;1:1;0);4);1;””));KAÇINCI(I2&K2;A:A&C:C;0);0)
2. YÖNTEME EKLEME YAPTIM, SUTUNLARI DİNAMİK YAPTIM.
hocam ben böyle bişey yaptım ama
=TOPLA((A2:A41=I2)*(C2:C41=K2)*(D1:F1=J2)*(D2:F41))