工作表函数中单元格,列和行的自引用

| 在Excel的工作表函数中,如何自引用您所在的单元格,列或行? 请注意,这对于条件格式非常有用。     
已邀请:
        F13是您需要引用的单元格:
=CELL(\"Row\",F13)  yields 13; its row number

=CELL(\"Col\",F13)  yields 6; its column number;  

=SUBSTITUTE(ADDRESS(1,COLUMN(F13)*1,4),\"1\",\"\") yields F; its column letter
    
        为了使单元格自我参照:
INDIRECT(ADDRESS(ROW(), COLUMN()))
为了使单元格自引用其列:
INDIRECT(ADDRESS(1,COLUMN()) & \":\" & ADDRESS(65536, COLUMN()))
为了使单元格自引用其行:
INDIRECT(ADDRESS(ROW(),1) & \":\" & ADDRESS(ROW(),256))
or
INDIRECT(\"A\" & ROW() & \":IV\" & ROW())
数字适用于2003年或更早版本,对于2007+,请使用column:XFD和row:1048576。 注意:INDIRECT函数是易失性的,仅应在需要时使用。     
        我看不到需要间接,尤其是条件格式。 自引用单元格,行或列的最简单方法是正常引用它,例如,单元格A1中的\“ = A1 \”,并使引用部分或完全相对。例如,在用于检查各个单元格行的第一列中是否存在值的条件格式公式中,输入以下内容并突出显示A1并根据需要复制。条件格式将始终引用每个单元格行的A列:
= $A1 <> \"\"
    
        对于非易失性解决方案,对于2007年以后的情况如何:
for cell    =INDEX($A$1:$XFC$1048576,ROW(),COLUMN())
for column  =INDEX($A$1:$XFC$1048576,0,COLUMN())
for row     =INDEX($A$1:$XFC$1048576,ROW(),0)
我在Excel 2010上有一个奇怪的错误,它不接受这些公式的最后一行或最后一行(行1048576和XFD列),因此您可能需要简短地引用一下。不确定其他版本是否相同,请感谢反馈并进行编辑。 并在2003年(INDEX在\ '97变为非易失性):
for cell    =INDEX($A$1:$IV$65536,ROW(),COLUMN())
for column  =INDEX($A$1:$IV$65536,0,COLUMN())
for row     =INDEX($A$1:$IV$65536,ROW(),0)
    
        有一种更好的方法是更安全的,并且不会降低应用程序的速度。如何设置Excel,单元格可以具有值或公式;该公式不能引用其自己的单元格。否则,您将陷入无限循环,因为新值将导致另一次计算...。 使用帮助器列可根据您在其他单元格中输入的内容来计算值。 例如: A列是对还是错,B列包含货币值,C列包含以下公式:
=B1
现在,仅当列A为True并且列B大于零时,要计算出列B将以条件格式突出显示为黄色...
=AND(A1=True,C1>0)
然后,您可以选择隐藏C列     
        在VBA工作表函数UDF中,您可以使用Application.Caller来获取包含调用UDF的公式的单元格区域。     
        我当前的列是通过以下方式计算的: 方法1:   = LEFT(地址(ROW(),COLUMN(),4,1),LEN(地址(ROW(),COLUMN(),4,1))-LEN(ROW())) 方法2:   =左(地址(行(),行(),4,1),整数((行()-1)/ 26)+1) 我当前的行是通过以下方式计算的:   = RIGHT(地址(ROW(),COLUMN(),4,1),LEN(ROW())) 因此,间接链接到Sheet2!我的列,但在我行的列A中指定的另一行是: 方法1:   = INDIRECT(\“ Sheet2!\”&LEFT(ADDRESS(ROW(),COLUMN(),4,1),LEN(ADDRESS(ROW(),COLUMN(),4,1))-LEN(ROW()) )&INDIRECT(地址(ROW(),1,4,1))) 方法2:   = INDIRECT(\“ Sheet2!\”&LEFT(ADDRESS(ROW(),COLUMN(),4,1),INT((COLUMN()-1)/ 26)+1)&INDIRECT(ADDRESS(ROW(),1 ,4,1))) 因此,如果A6 = 3并且我的行是6而我的Col是C,则返回\“ Sheet2!C3 \”的内容 因此,如果A7 = 1并且我的行是7而我的Col是D,则返回\“ Sheet2!D1 \”的内容     
        我一直在寻找解决方案,最初使用了此页上的间接解决方案,但是对于我想做的事情,我发现它很长而且很笨拙。经过一些研究,我发现了使用R1C1表示法(针对我的问题)的更优雅的解决方案-我认为,即使不使用VBA,也无法混合使用不同的表示法样式。 根据您要使用自引用单元格的方式,类似以下示例的示例应使一个单元格引用自身,其中单元格为F13:
Range(\"F13\").FormulaR1C1 = \"RC\"
然后,您可以引用相对于该单元格相对位置的单元格,例如--您的单元格为F13,则需要从中引用G12。
Range(\"F13\").FormulaR1C1 = \"R[-1]C[1]\"
您实际上是在告诉Excel找到F13,然后从中向下移动1行并向上移动一列。 如何适合我的项目是在一个查找值相对于该范围内每个单元格的范围内应用vlookup,而不必分别指定每个查找单元格:
Sub Code()
    Dim Range1 As Range
    Set Range1 = Range(\"B18:B23\")
        Range1.Locked = False
        Range1.FormulaR1C1 = \"=IFERROR(VLOOKUP(RC[-1],DATABYCODE,2,FALSE),\"\"\"\")\"
        Range1.Locked = True
End Sub
我的查找值是DIM \'范围内每个单元格(列-1)左侧的单元格,而DATABYCODE是我要查找的命名范围。 希望这有点道理?认为值得把它作为解决问题的另一种方式。     
仅用于行,但尝试引用所选单元格正下方的一个单元格,并从行中减去一个。
=ROW(A2)-1
产生单元格A1的行(此公式将进入单元格A1中。 这样可以避免所有indirect()和index()的使用,但仍然可以使用。     

要回复问题请先登录注册