2016-04-14 1 views
0

enter image description hereこんにちは、私は91の列を持ち、各列は行8から21(固定)から行を持っています。 91の列には部門ヘッダーが含まれ、行の内容は部門ヘッダーに依存します。列は、列1のC列、列Eの列2、列91列すべてのパターンに従う。私は指定された式"=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)"のネスト化されたループを使用して自動化したいと思いますが、うまくいかないと思います。各列のそれぞれの行範囲を持つ91個の列のセルをハードコーディングするのは非常に退屈な作業です:/これは私が現在行っているハードコードです。Excelの水平データベースにネストされたループ

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 

これはワークシートで試したネストループコードです。

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 

誰かが助けてくれたら分かりますか?おかげで

添付されていると、おおまかなように見えます。各セルには、私の質問に記された数式があります。私は、qty列の出力を集計するためにネストされたループを使用して自動化したい!そして部署は別の順序で行きます。

+0

外部のForステートメントは 'For i = 3からlastcol step 2' – OldUgly

+0

までですが、代わりにジャンプしますか? @OldUgly – Niva

+0

'i = 3〜lastcolのステップ2の場合は' iは '3,5,7、...'になります。 'Step'を省略すると、インクリメントは1になります。 – OldUgly

答えて

1

私はあなたが提供した式から数式を解読したと思います。ネストされたループは、うまく設計された式では不要です。 Fill Downのように一度にすべてのセルに入れるだけです。

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 

私が最初に数量はC7であったと推測しました。あなたは、公式が行8-21に入ると述べました。 C列に21行目まで何かがない場合は、「最後の行」を探すのは意味がありませんでしたので、8行目から21行目までをハードコードしました。

+0

こんにちは、コードのこの部分は何を意味していますか? &74 + i& "、"&_ – Niva

+0

これは分かりました!ありがとうございました。 – Niva

関連する問題