【问题标题】:Formula or VBA for getting this to work?让这个工作的公式或 VBA?
【发布时间】:2011-09-20 02:52:46
【问题描述】:

我正在从模板工作表运行报告,我需要在其中放入一些公式。我使用宏运行报告,因此我不介意在运行工作表的宏中包含 vba 代码,但我也不介意将公式插入模板。工作表从第 1-8 行冻结,数据从第 9 行开始。每个报告的行数不同,具体取决于从主数据表中提取的内容。对于报告中的每一行数据,我需要取 H 列中的值,将该数字除以 80,然后将结果放在同一行的 I 列中。然后我需要在报告末尾的总框中将 I 列中的所有活动行求和(即,如果报告有 25 行数据,则总框在第 26 列的 I 列中)

【问题讨论】:

  • 必须是公式吗?如果这只是一份报告,那么您可以插入文字值吗?您可以在插入每一行时对计算值求和,然后在最后添加总计...
  • 嗯,我现在所做的大部分工作都是为了方便他人使用。我是唯一一个使用主表上原始数据的人;其他人都对分布在大约 30 张纸上的解析信息感兴趣。如果可以的话,我不想将公式插入到每张纸上需要它的每个单元格中。由于我现在使用宏来提取每个工作表的信息,因此我认为如果我可以在现有代码中添加一些内容以执行第一次计算(I10=I9/80)然后将 I 列中的所有内容相加,这可能是最简单的底部的总单元格。
  • 或者如果我必须使用公式,我想在模板中设置它们,这样当我的宏将模板用于所有单独的工作表时,它会在拉取所有工作表时保留公式从主数据表到个人的信息。
  • 很难在现有代码的上下文之外提供建议:“最简单的解决方案”将完全取决于您在宏中所做的事情。
  • 您的问题有……问题吗?

标签: excel vba excel-2007


【解决方案1】:

无论哪种方式听起来都不错,但可能更多的是个人品味。由于生成的电子表格是静态的,我认为 VBA 而不是公式就可以了。

对于 VBA,您可以使用类似于以下内容的内容:

dim dResult() as double

redim dresult(1 to LastRow+1)

for i=1 to lastrow
  if i>1 then
    dresult(i)=dresult(i-1)/80
  else
    dresult(i)='whatever
  end if
next i

  dresult(lastrow+1)=application.sum(dresult)

  wks.range("$I$1","$I$" & lastrow+1)=dresult

这当然是未经测试的,所以你可以随意使用它。另外,你需要找到 lastrow 并给它一个维度(整数或长),你还需要对我没有标注的其他人做同样的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2021-06-29
    • 2021-02-15
    相关资源
    最近更新 更多