2016-12-02 240 views
2

如何強制Excel中的任何數字轉換爲負數?如何強制Excel中的任何輸入值轉換爲負數

例如,如果用戶在A1中輸入-10,則它不應該執行任何操作,如果輸入10,那麼它應該將* -1轉換爲負數。

我已經將以下自定義單元格格式應用於整個工作表:#,## 0.00_;(#,## 0.00)表示任何負數都顯示在括號中。但是A1只能包含一個負數,所以我希望它在用戶輸入正數時自動轉換爲負數。

我該怎麼做?

+0

您需要在Worksheet_Change事件中使用vba。 –

+0

難道你不能只使用數據驗證只允許一個整數(或十進制)小於0? –

回答

3

包括在工作表中的代碼區域中的以下事件宏:

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 

與數據驗證,也不會拒絕積極的投入,它只會使它消極。

編輯#1:

因爲它是工作表的代碼,它是非常容易安裝和自動使用:

  1. 右擊附近的Excel底部的標籤名稱窗口
  2. 選擇查看代碼 - 這帶來了一個VBE窗口
  3. 粘貼的東西並關閉VBE窗口

如果您有任何疑慮,請先在試用工作表上嘗試。

如果保存工作簿,宏將與其一起保存。 如果您在2003年以後使用的是Excel版本,則必須將該文件保存爲.xlsm而非 。XLSX

要刪除宏:

  1. 彈出VBE窗口如上
  2. 清晰的代碼進行
  3. 關閉VBE窗口

要了解更多關於宏一般,參見:

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

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

要了解更多有關事件宏(工作表的代碼),請參閱:

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

宏必須爲此工作啓用!

編輯#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 

這裏我們:

  • 得到交集
  • 測試交叉口
  • 環比交集
+0

你將不得不原諒我,我是一個完全的新手,當涉及到VB控制檯...我在哪裏把代碼,然後我怎麼「保存」它,並讓它在我複製完成後運行? – Stotty146

+0

@ Stotty146看我的**編輯#1 ** –

+0

忽略我的最後...我設法玩弄,並找出它! – Stotty146

0

可以使用ABS的絕對(正)值

=-ABS(A1) 
+1

OP想要更改輸入值的單元格中輸入的值。一個公式不會那樣做。 –

+1

同意,在重新閱讀這個問題時,我只是想補充說另一列將是必需的。 – CallumDA

+0

所以我可以讓B2顯示A1的負值,但我怎麼能讓A1自動更新並顯示相同的負值? – Stotty146

相關問題