|
確認ですが月は「A1=1月・・・L1=3月」と入力されていて、
N2以下に横の合計を出す。という形にしたいのですね ?
それならこんな感じでどうでしょうか ?
任意の月の間の計を出せますが、例えば3月(翌年の)から
5月(今年の)までの計は出せません。つまり
「一回目に出てくるInputBoxに入れる月は、一行目の並び順において、
あくまで二回目に出てくるInputBoxに入れる月よりも左になければならない」
という条件が付きます。
あと、合計する行範囲はA列の最大入力行を基準とします。
Sub MyTotal()
Dim Stm As Integer, Lsm As Integer
Dim LR As Long
Dim x As Variant, y As Variant
Const Pmt As String = _
" 1〜12 の数値で入力して下さい"
With Application
Do
Stm = .InputBox("合計する初めの月を" & Pmt, Type:=1)
If Stm = False Then Exit Sub
Loop While Stm < 1 Or Stm > 12
Do
Lsm = .InputBox("合計する最後の月を" & Pmt, Type:=1)
If Lsm = False Then Exit Sub
Loop While Lsm < 1 Or Lsm > 12
x = .Match(Stm & "月", Rows(1), 0)
y = .Match(Lsm & "月", Rows(1), 0)
End With
If IsError(x) Or IsError(y) Then
MsgBox "該当する月が見当たりません", 48: Exit Sub
End If
If x > y Then
MsgBox "指定した月の列順では計算できません", 48: Exit Sub
End If
LR = Range("A65536").End(xlUp).Row - 1
Range("N:N").ClearContents
Range("N2").Resize(LR).FormulaR1C1 = _
"=SUM(R[0]C" & x & ":R[0]C" & y & ")"
With Range("N1")
.Value = Stm & "月〜" & Lsm & "月の計"
.EntireColumn.AutoFit
Application.Goto .Cells(1), True
End With
End Sub
|
|