Dizi Formullerde R1C1 kullanmadan yazım yapmak mümkünmüdür

Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Kod:
=TOPLA(EĞER('2007'!$E$5:$E$2262=K9;
EĞER('2007'!$F$5:$F$2262=$C$4;
EĞER('2007'!$B$5:$B$2262>=$I$4;
EĞER('2007'!$B$5:$B$2262<=$M$4;
EĞER('2007'!$G$5:$G$2262=R9;
EĞER('2007'!$I$5:$I$2262=F9;
'2007'!$J$5:$J$2262;0);0);0)))))

yukarıdaki formulü istenilen hücreye r1c1 kullanmadan ve bitiş satırnolarını değişkenden almak kaydıyla kopyalamak istiyorum.
Akabinde oluşturulan alanı kopyala özel yapıştır değerleri diyecem ki 10 kere hesaplamasın :)
Sn Anemosun Makrodan bir hücreye aktarmak için önerisi aşağıdaki gibi.

"Formula" yerine "FormulaArray" kullanmalısınız.
Kod:
[a1].FormulaArray = _
        "=SUM(IF('2007'!R5C5:R2262C5=R[6]C[6]," & _
        "IF('2007'!R5C6:R2262C6=R4C3,IF('2007'!R5C2:R2262C2>=R4C9," & _
        "IF('2007'!R5C2:R2262C2<=R4C13,IF('2007'!R5C7:R2262C7=R[6]C[13]," & _
        "IF('2007'!R5C9:R2262C9=R[6]C[1],'2007'!R5C10:R2262C10,0),0),0)))))"
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Arkadaşlar tam olarak amacım (kodların yazımı yeni bitti)
21 .Cells(syc_i, "J").Value = 1
22 '=TOPLA(EĞER(B149=$A$8:$A$146;EĞER(H149=$H$8:$H$146;EĞER("İçi"=$N$8:$N$146;$J$8:$J$146;0))))
23 '=TOPLA(EĞER(B & syc_i =$A$8:$A$ & sonsat_Rpr ;EĞER(H149=$H$8:$H$& sonsat_Rpr;EĞER("İçi"=$N$8:$N$& sonsat_Rpr;$J$8:$J$& sonsat_Rpr;0))))

21.satırdaki hücreye 22. satırdaki excel dilindeki ifadeyi vba dilinde 23. satırdaki gibi değişkenlerle yazmaktır.

ve
24.satırdaki hücreye 25. satırdaki excel dilindeki ifadeyi vba dilinde 26. satırdaki gibi değişkenlerle yazmaktır.





Kod:
Sub ButceYıl_TutarDag()
1  Dim shT, shR As Worksheet
2  Set shR = Sheets("Sayfa1"): Set shT = Sheets("TABLOM")

'Tablo sayfasının A Sütunundan benzersiz Bütçe yıllarını al _
     Bu sayfadaki B sütuna, Edeki son satırı kontrol ederek _
     benzersizleri yapıştır.
3  sonsat_Tbl = shT.Cells(65536, "A").End(3).Row
4  sonsat_Rpr = shR.Cells(65536, "E").End(3).Row
5  shT.Range("A1:A" & sonsat_Tbl).AdvancedFilter , Action:=xlFilterCopy, CopyToRange:= _
   shR.Range("B" & sonsat_Rpr + 2), Unique:=True

6  intRprYil = 2007
7     With shR
'Yapıştırılan satırları Sırala
8             sonsatSrla = .Cells(65536, "B").End(3).Row            'Sıralanacak Son satır
9            .Range(.Cells(sonsat_Rpr + 3, "B"), .Cells(sonsatSrla, "B")).Sort _
              Key1:=.Cells(sonsat_Rpr + 3, "B"), Order1:=xlAscending, _
              Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
              Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
''Yapıştırılan satırları Düzenle
10            .Cells(sonsat_Rpr + 2, "B").Value = "2007 Bütçesinin Yıllara göre Dağılımı"
11            .Range(.Cells(sonsat_Rpr + 2, "B"), .Cells(sonsat_Rpr + 2, "I")).MergeCells = True
12            .Cells(sonsat_Rpr + 2, "J").Value = "İçi"
13            .Cells(sonsat_Rpr + 2, "K").Value = "Dışı"
14            .Cells(sonsat_Rpr + 2, "L").Value = "TOPLAM"
            
15       For syc_i = (sonsat_Rpr + 3) To sonsatSrla
16        'MsgBox syc_i '=B149 & " Mali Yılı İçin"
17        .Cells(syc_i, "C").Value = .Cells(syc_i, "B").Value & " Mali Yılı İçin"
18        .Range(.Cells(syc_i, "C"), .Cells(syc_i, "G")).MergeCells = True
19        .Cells(syc_i, "H").Value = intRprYil
20        .Cells(syc_i, "I").Value = "Bütçesinden"
21        .Cells(syc_i, "J").Value = 1
22        '=TOPLA(EĞER(B149=$A$8:$A$146;EĞER(H149=$H$8:$H$146;EĞER("İçi"=$N$8:$N$146;$J$8:$J$146;0))))
23        '=TOPLA(EĞER(B & syc_i =$A$8:$A$ & sonsat_Rpr ;EĞER(H149=$H$8:$H$& sonsat_Rpr;EĞER("İçi"=$N$8:$N$& sonsat_Rpr;$J$8:$J$& sonsat_Rpr;0))))
24        .Cells(syc_i, "K").Value = 2
25        '=TOPLA(EĞER(B149=$A$8:$A$146;EĞER(H149=$H$8:$H$146;EĞER("Dışı"=$N$8:$N$146;$J$8:$J$146;0))))
26        '=TOPLA(EĞER(B & syc_i =$A$8:$A$ & sonsat_Rpr ;EĞER(H149=$H$8:$H$& sonsat_Rpr;EĞER("Dışı"=$N$8:$N$& sonsat_Rpr;$J$8:$J$& sonsat_Rpr;0))))
27        .Cells(syc_i, "L").Value = .Cells(syc_i, "J").Value + .Cells(syc_i, "K").Value
28       Next
29     End With
End Sub
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Kod:
Range("J200").FormulaArray = _
 "=SUM(IF(B150=A8:A146,IF(H150=H8:H146,IF(""&#304;&#231;i""=N8:N146,J8:J146,0))))"
Arkada&#351;alar tek sorun Form&#252;l c&#252;mlesi i&#231;indeki 146 ve 150 leri de&#287;i&#351;kenlerle ifade etmek.

Hatta direk KtSonuc de&#287;i&#351;kenine atayabili&#351;rsek daha iyi olur.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
3 saatte deneme yan&#305;lma ile buldum ya helal olsun kendi kendime :)
Kod:
Sub KosulluToplam_hsr()
FormSonSat = 145
For HCR = 148 To 153
With Range("J" & HCR)
                    .FormulaArray = "=SUM(IF(B" & HCR & "=A8:A" & FormSonSat & ", IF(H" & HCR & "=H8:H" & FormSonSat & " , IF(""&#304;&#231;i""=N8:N" & FormSonSat & ",J8:J" & FormSonSat & ",0))))"
                    .Copy
                    .PasteSpecial Paste:=xlPasteValues
End With
         
With Range("K" & HCR)
                    .FormulaArray = "=SUM(IF(B" & HCR & "=A8:A" & FormSonSat & ", IF(H" & HCR & "=H8:H" & FormSonSat & " , IF(""D&#305;&#351;&#305;""=N8:N" & FormSonSat & ",J8:J" & FormSonSat & ",0))))"
                    .Copy
                    .PasteSpecial Paste:=xlPasteValues
End With
Next HCR
Application.CutCopyMode = False
End Sub


Buda Ana kodlar&#305;n i&#231;ine entegre hali

Kod:
Sub ButceY&#305;l_TutarDag()
1  Dim shT, shR As Worksheet
2  Set shR = Sheets("Sayfa1"): Set shT = Sheets("TABLOM")

'Tablo sayfas&#305;n&#305;n B S&#252;tunundan benzersiz Maliyet y&#305;llar&#305;n&#305; al _
     Bu sayfadaki B s&#252;tuna, Edeki son sat&#305;r&#305; kontrol ederek _
     benzersizleri yap&#305;&#351;t&#305;r.
3  sonsat_Tbl = shT.Cells(65536, "B").End(3).Row
4  sonsat_Rpr = shR.Cells(65536, "E").End(3).Row
5  shT.Range("B1:B" & sonsat_Tbl).AdvancedFilter , Action:=xlFilterCopy, CopyToRange:= _
   shR.Range("B" & sonsat_Rpr + 2), Unique:=True

6  intRprYil = 2007
7     With shR
'Yap&#305;&#351;t&#305;r&#305;lan sat&#305;rlar&#305; S&#305;rala
8             sonsatSrla = .Cells(65536, "B").End(3).Row            'S&#305;ralanacak Son sat&#305;r
9            .Range(.Cells(sonsat_Rpr + 3, "B"), .Cells(sonsatSrla, "B")).Sort _
              Key1:=.Cells(sonsat_Rpr + 4, "B"), Order1:=xlAscending, _
              Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
              Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
             
''Yap&#305;&#351;t&#305;r&#305;lan sat&#305;rlar&#305; D&#252;zenle
10            .Cells(sonsat_Rpr + 2, "B").Value = "2007 B&#252;t&#231;esinin Y&#305;llara g&#246;re Da&#287;&#305;l&#305;m&#305;"
11            .Range(.Cells(sonsat_Rpr + 2, "B"), .Cells(sonsat_Rpr + 2, "I")).MergeCells = True
12            .Cells(sonsat_Rpr + 2, "J").Value = "&#304;&#231;i"
13            .Cells(sonsat_Rpr + 2, "K").Value = "D&#305;&#351;&#305;"
14            .Cells(sonsat_Rpr + 2, "L").Value = "TOPLAM"
'Yap&#305;&#351;t&#305;r&#305;lan sat&#305;rlara g&#246;re Rapor Alt&#305;nda &#214;zet tablo &#231;&#305;kar
15       For syc_i = (sonsat_Rpr + 3) To sonsatSrla
16           MsgBox syc_i '=B149 & " Mali Y&#305;l&#305; &#304;&#231;in"
17          .Cells(syc_i, "C").Value = .Cells(syc_i, "B").Value & " Mali Y&#305;l&#305; &#304;&#231;in"
18          .Range(.Cells(syc_i, "C"), .Cells(syc_i, "G")).MergeCells = True
19          .Cells(syc_i, "H").Value = intRprYil
20          .Cells(syc_i, "I").Value = "B&#252;t&#231;esinden"
21     With .Cells(syc_i, "J")
                    .FormulaArray = "=SUM(IF(B" & syc_i & "=A8:A" & sonsat_Rpr & _
                                    ", IF(H" & syc_i & "=H8:H" & sonsat_Rpr & _
                                    ", IF(""&#304;&#231;i""=N8:N" & sonsat_Rpr & _
                                    ", J8:J" & sonsat_Rpr & ",0))))"
                    .Copy
                    .PasteSpecial Paste:=xlPasteValues
                    .NumberFormat = "#,##0.00"
       End With
22     With .Cells(syc_i, "K")
                    .FormulaArray = "=SUM(IF(B" & syc_i & "=A8:A" & sonsat_Rpr & _
                                    ", IF(H" & syc_i & "=H8:H" & sonsat_Rpr & _
                                    ", IF(""D&#305;&#351;&#305;""=N8:N" & sonsat_Rpr & _
                                    ", J8:J" & sonsat_Rpr & ",0))))"
                    .Copy
                    .PasteSpecial Paste:=xlPasteValues
                    .NumberFormat = "#,##0.00"
       End With
23     With .Cells(syc_i, "L")
                    .Value = .Cells(syc_i, "J").Value + .Cells(syc_i, "K").Value
                    .NumberFormat = "#,##0.00"
       End With
24       Next
25     End With
End Sub
 
Son düzenleme:
Üst