2016-04-14 20 views
0

enter image description here Merhaba, 91 sütun içeren bir veritabanım var ve her sütunun satır 8'den 21'e (sabit) satırları var. 91 sütun bölüm bölümlerini içerir ve satır içeriği bölüm başlığına bağlıdır. Sütunlar alternatif bir şekilde giderler, burada 1 değeri C sütununda, 2 numaralı sütunda 2 değiştir ve tüm 91 kolon için patter izler. İç içe döngü kullanarak verilen formül "=SUMIFS('L4 - Data Sheet'!$Q:$Q,'L4 - Data Sheet'!$R:$R,'WF - L4'!BY$5,'L4 - Data Sheet'!$P:$P,$A8,'L4 - Data Sheet'!$A:$A,'WF - L4'!$A$3)" için bir otomasyon yapmak istiyorum, ancak işe yaramıyor gibi görünmüyor, bunun hakkında nasıl gidebileceğime dair net bir fikrim yok. Her sütunun ilgili satır aralığına sahip 91 kodlu köşe kolon hücreleri çok yorucu bir iş olduğundan:/Bu benim şu andaki çalışma kodum.İç içe Döngü Yatay bir veritabanında, excel'de

Sub WFCorp4() 
    With Sheets("WF - L4 (2)") '91 columns * 2 because there is two different subsectors qty and direct assigned space 
     '.Range("BY8:BY21").Formula = "=SUMIFS('L4 - Data Sheet'!$Q:$Q,'L4 - Data Sheet'!$R:$R,'WF - L4'!BY$5,'L4 - Data Sheet'!$P:$P,$A8,'L4 - Data Sheet'!$A:$A,'WF - L4'!$A$3)" 
     '.Range("CA8:CA21").Formula = "=SUMIFS('L4 - Data Sheet'!$Q:$Q,'L4 - Data Sheet'!$R:$R,'WF - L4'!CA$5,'L4 - Data Sheet'!$P:$P,$A8,'L4 - Data Sheet'!$A:$A,'WF - L4'!$A$3)" 
     '.Range("CN8:CN21").Formula = "=SUMIFS('L4 - Data Sheet'!$U:$U,'L4 - Data Sheet'!$R:$R,'WF - L4'!CM$5,'L4 - Data Sheet'!$P:$P,$A8,'L4 - Data Sheet'!$A:$A,'WF - L4'!$A$3)" 
    End With 
End Sub 

Bu, çalışma sayfası için denediğim iç içe geçmiş döngü kodudur.

Sub ShortcutWFCorp4() 

Dim lastcol As Long 
Dim lastrow As Long 
lastcol = Cells(8, Columns.Count).End(xlToLeft).Column 
lastrow = Cells(21, "C").End(xlUp).Row 
Dim i As Long 
Dim j As Long 


For i = i + 2 To lastcol 

    For j = 8 To lastrow 

    Sheets("WF - L4 (2)").Cells(i, j).Range.FormulaR1C1 = "=SUMIFS('L4 - Data Sheet'!R4C17:R132C17,'L4 - Data Sheet'!R4C18:R132C18,'WF - L4 (2)'!i,'L4 - Data Sheet'!R4C16:R132C16,'L4 - Data Sheet'R4C1,R132C1,'WF - L4(2)'!R3C1)" 


Next 

Next 

End Sub 

Eğer birisi yardım ederse memnun olurum! Teşekkürler

Ekli, kabaca nasıl göründüğünün görüntüsüdür. Her bir hücrenin sorumu bu formülde var. Adet sütundaki çıktıları tablolamak için iç içe döngü kullanımıyla otomatikleştirmek istiyorum! Ve borçlar alternatif bir düzene giriyor.

+0

Dış For ifadeniz 'For i = olmalıdır 3. sonuncu adım 2 ' – OldUgly

+0

ama alternatif olarak atlayacak mı? Sütunlar 3,5,7 vs ... olduğu için @OldUgly – Niva

+0

'i = 3 ila lastcol Adım 2' i '3,5,7, ...' olacak. Eğer 'Step' belirtilmezse, artışlar 1'dir. – OldUgly

cevap

1

Formülünüzü, verdiğiniz formdan çözdüğümü düşünüyorum. İç içe geçmiş döngü iyi tasarlanmış bir formülle gereksizdir; Sadece bir Dolgu Aşağı gibi tüm hücrelere koymanız yeterli.

Option Explicit 

Sub ShortcutWFCorp4() 

    Dim i As Long, j As Long 
    'cannot use lastrow until there is something in column C 
    Dim lastCol As Long ', lastRow As Long 

    With Worksheets("WF - L4 (2)") '<~~ define it ONCE here 
     'you want to put formulas into all the columns with QTY in row 7 
     lastCol = .Cells(7, Columns.Count).End(xlToLeft).Column 
     'I guess column C is the left-most in your image but you canot 
     'get last row list this until there is something in it 
     'I'll use 21 
     'lastrow = .Cells(21, "C").End(xlUp).Row 
     'columns 3, 5, 7, etc 
     For i = 3 To lastCol Step 2 
      '"=SUMIFS('L4 - Data Sheet'!$Q:$Q, 
      '   'L4 - Data Sheet'!$R:$R, 'WF - L4'!BY$5, 
      '   'L4 - Data Sheet'!$P:$P, $A8, 
      '   'L4 - Data Sheet'!$A:$A, 'WF - L4'!$A$3) 
      .Range(.Cells(8, i), .Cells(21, i)).FormulaR1C1 = _ 
         "=SUMIFS('L4 - Data Sheet'!C17, " & _ 
           "'L4 - Data Sheet'!C18, R5C" & 74 + i & ", " & _ 
           "'L4 - Data Sheet'!C16, RC1, " & _ 
           "'L4 - Data Sheet'!C1, R3C1)" 
     Next i 
    End With 
End Sub 

ilk Miktar C7 olduğunu tahmin etti. Formüllerin 8-21 satırlarına gireceğini söyledin. C sütununda 21. sıraya kadar bir şey yoksa o zaman 'son satır' arandığında anlamsızdı. Bu yüzden 8 ile 21 arası satırlar kodlanmış.

+0

Merhaba, kodun bu kısmı ne anlama geliyor? & 74 + i & "," & _ – Niva

+0

diye düşündüm! Teşekkürler bir ton. – Niva