【问题标题】:VBA Function. Running Cumulative Costs across multiple sheetsVBA 函数。跨多个工作表运行累积成本
【发布时间】:2017-11-23 02:46:59
【问题描述】:

很久了,第一次。

我正在为油气田工作中的修井机创建一张工作表。每张纸的结构相同,但代表不同的工作日。我有在需要新的日子时添加和减去工作表的按钮,这使我的主要问题变得复杂:

我需要创建一个函数来计算工作簿中该表的各种类别的累积成本。我需要一种方法来引用与包含函数的单元格相邻的单元格(包含当天的成本),以及前一张纸的累积成本(或每张前一张纸的每日成本,在同一张纸后面的同一单元格中)来创建一个新的累积值。我希望每张纸的累积到那天为止。

子程序会更有利于这一点,但我不希望有人必须单击按钮才能在这些单元格中生成累积值。它需要随着信息的增加而自动计算。

到目前为止,我所拥有的如下。工作表由工作的编号日期(1、2、3、4 等)命名,每个工作表中的单元格 AD7 也包含工作当天的值。基本上我需要的是一种“每天”提取和使用输入单元格地址的方法。

Function Cat_Cum(daily)
Dim day, i As Integer
day = Cells(7, 30)

For i = 1 To day
    If i = 1 Then
        Cat_Cum = Sheets(i).Cells(daily.Address)
    Else
        Cat_Cum = Sheets(i).Cells(daily.Address) + Cat_Cum
    End If

Next i

End Function

回顾工作表结构:

2 列:每日费用、累计费用。 每张纸的结构都相同。 累积值应该是同一单元格中每个先前工作表的每日值的总和。

感谢您的帮助!

【问题讨论】:

  • 您的函数名称是我建议开发人员不要缩写标识符的众多原因之一。使用自动完成/智能感知/whatever_you_want_to_call_it,长(描述性)名称不再是问题。
  • 哈,我什至没有注意到这一点。带有长 u 的 Cum 是石油和天然气行业中经常使用的一个词,作为累积的替代词。这是一个有趣的组合。

标签: vba excel


【解决方案1】:

IIUC 你希望你的 UDF 是这样的:

Public Function Cat_Cum(daily As Range)
  Cat_Cum = daily.Value2
  If Application.caller.Parent.Name = "1" Then Exit Function

  Cat_Cum = Cat_Cum + _
    Worksheets(CStr(Application.caller.Parent.Name - 1)).Range(Application.caller.Address).Value2
End Function

所以在每个名为“1”、“2”、“3”等的工作表中,在您键入的累积列中,=Cat_Cum(A2) 在第 2 行并填写下来。如果是另一列,请将每日资料的列替换为A

【讨论】:

  • 谢谢,这是完美的。 application.caller.address 部分是关键,我以前从未见过。
猜你喜欢
  • 1970-01-01
  • 2022-07-20
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多