用R1C1表示法中的HLOOKUP

我正在使用Excel VBA在给定行的末尾插入HLOOKUP函数。 我一直在尝试在VBA中使用R1C1function来插入HLOOKUP函数,该函数在Excel中应该如下所示:

=HLOOKUP(D2,'DM NYASSOV'!3:34,32,0) 

我的问题是,我需要HLOOKUP是足够dynamic的,它可以引用variables从同一行上的HLOOKUP函数将被粘贴。

目前我的VBA读取如下:

 ThisWorkbook.Sheets(selectTab).Cells(r, 21).FormulaR1C1 = "=HLOOKUP(RC[-17],'DM RC[-19]!'RC[2]:RC[3],RC[3]-RC[2]+1,0)" 

RC[-17]引用我正在查找的variables;
RC[-19]是底层的书籍/标签标识符;
RC[2]包含最初的行值,并且
RC[3]包含最后一行参考范围。

我的主要问题是正确识别dynamic范围select:

 'DM NYASSOV'!3:34 / 'DM RC[-19]!'RC[2]:RC[3] 

任何指针,不胜感激。

我想你在这里有几个问题。 首先是使用VBAdynamicbuild立一个公式,然后计算出第三个值,然后在公式中使用,最后计算结果。 对于可以用前端构build的公式或在后端通过VBA计算的值来说,这似乎是一个不必要的周转量。 其次是所有的dynamic查询。 这不是一个问题,而是在你跳过四圈的时候跟踪。 只是一样…

您的HLOOKUP的第一个参数可以是像“SM1804”的值或对包含“SM1804”的单元格的引用。 您可以使用VBA将该值直接带入公式中,并通过在公式处理时查找该值来保存Excel某些处理:

 ThisWorkbook.Sheets(selectTab).Cells(r, 21).FormulaR1C1 = "=HLOOKUP(" & Sheets(selectTab).Cells(r, 21).Offset(0, -17).value & ",'DM RC[-19]!'RC[2]:RC[3],RC[3]-RC[2]+1,0)" 

或者你可以坚持参考单元格(这是你现在正在做的):

 ThisWorkbook.Sheets(selectTab).Cells(r, 21).FormulaR1C1 = "=HLOOKUP(RC[-17],'DM RC[-19]!'RC[2]:RC[3],RC[3]-RC[2]+1,0)" 

在第二个参数上…我相信你在DM!RC[-19]有一个工作表名称DM!RC[-19]这是完全正确的,但是你需要使用'间接'来把表格名称写入HLOOKUP公式中:

 ThisWorkbook.Sheets(selectTab).Cells(r, 21).FormulaR1C1 = "=HLOOKUP(RC[-17],Indirect("'" & DM!RC[-19] & "'!RC[2]:RC[3]"),RC[3]-RC[2]+1,0)" 

…这是事情有点棘手。 例如,如果在DM!RC [-19]中有工作表名称“Sheet1”,那么间接工作将返回:'Sheet1'!RC [2]:RC [3],您的HLOOKUP将使用该范围来执行查找…在两个单元格的范围上做一个HLOOKUP没有太大的意义。 所以我假设你在RC[2]RC[3]有表示行的数值。 所以真正的间接将不得不看起来像:

 ThisWorkbook.Sheets(selectTab).Cells(r, 21).FormulaR1C1 = "=HLOOKUP(RC[-17],Indirect("'" & DM!RC[-19] & "'!R" & RC[2] & "C:R" & RC[3] & "C"),RC[3]-RC[2]+1,0)" 

现在如果你的RC[2]的值是“4”而你的RC[3]的值是“20”,你的间接将返回: 'Sheet1'!R4C:R20C和你的'Sheet1'!R4C:R20C将使用该值作为它的范围会抬头看。

你还在RC[2]RC[3]对这些值进行了一些math计算,所以这可能是很好的,不需要改变。 您只需要将VBA将作为公式返回的内容,然后从“ Indirect获得该公式的内容,然后得出HLOOKUP的结果。

这需要跟踪很多事情,并且可以通过直接在单元格中写入公式并复制下来,或直接在VBA中直接执行HLOOKUPfunction来简化。