代码之家  ›  专栏  ›  技术社区  ›  Steven

Excel对当前单元格的引用

  •  57
  • Steven  · 技术社区  · 15 年前

    如何获取对当前单元格的引用?

    例如,如果要显示A列的宽度,可以使用以下内容:

    =CELL("width", A2)
    

    但是,我希望公式是这样的:

    =CELL("width", THIS_CELL)
    
    11 回复  |  直到 6 年前
        1
  •  32
  •   Community    7 年前

    创建名为“此单元格”的命名公式

    1. 在当前工作表中,选择单元格A1(这很重要!)
    2. 正常开放 Name Manager (CTL+F3)
    3. 点击 New...
    4. 输入“this_cell”(或仅输入“this”,这是我的首选项)到 Name:
    5. 将以下公式输入 Refers to:

      =!A1

      注: 确保选择单元格A1 . 此公式与ActiveCell相关。

    6. Scope: 选择 Workbook .

    7. 点击 OK 然后关闭 名字管理器

    在工作表中按您的要求使用公式

    =CELL("width",THIS_CELL)
    

    编辑: 比使用更好的解决方案 INDIRECT()

    值得注意的是,我给出的解决方案应该比使用 间接() 功能有两个原因:

    1. 它是不易挥发的,而 间接() 是一个易变的Excel函数,因此当大量使用时,它会大大降低工作簿计算的速度。
    2. 它简单得多,不需要转换地址(以 ROW() COLUMN() )指向地址的范围引用,然后再次返回范围引用。

    编辑: 也看到 this question 有关工作簿范围的、与工作表相关的命名范围的详细信息。

    编辑: 也看到 @imix's answer 下面是关于这个想法的变体(使用rc样式引用)。在这种情况下,你可以使用 =!RC 对于 THIS_CELL 命名范围公式,或只使用 RC 直接。

        2
  •  32
  •   Community    7 年前

    太晚了几年:

    为了完整起见,我想给出另一个答案:

    首先,去 Excel选项 -gt; 公式 使能 R1C1参考文献 . 然后使用

      =CELL("width", RC)
    

    RC 始终引用当前行、当前列,即“此单元格”。

    Rick Teachey's solution 基本上是一个调整,使相同的可能 A1参考样式 (也见) GSerg's comment 乔伊的答案和笔记 his comment 帕特里克·麦克唐纳的回答)。

    干杯
    -)

        3
  •  31
  •   Lance Roberts    13 年前

    你可以使用

    =CELL("width", INDIRECT(ADDRESS(ROW(), COLUMN())))
    
        4
  •  24
  •   Code Lღver Ionut Rusen    12 年前

    =ADDRESS(ROW(),COLUMN(),4) 将给出当前单元格的相对地址。 =INDIRECT(ADDRESS(ROW(),COLUMN()-1,4)) 将为我们提供当前单元格左侧的单元格内容 =INDIRECT(ADDRESS(ROW()-1,COLUMN(),4)) 将为我们提供当前单元格上方的单元格内容(非常适合计算运行总数)

    使用 单元格() 函数返回有关上次更改的单元格的信息。因此,如果我们输入新的行或列, 单元格() 引用将受到影响,并且不再是当前单元格。

        5
  •  7
  •   Joey Gumbo    15 年前

    A2 已经是一个相对引用,在移动单元格或复制公式时将发生更改。

        6
  •  5
  •   Cosmin Rus    10 年前

    不带间接(): =CELL("width", OFFSET($A$1,ROW()-1,COLUMN()-1) )

        7
  •  4
  •   Sebasitankg    11 年前
    =ADDRESS(ROW(),COLUMN())
    =ADDRESS(ROW(),COLUMN(),1)
    =ADDRESS(ROW(),COLUMN(),2)
    =ADDRESS(ROW(),COLUMN(),3)
    =ADDRESS(ROW(),COLUMN(),4)
    
        8
  •  1
  •   Jannes    13 年前

    在桌子里你可以用 [@] 不幸的是,Excel自动扩展到 Table1[@] 但它确实有效。(我使用的是Excel 2010)

    例如,当有两列时 [Change] [Balance] 把这个放进 [天平] 专栏:

    =OFFSET([@], -1, 0) + [Change]
    

    请注意,这当然取决于行的顺序(就像大多数其他解决方案一样),所以它有点脆弱。

        9
  •  1
  •   Barry LaBonte    11 年前

    我发现(对我来说)处理这个问题的最佳方法是使用以下方法:

    Dim MyString as String
    MyString = Application.ThisCell.Address
    Range(MyString).Select
    

    希望这有帮助。

        10
  •  1
  •   Ester    10 年前

    有一种更好的方法更安全,不会减慢应用程序的速度。如何设置Excel,单元格可以有值也可以有公式;公式不能引用自己的单元格。您最终会得到一个无限循环,因为新的值会导致另一个计算…。使用助手列根据放入其他单元格的内容计算值。例如:

    A列为真或假,B列为货币值,C列为以下公式: = B1

    现在,要计算B列将以条件格式突出显示为黄色,仅当A列为真,B列大于零…

    =和(A1=真,C1>0)

    然后可以选择隐藏C列

        11
  •  0
  •   Myer    13 年前

    编辑:以下是错误的,因为单元格(“宽度”)返回 上次修改的单元格 .

    Cell("width") 返回当前单元格的宽度,因此不需要对当前单元格的引用。不过,如果你需要的话, cell("address") 返回当前单元格的地址,因此如果需要对当前单元格的引用,请使用 indirect(cell("address")) . 请参阅文档: http://www.techonthenet.com/excel/formulas/cell.php