我对Excel中的Macro函数非常陌生。
我正在使用具有动态列数的表,虽然我可以在Excel中手动进行一些计算,但我试图弄清楚如何在VBA中实现此自动化。
G列(达到)和P列(总百分比类别)之间的列数可能不同,但是计算结果大致相同。
我希望使用Table [Header]指定计算位置,也许是“已实现”右侧和“总百分比类别”左侧的哪一列
总百分比类别:
=对除未分类的所有分类求和
高级班的总百分比:
= SUM Class_1,Class_2,Class_2F和Class_2P一起
这些类中的某些类不会总是出现在数据中,如果缺少这些类,它将对“总类百分比”和“高级中的百分比%”返回#REF错误,所以我希望绕过这个。
这是数据的屏幕截图,显示了所有类。
答案 0 :(得分:0)
此宏假定您的数据是Excel结构化表(如果不是,则备份您的工作簿并考虑选择数据,然后按“ Ctrl” +“ T”将其转换为一个)
自定义代码中的部分:
Sub DoCalcs()
' Declare objects variables
Dim excelTable As ListObject
' Declare other variables
Dim sheetName As String
Dim excelTableName As String
Dim achievedColHeader As String
Dim achievedColNum As Integer
Dim calculationColHeader As String
Dim calculationColNum As Integer
Dim firstColHeader As String
Dim lastColHeader As String
'>>>>>>>>Customize to fit your needs
sheetName = "Sheet1"
excelTableName = "Table1"
achievedColHeader = "Achieved"
calculationColHeader = "Total % Class"
'<<<<<<<<
' Initialize the listobject
Set excelTable = ThisWorkbook.Worksheets(sheetName).ListObjects(excelTableName)
' Get the column number of the first column
achievedColNum = excelTable.HeaderRowRange.Find(achievedColHeader).Column
' Get the column number of the calculation column
calculationColNum = excelTable.HeaderRowRange.Find(calculationColHeader).Column
' Get first and last columns headers of sum's range
firstColHeader = excelTable.HeaderRowRange.Columns(achievedColNum + 1)
lastColHeader = excelTable.HeaderRowRange.Columns(calculationColNum - 1)
' Set the calculation formula in cell
excelTable.DataBodyRange.Columns(calculationColNum).Formula = "=SUM(Table1[@[" & firstColHeader & "]:[" & lastColHeader & "]])"
End Sub