Excel-选择不同单元格时强制重新计算

Excel-选择不同单元格时强制重新计算,excel,volatility,Excel,Volatility,一点背景: 我最近发现,以下公式返回当前选定单元格的地址(或者如果选择了某个范围,则返回该范围中最左上角单元格的地址): 起初,我认为这个公式对条件格式很有用,因为它可以作为条件的一部分,只对选定的单元格进行格式设置(例如,条件格式规则可能类似于=单元格(“地址”)=地址(行(),列())),但我面临一个障碍 公式是可变的,但可变函数仅在以下情况下更新: 工作表中的单元格已更改 按键盘上的F9键 尽管如此,我的问题是:是否有一种方法可以让一个单元格在鼠标单击选择另一个单元格时自动重新计算?即使是

一点背景:

我最近发现,以下公式返回当前选定单元格的地址(或者如果选择了某个范围,则返回该范围中最左上角单元格的地址):

起初,我认为这个公式对条件格式很有用,因为它可以作为条件的一部分,只对选定的单元格进行格式设置(例如,条件格式规则可能类似于
=单元格(“地址”)=地址(行(),列())
),但我面临一个障碍

公式是可变的,但可变函数仅在以下情况下更新:

  • 工作表中的单元格已更改

  • 按键盘上的F9键

  • 尽管如此,我的问题是:是否有一种方法可以让一个单元格在鼠标单击选择另一个单元格时自动重新计算?即使是易失性单元格也不会因这种情况而更新,因为选择不同的单元格本身不会导致单元格中的任何数据发生更改


    当然,在选择不同的单元格后,可以通过按F9手动更新,但我想知道是否有办法自动执行此操作。

    您可以在VBA中使用工作表_SelectionChange()事件

    打开VBE(Alt+F11),在VBA项目窗格(左上角)中找到工作簿,然后双击工作表

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        'Force this cell to recalculate any time any cell is selected/highlighted
        Range("A1").Calculate
    End Sub
    
    现在,只要在工作表单元格A1上移动,就会重新计算

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    If Not Intersect(Range("A1:D4"), Target) Is Nothing Then
        Range("A1:D4").Interior.Color = xlNone
        Target.Interior.ColorIndex = 6
    End If
    End Sub
    

    现在,仅当所选单元格位于A1:D4

    中时,才会高亮显示所选单元格。创建一个工作表\u SelectionChange事件,强制重新计算。您想重新计算整个工作表还是只计算一个特定单元格?@Gary的学生最好只计算一个特定单元格。理想情况下,像
    =FORCE_RECALC(CELL(“address”)
    这样简单的东西,但我怀疑它会那么简单。@ScottCraner你是怎么做到的?你要我给你代码吗?:)就这么做了。这似乎更新了整个工作表,而不仅仅是单元格
    A1
    。如果我做错了什么,请原谅,我对VBA不太熟悉。据我所知,这是最好的。这可能是A1中的变化触发了工作表的其余部分来计算?那太不幸了。这使得整个工作表变得超级不稳定,因为每当单元格发生变化或选择不同的单元格时,每个单元格都将重新计算。如果我不能很快得到更多的答案,我会接受的。谢谢您的帮助。@ImaginaryHuman072889仅当选择了特定单元格而不是任何单元格时,才可以修改发布的代码以重新计算。@ImaginaryHuman072889所有易失性函数,
    Cells()
    为一,将在每次任何单元格、工作表或工作簿重新计算时重新计算。如果不编写您自己的不易失性的Cells()版本,就无法阻止这一点。
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    If Not Intersect(Range("A1:D4"), Target) Is Nothing Then
        Range("A1:D4").Interior.Color = xlNone
        Target.Interior.ColorIndex = 6
    End If
    End Sub