![如何将计算列重新转换为 Excel 表中的数据列?](https://linux22.com/image/1356288/%E5%A6%82%E4%BD%95%E5%B0%86%E8%AE%A1%E7%AE%97%E5%88%97%E9%87%8D%E6%96%B0%E8%BD%AC%E6%8D%A2%E4%B8%BA%20Excel%20%E8%A1%A8%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E5%88%97%EF%BC%9F.png)
我有一个大型 Excel 表格(44 列,1000 多行),但其中一列意外变成了计算列(看这里)。结果是,现在当用户尝试向表中添加新行(通过向下拖动右下角的手柄)时,它会用此公式不适当地填充此列的新行,从而导致电子表格错误。
我尝试清除此列中我能找到的每个包含公式的单元格的内容,但它仍然将其视为计算列,而不是普通列。
我该如何关闭它?如果需要,我可以使用 VBA,但是,我无法删除整个表的计算列或自动填充功能,因为我们广泛使用这两项功能。
此外,我如何才能最好地防止用户将来再次意外地这样做?他们应该只在前 10 列中输入数据,而不是公式,但他们自然并不总是遵循说明...
答案1
我发现删除大量公式的最快方法是选择该列,复制它,然后使用该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
在此示例中,检查公式的范围是整个 C 列。您可以定义任何要检查的范围,然后清空公式、将其更改为其他内容、警告用户等。
答案2
科技共和有:
Function IdentifyFormulaCellsUsingCF(rng As Range) As Boolean
IdentifyFormulaCellsUsingCF = rng.HasFormula
End Function
可用于突出显示(例如黄色)和格式化(例如“不要使用公式”)带有公式的单元格。
不会阻止输入公式,但会提供比“查找”>“公式”更直接的警告。