在本文中,我们将创建一个自定义函数来计算不同工作表范围内的值之和。

我们将创建三个不同的自定义函数,这些函数将基于工作表名称,工作表编号和工作表引用来计算其他工作表范围内的值总和。

此示例的原始数据由四页组成。每张表格都有每个团队成员在特定日期B7到B16范围内出售的物品数量的详细信息。我们获取了第1天,第2天,第3天和每月的最后一天的数据。

ArrowFirstDay

逻辑解释

在此示例中,我们创建了三个自定义函数:-。 SumBySheetName。 SumBySheetNumber。 SumByOffsetSheetNumber。 SumBySheetName:-此自定义函数将范围和图纸名称作为输入参数。它返回已定义工作表名称的已定义范围内的值的总和。

。 SumBySheetNumber:-此自定义函数将范围和图纸编号作为输入参数。它返回已定义工作表编号的已定义范围内的值的总和。

。 SumByOffsetSheetNumber:-此函数将范围和与活动图纸的偏移量作为输入参数。它返回由偏移索引定义的图纸的定义范围内的值的总和。

工作簿中的每个工作表都显示了第一天,前一天,当前天,第二天和最后一天售出的商品总数。

如果您仔细查看自定义功能,您会发现所有四个页面都使用具有相同参数的相同自定义功能。

自定义功能“ SumBySheetNumber”用于计算第一天售出的商品总数,因为第一张纸始终会携带该月第一天的数据。

自定义功能“ SumByOffsetSheetNumber”用于计算工作簿中的工作表按日期顺序排列的前一天,当前天和第二天售出的商品总数。

自定义功能“ SumBySheetName”用于计算当月最后一天售出的商品总数,因为最后一天的工作表名称始终为“ LastDayOfMonth”。

ArrowSecondDay

ArrowThirdDay

ArrowLastDay

代码说明

WorksheetFunction.Sum WorksheetFunction对象用于从Visual Basic访问Excel工作表函数。我们使用Excel工作表的SUM函数将范围内的值相加。

InputRange.Address上面的代码用于通过“ InputRange”范围对象返回指定范围的地址。

请遵循以下代码

Option Explicit

Function SumBySheetName(InputRange As Range, Optional SheetName As Variant)

'Declaring variable

Dim SheetIn As Worksheet

'Checking whether value is assigned to optional parameter

'IF optional parameter is missing then generate sum for range in the active sheet

If IsMissing(SheetName) Then

SumBySheetName = WorksheetFunction.Sum(InputRange)

Exit Function

End If

'Looping through sheets in the worksheets collection

For Each SheetIn In Worksheets

'Checking whether specified sheet exist in the worksheets collection

If SheetName = SheetIn.Name Then

'Calculating the sum for specified range of the specified sheet

SumBySheetName = WorksheetFunction.Sum(Worksheets(SheetName).Range(InputRange.Address))

Exit Function

End If

Next

SumBySheetName = "Specified Sheet doesn't exist in the workbook"

End Function

Function SumBySheetNumber(InputRange As Range, Optional SheetIndex As Integer = 0)

'Checking whether optional parameter is missing or sheet index is assigned zero value

If SheetIndex = 0 Then

SumBySheetNumber = WorksheetFunction.Sum(InputRange)

'Checking whether sheet index is greater than number of sheets in the workbook

ElseIf SheetIndex > Sheets.Count Then

SumBySheetNumber = "Sheet Index is greater than number of sheets in the workbook"

Else

SumBySheetNumber = WorksheetFunction.Sum(Worksheets(SheetIndex).Range(InputRange.Address))

End If

End Function

Function SumByOffsetSheetNumber(InputRange As Range, Optional SheetOffset As Integer = 0)

'Error Handling

On Error GoTo Last

'Calculating sum

SumByOffsetSheetNumber = WorksheetFunction.Sum(Worksheets(InputRange.Worksheet.Index + _

SheetOffset).Range(InputRange.Address))

Exit Function

Last:

SumByOffsetSheetNumber = "Referred Sheet not exists"

End Function

如果您喜欢此博客,请在Facebook和Facebook上与您的朋友分享。

我们很希望收到您的来信,请让我们知道我们如何才能改善我们的工作并使您的工作更好。写信给我们[email protected]