【问题标题】:Creating a Macro in VBA out of four Excel formulas用四个 Excel 公式在 VBA 中创建宏
【发布时间】:2017-05-14 13:50:08
【问题描述】:

我正在研究如何改进一个每小时更新一次的 Excel 文件。目前,我在工作表中设置了四个索引匹配公式,以自动填充每次在第 2(B) 列中输入一个特定值时输入的一些数据。

最近,我的团队不得不通过授予其他团队对文件的权限来与其他团队共享这些数据。这个团队不是报告团队,所以他们有用公式编辑单元格并导致事情无法正常工作的坏习惯。

我想知道是否有人能够帮助我尝试提出一个可以以相同顺序集成这些公式的 MACRO,这样这些公式就不需要直接在工作簿上并且可能被编辑过。

我对宏比较陌生,目前还没有构建这样的宏。

公式设置如下,工作表名称与Sheet2匹配:

=IFERROR(IF(LEFT(C394,2)="19",INDEX(Sheet2!A:T,MATCH(C394,Sheet2!D:D,0),1),IF(LEFT(C394,1)="3",INDEX(Sheet2!A:T,MATCH(C394,Sheet2!H:H,0),1),INDEX(Sheet2!A:T,MATCH(C394,Sheet2!J:J,0),1))),"")
=IFERROR(IF(LEFT(C394,2)="19",INDEX(Sheet2!A:T,MATCH(C394,Sheet2!D:D,0),3),IF(LEFT(C394,1)="3",INDEX(Sheet2!A:T,MATCH(C394,Sheet2!H:H,0),3),INDEX(Sheet2!A:T,MATCH(C394,Sheet2!J:J,0),3))),"") 
=IFERROR(IF(LEFT(C394,2)="19",INDEX(Sheet2!A:T,MATCH(C394,Sheet2!D:D,0),5),IF(LEFT(C394,1)="3",INDEX(Sheet2!A:T,MATCH(C394,Sheet2!H:H,0),5),INDEX(Sheet2!A:T,MATCH(C394,Sheet2!J:J,0),5))),"")
=IFERROR(IF(LEFT(C394,2)="19",INDEX(Sheet2!A:T,MATCH(C394,Sheet2!D:D,0),6),IF(LEFT(C394,1)="3",INDEX(Sheet2!A:T,MATCH(C394,Sheet2!H:H,0),6),INDEX(Sheet2!A:T,MATCH(C394,Sheet2!J:J,0),6))),"")

结果看起来像这样:

9999999  Department 1   SMITH,ROBERT    JANE DOE    JOHN DOE

9999999 是我们手动输入的值,其他四个值由公式填充。

【问题讨论】:

  • soooooooo 你试过什么?幸运的是,这很容易:D
  • 到目前为止,我只能看到宏的“切换”或“选择”功能,但这些并不是我正在寻找的,因为它需要我把所有列表中第一个字段的 300 多个可能条目,因此请从中进行选择。到目前为止,我已经设置的实际公式正在起作用..我只是希望尽可能用宏替换它们,因为它们似乎在运行时不会减慢工作表本身的进程

标签: vba excel


【解决方案1】:

使用一刀切的公式一次编写所有公式。

range("d394:g394").formula = _
  "=IFERROR(INDEX(Sheet2!$A:$F, MATCH($C394, INDEX(Sheet2!$D:$J, 0, 7-(LEFT($C394,2)="19")*6-(LEFT($C394)="3")*2), 0), CHOOSE(COLUMN(A:A), 1, 3, 5, 6)),TEXT(,))"

您应该能够扩展该范围以包含更多行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多