我有20张(为简单起见,我们说三张),我需要将每张纸张与一张主要标签相加,其中包含所有数据。每个工作表用于不同的业务实体,但每个工作表具有相同的格式:
我将每月数据插入DATA选项卡,并需要一个宏进入工作表1,2,3等,并针对匹配B列(业务单位代码)的DATA选项卡运行一个sumif。我也将每月运行一次,因此Row3将具有实际或预测。
问题:
然后对于下个月(当数据选项卡被重置时)必须填写下一列。如果它更简单,我可以在活动月份的列中添加另一行X,因此宏可以检查是否存在X该行,然后对该列进行总和。
运行求和很简单,如果将粘贴复制到所有非空白行,然后仅重新复制为值。但是当我有20多张床单时,并不是每个月都需要这样做。
答案 0 :(得分:0)
好的,这里有一个你想做的例子。在这个例子中,我已经把它留给你在本月填写的代码中设置代码。
更改Const ColumnNumber = 4
的值以更改本月填写的列4=D, 5=E etc
(道歉我只在R1C1参考样式中工作)。
FirstRow
似乎总是4,但我已将其保留在那里,以防您需要更改它。
Worksheetfunction.sumif以与正常sumif相同的顺序获取参数,因此我传入数据表的第1列中的范围,与条件相同的行的单元格c,以及数据表的第2列作为和范围。
使用worksheetfunction.sumif
会将值返回到单元格,而不是公式,以便解决数据表被删除和重新创建的问题。
我也留下了让你用其他东西填充绿色行的选项。
Const ColumnNumber = 4
Const FirstRow = 4
Sub LoopSomeSheets()
Dim sht As Worksheet
'go through each sheet in the workbook
For Each sht In ThisWorkbook.Sheets
'ignore the sheet named "data"
If sht.Name <> "data" Then
Dim LastRow As Long
'figure out where the sheet ends
LastRow = sht.cells.SpecialCells(xlCellTypeLastCell).Row
'variable to sum totals
Dim RunningTotal as Double
For i = FirstRow To LastRow
If sht.Cells(i, 3).value = "SUM" Then
'Put the total value in the sum cell
sht.Cells(i, ColumnNumber).value = RunningTotal
'reset the total for the next group
RunningTotal = 0
Else
Dim SumOfData as Double
'get the sumif value
SumOfData = _
WorksheetFunction.SumIf(Sheets("data").Columns(1), sht.Cells(i, 2), Sheets("data").Columns(2))
'add to the running total
RunningTotal = RunningTotal + SumOfData
'then update the cell
sht.Cells(i, ColumnNumber).value = SumOfData
End If
Next i
End If
Next sht
End Sub