Excel 2013 - 寻找一个宏来为可变长度部分写一个总和

时间:2015-03-25 18:36:29

标签: excel vba excel-vba

我正在尝试找到一个宏,它将为可变数量的行写一个总和公式。

我在一张相当广泛的表格上有很多章节。每个部分都有一列成本,每一部分都需要一笔总和。但是,这些部分的长度是可变的,所以我不能只写一个总和并将其复制/粘贴到每个部分。

部分堆叠如下:

章节标题

  • 1 Data $
  • 2 Data $
  • 3数据$

    萨姆?

章节标题

  • 1 Data $
  • 2 Data $
  • 3 Data $
  • 4 Data $
  • 5 Data $
  • 6 Data $
  • 7 Data $

    萨姆?

我有几百个这样做,而且我不想每次都手动写总和公式。我需要求和的范围的下边界相对于公式单元总是相同的,但是上边界是随机数更高的行。有没有办法让宏自动检测该部分的大小,并仅为该范围求和?

1 个答案:

答案 0 :(得分:0)

此代码块假定每个部分标题以单词"更正"开头。并且部分之间没有空行(因此任何空白单元格都将填充总和公式)。它还假设数据在A列中。如果您的电子表格没有这样设置,您可以调整它以适应您的情况。请注意,此处的错误检查并不多,因此您必须确保电子表格没有任何问题,或者对代码添加错误检查(例如,如果您的电子表格不以段标题开头,您可能会遇到问题,如果您有没有值的部分 - 这是一个部分标题,然后没有数据 - 您将遇到问题)

Dim wksh as worksheet
Dim last_row as long
Dim curr_start as long

set wksh = thisworkbook.worksheets("<your worksheet name>")
last_row = wksh.cells(wksh.Rows.Count, "A").End(xlUp).Row

for i = 1 to last_row + 1
    if wksh.range("A"&i).value=0 or wksh.range("A"&i)="" then
        wksh.range("A"&i).formula = "=SUM(A" & curr_start & ":A" & i-1 & ")"
    elseif left(wksh.range("A"&i).value, 4)="Corr" then
        curr_start = i + 1
    endif
next i