Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel R1C1表示法中的HLOOKUP_Excel_Excel Formula_Vba - Fatal编程技术网

Excel R1C1表示法中的HLOOKUP

Excel R1C1表示法中的HLOOKUP,excel,excel-formula,vba,Excel,Excel Formula,Vba,我正在使用ExcelVBA在给定行的末尾插入一个HLOOKUP函数。我一直在尝试使用VBA中的R1C1功能插入HLOOKUP函数,该函数在Excel中应显示如下: =HLOOKUP(D2,'DM NYASSOV'!3:34,32,0) 我的问题是,我需要HLOOKUP具有足够的动态性,以便它能够引用要粘贴HLOOKUP函数的同一行中的变量 目前,我的VBA内容如下: ThisWorkbook.Sheets(selectTab).Cells(r, 21).FormulaR1C1 = "=HLOO

我正在使用ExcelVBA在给定行的末尾插入一个HLOOKUP函数。我一直在尝试使用VBA中的R1C1功能插入HLOOKUP函数,该函数在Excel中应显示如下:

=HLOOKUP(D2,'DM NYASSOV'!3:34,32,0)
我的问题是,我需要HLOOKUP具有足够的动态性,以便它能够引用要粘贴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]
引用了我正在寻找的变量
RC[-19]
是基础图书/标签标识符
RC[2]
包含初始行值,并且
RC[3]
包含最终行参考范围

我的主要问题是正确识别动态范围选择:

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

非常感谢您的指点。

我想您这里有一些问题。第一种方法是使用VBA动态构建一个公式,然后计算第三个值,该值将用于最终计算结果的公式中。对于一个值来说,这似乎是不必要的排版,该值可以使用前端构建的公式或后端通过VBA计算得出。第二个是所有的动态查找。这并不是什么大问题,而是当你跳过四个篮筐时要注意的很多事情。还是一样

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)"
或者,您可以将对单元格的引用粘贴在其中(这就是您现在所做的):

关于第二个参数。。。我相信您在
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]如果您有sheetname“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
您的HLOOKUP将使用该值作为查找范围

您还在
RC[2]
RC[3]
中对这些值进行一些计算,因此这可能都很好,不需要更改。你只需要在头脑中记住VBA将作为公式返回的内容,然后是该公式将从
Indirect
中得到的内容,然后是得到的
HLOOKUP
将找到的内容


需要跟踪的内容很多,只需在单元格中直接写入公式并向下复制,或者直接在VBA中执行HLOOKUP功能,就可以简化这些内容。

是否需要工作表名称部分保持公式的动态部分?如果是这样,您需要在公式中包含间接函数。RC[-17]中存储的值的示例是什么?是像“A1”这样的单元格引用,还是像“Bob”或“15”之类的值本身?@Rory是的,工作表名称需要保持动态。对于我粘贴的每一行,HLOOKUP函数都可能引用不同的工作表。@JNevill RC[17]引用的是一个值,例如SM1804。只是为了更详细地说明我的文件在做什么。在我的主要参考页签/工作表上,我有一个交易列表,这些交易分配给特定的账簿,并且是针对给定的货币。对于每本书,我都有一个带有前缀“DM”的选项卡/工作表名称,然后是基本的书名。在每本书下都有每种货币的贸易水平细分。参考行将根据基础交易货币而变化。我将尝试上面第四个选项的组合,看看我是否还有运气。我已经准备好了。我将代码修改为以下内容:ThisWorkbook.Sheets(selectTab).Cells(r,21).FormulaR1C1=“=HLOOKUP(RC[-17],'DM“&book&“!r”&Cyrow&“C:r”&npvrow&“C,&npvrow-Cyrow+1&”,0)”
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)"