首页 > 解决方案 > 将字符串公式+变量循环成“真实”公式

问题描述

我正在为我的 Excelsheet 苦苦挣扎。我对单元格 B1 中的x有两个问题,公式如下:

=IF(A1=1,"=INDEX(Sheet1!B:B,MATCH(x,Sheet1!A:A,0))",IF(A1=2,"=INDEX(Sheet1!B:B,MATCH(x,Sheet2!A:A,0))",IF(A1=3,"=INDEX(Sheet1!B:B,MATCH(x,Sheet1!A:A,0))","=INDEX(Sheet1!B:B,MATCH(x,Sheet1!A:A,0))"))) 

(1)

单元格 B1 显示一个“字符串”公式,具体取决于单元格 A1 中的值。理想情况下,我想让x成为我可以用 VBA 定义的变量。

Sub Test() 
Dim rng As Rang, cell As Range
Set rng = Range("A2:A10")
For Each cell In rng 
cell.Formula = "INDIRECT(?)...

Next cell 

这基本上会转化为(如果单元格 A1 = 1):

=INDEX(Sheet1!B:B,MATCH(cell,Sheet1!A:A,0))

理想情况下,我想循环这个。因此,例如,单元格 A2 变为:

=INDEX(Sheet1!B:B,MATCH(A2,Sheet1!A:A,0))

我怎样才能在 VBA 模块中编写这个?

(2)

如果单元格 A2 包含讨论的“字符串”公式,我如何计算它并使其成为硬值?

非常非常感谢你

//// 编辑 ////

因此,在单元格 B1 中,我有以下公式

=IF(A1=1,"=INDEX(Sheet1!B:B,MATCH(",IF(A1=2,"=INDEX(Sheet1!B:B,MATCH(A2,Sheet2!A:A,0))",IF(A1=3,"=INDEX(Sheet1!B:B,MATCH(A2,Sheet1!A:A,0))","=INDEX(Sheet1!B:B,MATCH(A2,Sheet1!A:A,0))")))

在单元格 I1 中,我有以下公式:

=",Sheet1!A:A,0))"

我写了以下宏:

Sub Test_3() 
Dim x As Long, lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

For x = 2 To lastRow
    Address = Cells(x, 1).Address
    xFormula = Cells(1, 2).Value
    yFormula = Cells(1, 9).Value
    Cells(x, 3).Formula = "=INDIRECT(xFormula & Address & yFormula)"
Next
End Sub

此宏的目标是获得以下输出,例如 Cell C3:

=INDEX(Sheet1!B:B,MATCH(A3,Sheet1!A:A,0)

但是,宏的输出是#NAME?使用以下公式:

=INDIRECT(xFormula & Address & yFormula)

我希望这个解释更清楚

标签: excelvba

解决方案


推荐阅读