EXCEL合并标头下最后一列的Sum值

时间:2017-03-10 18:51:27

标签: excel vba excel-vba

我有像#34; Picture1"下面是每月重复多个列的情况,我希望将所有值汇总在名为"剩余成本"的列下。但是基于它上面的合并单元格中的月份值。

例如,如果我在2017年2月的单元格A1中输入,我想要对列中的值进行求和"剩余成本"在2017年2月的合并单元格下,如下图所示,ES11中的值为:ES105,如果我在单元格A1中输入2017年3月,我需要公式总和FA11:FA105

问题在于,我似乎无法找到每个月下的最后一列,也无法知道月份表中的最后一行是什么。

你能告诉我最好的方法来完成我需要的东西吗?因为我是VBA的新手,无法找到任何excel公式组合来实现这一目标。

Picture1

我发现了一个代码,我调整它以获得目前为止所需列中的第一个单元格 代码是:

import sys
time = input().strip().split(":")
y=0
if (time[2][2:]=='PM'):
    k=int(time[0])
    if(k!=12):
       y=k+12
else: 
   k=int(time[0])
   if(time[0]==12):
      y=0;
if k==0:
   tf=["00:",time[1],":",time[:2]]
else:
   tf=[str(y),":",time[1],":",time[:2]]
print(''.join(tf))    

End Sub

我现在需要的是弄清楚如何获得最后一行的数字,其余的应该很容易。

我想我已经结束了

3 个答案:

答案 0 :(得分:0)

希望这有帮助。

Sub locate_column_n_row()
    Dim nextMonth As Range
    Dim thisMonthColumn As Long
    Dim thisMonthRow As Long


    'Use Find function to locate the next month.
    'To find the desired column for February, you must search for March.
    'In your example this will return Range("ET8"):
    Set nextMonth = Rows(8).Find("March 2017", LookIn:=xlValues, lookat:=xlPart)
    'Now find the desired column of the previous month. In your example subtract by 4:
    thisMonthColumn = nextMonth.Column - 4

    'The following expression returns the row of the last-cell-that-has-a-value in a given column.
    thisMonthRow = Cells(Rows.Count, thisMonthColumn).End(xlUp).Row
    'I think this will locate the last row in the month table,
    'on condition that every other cell under this (in this column), doesn't have any values.
End Sub

答案 1 :(得分:0)

我写了一个解决方案来做这个技巧,即使我的VBA技能很差,现在提醒只是通过参数提供s的值并返回x的值并将此代码称为普通的excel函数

 Sub Sum_Specific_Month()
Dim FoundR As Range, Av As Range, StartR As Range, SumR As Range
Dim s As String, x
Dim lRow As Long

s = "February 2017 (IN/OUT)"
Set FoundR = Rows(8).Find(s, LookIn:=xlValues)

If Not FoundR Is Nothing Then
    Set Av = FoundR.MergeArea

    Set StartR = Av.Offset(3).Resize(, Av.Columns.Count)
    Set StartR = StartR.Cells(StartR.Rows.Count, StartR.Columns.Count)
    Set SumR = Range(StartR, StartR.End(xlDown))
    x = Application.WorksheetFunction.Sum(SumR)
    Range("EN3").Value = x

End If

End Sub

答案 2 :(得分:-1)

你可以制作一个这样的小桌子:

Month - Column 
---------------
February - "ES"
March - "FA"

然后,使用VLOOKUP根据月份获取列,并使用INDIRECT函数进入SUM以设置范围

我清楚了吗?