web-dev-qa-db-ja.com

可変長の範囲を合計するには、Excelマクロが必要です

その上に値がある行の数を認識し、その範囲のみを合計できるマクロを作成しようとしています。添付の画像を見ると、セルB4、B10、B21をクリックしてマクロを実行し、その範囲の値のみを合計できるようにする必要があります。

したがって、セルB4の場合、セルB1からB3を合計する必要があることを知るためのマクロが必要です。

セルB10の場合、4つのセルの範囲(B6からB9)を合計する必要があることを自動的に認識するマクロが必要です。

セルB21の場合、合計する範囲が9行(B12からB20)になったことを自動的に識別するマクロが必要です。

Macro use case screen shot

私が使用したマクロは、設定された範囲のセルのみを合計します(たとえば、マクロが実行されるセルのすぐ上の5つのセルのみを合計します(以下のコードスニップを参照)。

Sub Macro22()
'
' Macro22 Macro
' With Relative References turned on.
'
' Keyboard Shortcut: Ctrl+o
'
ActiveCell.FormulaR1C1 = "=SUM(R[-5]C:R[-1]C)"
End Sub

2回目の試行では、マクロがその上のすべてのセルを合計します。

Sub test()
ActiveCell.Value = "=SUM(" & Range(Cells(1, ActiveCell.Column), Cells(ActiveCell.Row - 1, ActiveCell.Column)).Address(False, False) & ")"
End Sub

これも可能ですか?私が見たところ、それは可能であるはずですが、マクロにそれをさせるのは非常に難しいです。

1
Jonathan Hopta

そして、本当にマクロが必要な場合は、これを使用してください(主に ここ から取得、いくつかの改善があります):

Option Explicit

Sub AutoSum()
    Const SourceRange = "C:F"
    Dim NumRange As Range, formulaCell As Range
    Dim SumAddr As String
    Dim c As Long

    For Each NumRange In Columns(SourceRange).SpecialCells(xlConstants, xlNumbers).Areas
        SumAddr = NumRange.Address(False, False)
        Set formulaCell = NumRange.Offset(NumRange.Count, 0).Resize(1, 1)
        formulaCell.Formula = "=SUM(" & SumAddr & ")"

        'change formatting to your liking:
        formulaCell.Font.Bold = True
        formulaCell.Font.Color = RGB(255, 0, 0)

        c = NumRange.Count
    Next NumRange

End Sub

これは、列CからFの数値で機能し、コードの先頭で必要な他の範囲(定数SourceRange)に変更します。

数字の領域が互いに接触しないように注意してください。

1
pgr

マクロの代わりに、AutoSumと呼ばれる機能としてすでにExcelの一部であるように思われます。

カーソルを連続する数字のセット(Excelの場合は領域)の下に置き、AutoSumボタンを押すだけです。 Excelがあなたに代わって数式を考え出します。

AutoSumボタンは、リボンの[ホーム]タブの右端にあり、シグマ()。

これが チュートリアル です。

0
pgr