2017-09-26 157 views
0

我使用Excel-2010和Excel-2013。我想要做下面的事情。某些指定單元格的Excel單元格計算

無論我在單元格中輸入的數字是多少,該數字必須除以60,並且結果應該在按TAB時打印在同一個單元格中。如果我回到這個單元格,輸入的數字應該重新出現,而不是計算結果。

我從Kresimir L here得到了很好的答案。但我無法將自己的邏輯應用於我自己的要求。我的Excel工作表看起來如下:

I want like this

,用戶必須輸入自己的努力,對給定的日期。 (現在請忽略顏色編碼)。例如,如果用戶輸入了,這意味着某個日期爲45分鐘,那麼應該將該單元格轉換爲0.75,該格式爲小時格式。請注意,這個計算不是所有行都需要的,除了第12,14,16,18,20排等。

還有一件事,這個工作表是2017年的。我需要在未來連續幾年應用這種技術也。因此,如何讓這個公式適用於多個工作表?

我對Excel編程知之甚少。由於公司安全政策,我無法打開大部分網站。

任何人都可以請幫助我!

+0

*如果我回來這個細胞,輸入的號碼應該重新出現,計算的不是結果。* - 這部分將是非常棘手的實施,將需要VBA和一些擴展認爲如何你需要捕捉它,以及有多少變化和所有這些,這超出了SO Q&A論壇的範圍。 –

+0

@ScottHoltzman - 它會很複雜,但是如何將''工作表變更'/'選擇'存儲在一個單獨的(可能是隱藏的)工作表中的前一個號碼? @OP - 如果用戶在單元格中按下「ENTER」而不是「TAB」會怎麼樣? – BruceWayne

+0

爲什麼當你離開細胞時需要轉換它?爲什麼不把它作爲輸入? –

回答

0

我能夠在多個輝煌的幫助下實現這個解決方案。從不同的人收集不同的答案,形成下面的答案。張貼他人的參考誰是真正的需要。

Option Explicit 

Dim DivRg1, DivRg2, DivRg As Range 

Private Sub Worksheet_Change(ByVal Target As Range) 
    On Error Resume Next 
    Set DivRg1 = Sheet14.Range(Cells(10, 1), Cells(10, 20)) 
    Set DivRg2 = Sheet14.Range(Cells(12, 1), Cells(12, 20)) 
    Set DivRg = Application.Union(DivRg1, DivRg2) 
    'For Each element In DivRg 
     'MsgBox element 
    'Next 
    If (Target > 2) Then 
     Application.EnableEvents = False 
     Target = Target/60 
     Target = WorksheetFunction.Floor(Target, 0.01) 'Rounding the result to two decimals 
     'Target.Offset(0, 5).Value = 1 
     Application.EnableEvents = True 
    End If 
    Set DivRg = Nothing 
End Sub 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    On Error Resume Next 
    Set DivRg1 = Sheet14.Range(Cells(10, 1), Cells(10, 20)) 
    Set DivRg2 = Sheet14.Range(Cells(12, 1), Cells(12, 20)) 
    Set DivRg = Application.Union(DivRg1, DivRg2) 

    Dim iSect As Range 
    Set iSect = Application.Intersect(Target, DivRg) 'Here, iSect gives me the value in the cell 
    If Not (iSect Is Nothing) And (iSect < 2#) Then 
     Application.EnableEvents = False 
     iSect = iSect * 60 
     If (iSect = 0) Then iSect = Empty 
     Application.EnableEvents = True 
    End If 
    Set DivRg = Nothing 
End Sub