![Excel 中的相对引用](https://linux22.com/image/1630587/Excel%20%E4%B8%AD%E7%9A%84%E7%9B%B8%E5%AF%B9%E5%BC%95%E7%94%A8.png)
我有一张表格,其中有一些缺失值。对于每一行,我需要根据空白右侧最接近的值来填充空白。
我可以找到一个可以解决问题的代码块 -
ActiveSheet.UsedRange.SpecialCells(xlBlanks).FormulaR1C1 = "=IF(COUNTA(RC[1]:RC[" & ActiveSheet.UsedRange.Columns.Count & "]),RC[1],"""")"
问题是我无法弄清楚这一点 - RC[" & ActiveSheet.UsedRange.Columns.Count & "]。虽然我知道它在做什么(我们正在从右侧单元格开始检查 usedrange 的最后一列,看是否有任何单元格中有值),但这种语法对我来说是全新的。我无法理解这种相对引用是如何工作的,以及为什么引号中有两个 & 符号。
另外,这是否RC[1]
意味着值从表格的右端开始填充?因为如果我们假设单元格 - 第一行,第五列 - 我们会看到右边相邻的单元格也是空的,所以RC[1]
应该给出空白。但如果执行从最后一列本身开始然后向左移动,则不会发生这种情况。
答案1
“与”符号用于连接两个字符串。
在此:
"=IF(COUNTA(RC[1]:RC[" & ActiveSheet.UsedRange.Columns.Count & "]),RC[1],"""")"
你有这个:
"=IF(COUNTA(RC[1]:RC["
与此连接(隐式转换为字符串):
ActiveSheet.UsedRange.Columns.Count
与此连接:
"]),RC[1],"""")"
请注意,这也会起作用:
ActiveSheet.UsedRange.SpecialCells(xlBlanks).FormulaR1C1 = "=IF(RC[1]<>"""",RC[1],"""")"
该公式的全部含义是“如果此单元格右侧的单元格中有值,则使用该值。否则,将此单元格留空”。
原始公式只是说“如果此单元格右侧的单元格与使用范围的右边缘之间有多个空单元格,则使用此单元格右侧的单元格”。