1

マクロを実行するたびに調整する必要がある =SUMIF 式があります。式の 3 番目の部分である合計範囲は、毎回 1 列ずつシフトする必要があります。これを月に 1 回実行します (各列は 1 か月を表します)

LngCntうまく機能する変数を使用するようにアドバイスを受けました。しかし今、私は同じワークシートにさらに 3 つのセクションを追加することを余儀なくされました。これらはすべて =SUMIF 式を使用し、すべてマクロを実行するたびに調整する必要がありますが、合計範囲が異なります (したがって、異なる列からプルされます)。

同じ変数を実行しようとしましLngCntたが、カウントが保存されるという問題にすぐに遭遇したため、計算前に 2 番目のセクションのカウントが 2 から始まりました。+2 が適切な列になるように開始点を調整することもできますが、問題は、これを毎月行う必要があることです。ワークブックを閉じるたびにカウントがリセットされるため、2 か月目に行って実行すると、正しく実行されません。

元の投稿のリンクは次のとおりです: Excel-Macro Help: LngCnt

コードの一部を次に示します (4 つのセクションのうちの 2 つ)。

    ActiveCell.FormulaR1C1 = "=SUMIF('Worksheet1'!R5C1:R159C1,RC1,'Worksheet1'!R5C" & 13 + LngCnt & ":R159C" & 13 + LngCnt & ")"
LngCnt = LngCnt + 1
Range("B13").Select
Selection.AutoFill Destination:=Range("B13:B17"), Type:=xlFillDefault
Range("B13:B17").Select
Range("B23").Select

ActiveCell.FormulaR1C1 = _
    "=SUMIF('Worksheet2'!R3C6:R47C6,RC1,'Worksheet2'!R3C" & 16 + LngCnt & ":R47C" & 16 + LngCnt & ")"
LngCnt = LngCnt + 2
Range("B23").Select
Selection.AutoFill Destination:=Range("B23:B32"), Type:=xlFillDefault
Range("B23:B32").Select

アップデート

> Public LngCnt As Long
Sub Actual()
'
' Actual Macro
'
LngCount = ActiveWorkbook.Names("state").Value

    ActiveCell.FormulaR1C1 = "=SUMIF('Workbook1'!R5C1:R159C1,RC1,'Workbook1'!R5C" & 13 + LngCnt & ":R159C" & 13 + LngCnt & ")"
    LngCnt = LngCnt + 1
    Range("B13").Select
    Selection.AutoFill Destination:=Range("B13:B17"), Type:=xlFillDefault
    Range("B13:B17").Select
ActiveWorkbook.Names("state").Value = LngCnt
End Sub
4

2 に答える 2

4

この変数をセルに直接割り当てることなくワークブックに保持する別の方法は、名前付き変数を使用することです。Formula リボンから Names Manager を開き、「state」という新しい名前を追加します。この時点で任意の値を指定できます。VBA を変更して更新します。

ネームマネージャー

次に、コードで、次のようにして、この「変数」に値を割り当てることができます。

ActiveWorkbook.Names("state").Value = LngCnt

次の方法で値を取得できます。

LngCount = ActiveWorkbook.Names("state").Value

アップデート

Public LngCnt As Long
Sub Actual()
'
' Actual Macro
Dim startRange as Range: Set startRange = Range("B13")
    LngCnt = Replace(ActiveWorkbook.Names("state").Value, "=", "")
    startRange.FormulaR1C1 = "=SUMIF('Workbook1'!R5C1:R159C1,RC1,'Workbook1'!R5C" & 13 + LngCnt & ":R159C" & 13 + LngCnt & ")"
    LngCnt = LngCnt + 1
    startRange.AutoFill Destination:=Range("B13:B17"), Type:=xlFillDefault
    'Range("B13:B17").Select  '## I comment this line because I don't think its necessary.
    ActiveWorkbook.Names("state").Value = LngCnt

End Sub

マクロを 2 回実行した後、保存された Name("state") の値は です2。ワークブックを保存して閉じ、再度開き、まだであることを確認します2

スクリーンショット

于 2013-06-19T17:54:22.967 に答える
1

「状態」を維持する最良の方法の 1 つは、状態が格納されているセルを用意してから、

sheets("state").range("a1").Value

値を取得し、

sheets("state").range("a1").Value = 1

値を 1 に設定します。

元のシートにスペースがある場合は、新しいシートは必要ありません。それに応じて更新するだけです

于 2013-06-19T17:45:40.220 に答える