excel数组公式:不必'ctrl-shift-enter'?

时间:2012-09-21 08:06:54

标签: excel excel-2010

按f2编辑数组公式后,例如{= MATCH(TRUE,(B2:B100)> 0,0)},大括号当然消失了。编辑完成后,你必须按ctrl + shift + enter键才能重新出现大括号。

即使您按正常的“输入”,是否有一些设置可以保持{}

同样在复制上面的单元格(即包含数组公式)后,您无法将其粘贴到10 x其他单元格上。您一次只能将其粘贴到一个新单元格上。有没有办法一次粘贴到多个单元格上?

由于

2 个答案:

答案 0 :(得分:2)

只要复制单元格而不是复制公式栏中的公式,数组公式应该复制并粘贴精细并保留其数组。如果向下或向下拖动/填充单元格,它也可以复制。如果你想在拖动时保持B2:B100的范围,那么可以使用$ B $ 2:$ B $ 100来阻止它递增。

F4是一个很好的捷径,可以在这里提供帮助。将光标放在B2:B100上,然后按F4。

如果你想强制执行某些单元格总是保留公式数组我可以想到一个肮脏的解决方法,但我认为它可能有更多的负面而不是正面。

否定:

- 涉及VBA

- 它将清除撤消堆栈/剪贴板

- 这可能更令人困惑

解决方法

标记必须是数组公式的公式,其中的术语对结果没有影响。例如(0*0)+。然后可以检查该术语,并通过代码使其始终为数组公式。

因此您的上述公式变为{=(0*0)+MATCH(TRUE,(B2:B100}>0,0)}

然后在THISWORKBOOK中 enter image description here

输入此代码

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim cell As Range

For Each cell In Target
    If Target.Cells.Count = 1 Then
        If InStr(1, Target.Formula, "(0*0)+", vbTextCompare) And _
            Target.HasArray = False Then
            Target.FormulaArray = Target.Formula
        End If
    End If
Next cell

End Sub

当单元格被更改时,代码将检查术语(0 * 0)+并将其指定为数组公式(如果它不是已存在的那样)。

答案 1 :(得分:2)

有几种方法可以将数组公式转换为“常规”公式 - 这可能对您有所帮助。例如,在这种情况下,添加的INDEX函数意味着可以以正常方式输入公式

=MATCH(TRUE,INDEX(B2:B100>0,0),0)