如何在Excel中强制任何input值转换为负值

如何强制Excel中的任何数字转换为负数?

例如,如果用户在A1中input-10,那么它将不执行任何操作,如果input10,那么它应该将* -1转换为负数。

我已将以下自定义单元格格式应用于整个工作表:#,## 0.00_;(#,## 0.00)表示任何负数显示在括号中。 但A1只能包含一个负数,所以我希望它会自动转换为负数,如果用户input一个正数。

我怎样才能做到这一点?

在工作表代码区域中包括以下事件macros:

Private Sub Worksheet_Change(ByVal Target As Range) Dim A1 As Range Set A1 = Range("A1") If Intersect(Target, A1) Is Nothing Then Exit Sub If IsNumeric(A1) Then If A1 < 0 Then Exit Sub Application.EnableEvents = False A1 = -A1 Application.EnableEvents = True End If End Sub 

不像数据validation,它不会拒绝一个正面的input,它只会使其消极。

编辑#1:

因为它是工作表代码,所以安装和自动使用非常简单:

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. select查看代码 – 这会popup一个VBE窗口
  3. 粘贴东西,closuresVBE窗口

如果您有任何疑问,请先在试用工作表上尝试。

如果您保存该工作簿,该macros将与它一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除macros:

  1. 调出上面的VBE窗口
  2. 清除代码
  3. closuresVBE窗口

要了解有关macros的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解有关事件macros(工作表代码)的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/event.htm

macros必须启用这个工作!

编辑#2:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim negatives As Range, r As Range, rLOOK As Range Set negatives = Range("negatives") Set rLOOK = Intersect(negatives, Target) If rLOOK Is Nothing Then Exit Sub For Each r In rLOOK If IsNumeric(r) Then If r > 0 Then Application.EnableEvents = False r.Value = -r.Value Application.EnableEvents = True End If End If Next r End Sub 

在这里,我们:

  • 得到交集
  • testing交叉路口
  • 在交叉点上循环

您可以使用绝对(正)值的ABS

 =-ABS(A1)