如何将计算列转换回 Excel 表中的数据列?

RBa*_*ung 6 vba microsoft-excel-2007 worksheet-function microsoft-excel

我有一个很大的 Excel 表(44 列,1000 多行),但其中一列意外地变成了计算列(请参阅此处)。结果是,现在当用户尝试向表格添加新行时(通过向下拖动右下角的手柄),它不恰当地使用此公式填充此列的新行,从而导致电子表格错误。

我已尝试清除该列中每个单元格的内容,我可以找到具有公式的内容,但它仍然将其视为计算列,而不是普通列。

我怎样才能关闭它?如果需要,我可以使用 VBA,但是,我无法摆脱整个表的计算列或自动填充,因为我们广泛使用这两者。


此外,我怎样才能最好地防止用户在未来再次意外这样做?他们应该只在前 10 列中输入数据,而不是公式,但自然他们并不总是按照说明...

tec*_*tle 10

我发现删除大量公式的最快方法是选择列,复制它,然后使用该Paste Values函数将其粘贴到自身上。

至于防止用户再次重复这一点,我知道的唯一方法是使用保护工作保护工作簿功能。这些是否可以适应您的特定场景实际上取决于您要保护的内容以及您仍然需要允许用户执行的操作。但是,通常您可以通过锁定所有其他单元格来限制用户仅编辑某些范围、列或行。如果需要,可以选择允许用户仍然插入新行。不幸的是,我不知道有什么方法可以锁定工作表,以便用户可以输入数据但不能添加公式。

您可以使用数据验证添加输入消息,提醒用户不要输入公式。它不会阻止他们,但至少会不断提醒他们。数据验证也可用于强制他们输入特定的数据类型,但它不会停止提供正确数据类型作为其结果的公式。


更新:

您可以使用 Worksheet_Change 事件明确拒绝 Excel 中的公式,如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Range("C:C"), Range(Target.Address)) Is Nothing Then
        If Range(Target.Address).HasFormula Then
            Range(Target.Address).Value = ""
            MsgBox "You may not enter formulas on this sheet!"
        End If
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

在此示例中,检查公式的范围是整个 C 列。您可以定义要检查的任何范围,然后将公式清空,将其更改为其他内容,警告用户等。