在VBA中使用“{”字符

我想在VBA中编写一个类似的函数:

=VLOOKUP(“EN878”,CHOOSE({1,2},A2:B5,D2:E5),2,False) 

特别是,在VBA 中使用{}字符的正确方法是什么?

每次我尝试,我得到“编译错误:无效的字符”

我的代码:

variables

 Table3 = Workbooks("gangstar.xlsx").Worksheets("60 in August 2016-26082016-1137").Range("A1:A1000") Table2 = Workbooks("gangstar.xlsx").Worksheets("60 in August 2016-26082016-1137").Range("H1:H1000") For Each cl In Table1 Sheet1.Cells(Dept_Row, Dept_Clm) = Application.WorksheetFunction.VLookup(cl, Choose({1,2}, Table2, Table3), 2, False) Dept_Row = Dept_Row + 1 Next cl 

我可以在Excel电子表格中使用带有CHOOSE罚款的VLOOKUP

请尝试以下操作,这不需要修改或重新计算工作表上的任何单元格:

 WorksheetFunction.VLookup("EN878", WorksheetFunction.Choose(Array(1, 2), Range("A2:B5"), Range("D2:E5")), 2, False) 

如果你想要决定哪个表作为Vlookup数组,你可以使用IIf函数。 喜欢:

 Application.WorksheetFunction.VLookup(cl, IIf(cl.column=1, Table2, Table3), 2, False) 

我build议使用Sheet1.Cells(myRow, myCol).Formula = "=VLOOKUP(...)"接着Sheet1.Cells(myRow, myCol).Calculate

不是一个答案,但是OP所做的并不像看起来那么简单。

鉴于这些数据:

在这里输入图像说明

而这个代码:

 Sub Tester() Dim r r = Application.Evaluate("CHOOSE({1,2},A1:B5,E1:F5)") Dumper r End Sub Sub Dumper(arr) Dim r, c, s, v For r = 1 To UBound(arr, 1) s = "" For c = 1 To UBound(arr, 2) v = arr(r, c) s = s & vbTab & IIf(IsError(v), "Err!", v) Next c Debug.Print s Next r End Sub 

这是输出:

 A1 F1 A2 F2 A3 F3 A4 F4 A5 F5 

这是你所期望的吗?

我会使用range.formulaR1C1属性。

 Table3AddressR1C1 = Workbooks("gangstar.xlsx").Worksheets("60 in August 2016-26082016-1137").Range("A1:A1000").address(,,xlR1C1, true) Table2AddressR1C1 = Workbooks("gangstar.xlsx").Worksheets("60 in August 2016-26082016-1137").Range("H1:H1000").address(,,xlR1C1, true) Sheet1.Range(Cells(1, Dept_Clm), Cells(Table1.rows.count, Dept_Clm)).FormulaR1C1 = "=VLookup(RxCx, Choose({1,2}, Table2AddressR1C1, Table3AddressR1C1), 2, False)"