2015-11-04 28 views
0

我使用工作表進行項目計劃,其中有一個名爲「狀態」的列,我可以從下拉菜單中選擇「完成」或「打開」。在另一個單元格中,我輸入了我的ECD(預計完成日期)。凍結日期,一旦輸入?

我想將任務的狀態設置爲「完成」,另一個名爲ACD(實際完成日期)的單元應顯示當前日期並在此之後凍結單元格。使用TODAY或NOW功能將每天都會更改日期。

有沒有可以爲我做的公式或腳本?

+0

你需要使用VBA,看一下[工作表更改(https://msdn.microsoft.com/en-us/library/office/ff839775.aspx)事件,你可以有一個宏來檢查你的單元格,看看數據是否已經改變,如果它有'Today()'或'Now()',則複製/粘貼值。 – BruceWayne

+0

反過來做。在ACD中CTRL +';',然後在單元格不爲空時將狀態填充爲「完成」。 – pnuts

+0

這是工作表https://docs.google.com/spreadsheets/d/1r5419_lbu116hPehz17KYs_CMRmZwtihJJQVLWmJuZ0/edit#gid=0 –

回答

0

承擔的「做」是在細胞A1和日期/時間在B1

=IF(A1="Done",IF(LEN(B1)>0,B1,NOW()),"") 

但是,你需要打開迭代

也如果刪除「完成」細胞會空再次

0

你在找什麼是一個宏,而不是一個公式。此解決方案假設您的ECD列爲'A'(列1),那麼您的狀態列爲'B'列(列2)

步驟1)按Alt + F11,這將打開VBA中的代碼編輯器。

步驟2)複製和粘貼下面的代碼到您的「片」您的公式駐留英寸

步驟3)保存工作簿作爲一個啓用宏的電子表格。 (XLSM)。

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim cell As Range 
    If (Target.Columns.Count = 1 And Target.Column = 2 And Target.Rows.Count = 1) Then 
     'Check every row, currently this will get executed once 
     For Each cell In Target.Cells 
      'Make sure the value is set to 'done' 
      If (UCASE(cell.Value) = "DONE") Then 
       'Using the current modified row, set column 1 to Today 
       'Note: Now() is the same as Today in VBA 
       Target.Worksheet.Cells(cell.row, 1).Value = Now()    
      End If 
     Next cell 
    End If 
End Sub 

注意:如果只有一個單元格被設置爲'完成',該宏纔會被執行。您可以通過刪除FIRST'if'語句的'Target.Rows.Count = 1'部分將其更改爲在多個單元格上工作。如果您通過單擊並將「完成」值拖動到多個單元格來「擴展」,則可能會發生這種情況。注2:如果您想分配一次日期,並且防止日期不斷變化,即使您將該字段再次修改爲「完成」。將最後一條'if'聲明更改爲以下內容:

If (UCASE(cell.Value) = "DONE" And Target.Worksheet.Cells(cell.row, 1).Value = "") Then 
+0

對不起,我沒有提到它是谷歌表。所以我不能使用makros。 https://docs.google.com/spreadsheets/d/1r5419_lbu116hPehz17KYs_CMRmZwtihJJQVLWmJuZ0/edit#gid=0 –

0

我愛你COM增值稅!

但是,不要被頑皮的孩子,而不是分享您的代碼...

保持A列空,在表單提交或者在該行A列的編輯將顯示當前的日期和它不會改變:-)

function onEdit() { 
var dateColNum = 1 //column F 
var ss1 = SpreadsheetApp.getActiveSpreadsheet(); 

//set date in same row as edit happens, at fixed column 
var nextCell = ss1.getActiveSheet().getRange(ss1.getActiveRange().getLastRow(), dateColNum, 1, 1) 

if(nextCell.getValue()==='')//是空的嗎? nextCell.setValue(new Date());

}