Jac*_*lda 3 excel vba excel-vba excel-formula excel-2010
各位大家好,感谢你提前帮忙,
我有一张excel表,仅用于获取多张纸的总和.最好也是最简单的说,公式是这样的=sum(Sheet1!A1,Sheet2!A1,Sheet3!A1,Sheet4!A1).但有一些问题使问题复杂化.首先,我不知道要总和的床单的数量或顺序,也不知道他们的名字.这个公式将被复制到~150个其他单元格中,因此我需要动态求和,而不是每次都将表格物理地添加到~150个单元格.(此外,工作表的配置和命名也不允许轻松拖动公式.)
首先,我想我可以用indirect()引用来编写它.我做了一个列来列出将添加到每个单元格中的所有工作表名称.不幸的是,concatenate()不能在数组上使用,所以我不得不求助于下面的UDF:
Function CONCAT(Delimiter As Variant, ParamArray CellRanges() As Variant) As String
Dim Cell As Range, Area As Variant
If IsMissing(Delimiter) Then Delimiter = ""
For Each Area In CellRanges
If TypeName(Area) = "Range" Then
For Each Cell In Area
If Len(Cell.Value) Then CONCAT = CONCAT & Delimiter & Cell.Value
Next
Else
CONCAT = CONCAT & Delimiter & Area
End If
Next
CONCAT = Mid(CONCAT, Len(Delimiter) + 1)
End Function
Run Code Online (Sandbox Code Playgroud)
使用UDF,我可以使用正确的语法获得一个大字符串,例如=CONCAT("'!A"&(B1+1)&",'",Array_of_Sheets)&"'!A"&(B1+1).在CONCAT()采用分离器作为第一个参数和所述阵列(一个或多个)作为第二个参数.然后我在字符串的末尾添加"分隔符"以输出诸如的字符串Sheet1'!A1,'Sheet2'!A1.我想在这一点上,一个简单=sum(indirect(STRING))就足够了,但是=sum(indirect("Sheet1!A1,Sheet2!A1,Sheet3!A1,Sheet4!A1"))因为indirect()看似不能处理逗号所以不起作用.
因此,要解决这个问题,我切换=CONCAT()到=CONCAT("'!A"&(B1+1)&"+'",Array_of_Sheets)&"'!A"&(B1+1)输出Sheet1'!A1+'Sheet2'!A1.现在我写了另一个UDF来迫使它评估如下所示:
Function EVAL(RefCell As String)
Application.Volatile
EVAL = Evaluate(RefCell)
End Function
Run Code Online (Sandbox Code Playgroud)
这有效!太棒了吧?经过一些使用和测试后,似乎不太一致.当我们打开其他工作表时,它并不总是评估(我们将打开其他工作表).我volatile在UDF中使用时读到了一些其他的不一致,但我找不到它们.
所以对于我的理想,我想在没有任何VBA的情况下这样做,但我怀疑这是不可能的.我宁愿不依赖于用户手动重新计算工作表(部分原因volatile).最后,我只想sum()以一致的方式使用它,因此如果用户打开文档并且只是打印,则用户无需确认函数是否正确评估(检查#REF错误或手动添加值以确保他们是对的).我希望找到使用这个eval()等式的替代方案.
编辑以下附加信息
我曾尝试过使用3D数组,但我遇到了一些问题.可以说工作簿有八张.在这八张纸中,只有两张可以送入这张纸.有一张setup纸,total一张纸,一张data entry纸和一张data analysis纸.所述total片合计断的data analysis片材.通常,data entry纸张与纸张重合data analysis.因此,用户可以复制纸张data entry和data analysis纸张.纸张的最合乎逻辑的顺序将从纸张开始setup,然后是纸张data entry和data analysis纸张的每个配对total.显然,此设置不适用于3D阵列.我们必须重新排序纸张并确保用户知道纸张的顺序实际上是重要的(非典型配置).还会出现一张或两张data analysis纸不包含在total纸张中的情况.所以我们最终可能会得到一个表格配置setup \ data entry (1) \ data entry (2) \ START \ data anaylsis (1) \ data analysis (2) \ END \ totals \ data entry (3) \ data entry (4) \ data anaylsis (3) \ data analysis (4).我的感觉是,3D阵列配置几乎会使添加过于动态.我宁愿有一个明确的列表,然后依赖于用户有信心移动工作表以获得正确的总数.
| 归档时间: |
|
| 查看次数: |
5522 次 |
| 最近记录: |