
我希望每當將資料輸入儲存格 B5-B39 時,儲存格 C5-C39 會自動填入今天的日期。
我試圖讓它工作,=TODAY()
但不知道如何建立公式。
答案1
我想說最簡單的方法是使用使用者定義的函數。當它引用的任何單元格發生更改時,該函數都會更新,因此您不必將其綁定到任何事件。
您的問題的函數是:
Function Updating_Date(dependent_cell as Range) As Date
Updating_Date = Date
End Function
將程式碼放入工作簿中的模組後,您只需輸入=Updating_Date(B5)
然後C5
複製即可。只要 C 列中的值發生變化,C5 中的日期就會更新。
為了使日期僅在 B 列中的單元格不為空時才顯示,您可以在 C 列中的單元格中應用 if 公式,正如我在你問的另一個問題。只需輸入與我在此處顯示的相同的條件(即ISBLANK(B5)
),如果條件為 true,則傳回值為空字串 ( ),如果條件為 false,則傳回""
UDF ( )。Updating_Date(B5)
答案2
只要儲存格「A」發生更改,以下程式碼就會將今天的日期放入儲存格「B」中:
Private Sub Worksheet_Change(ByVal Target As Range)
' Auto Date
Dim Cell As Range
For Each Cell In Target
If Cell.Column = Range("A:A").Column Then
If Cell.Value <> "" Then
Cells(Cell.Row, "B").Value = Int(Now)
Else
Cells(Cell.Row, "B").Value = ""
End If
End If
Next Cell
End Sub
需要將此程式碼放置在您希望發生此行為的工作表的 VBA 模組中。
答案3
無需 VBA 即可完成此操作。我需要根據 B 列輸入的值,在 C 列中填寫今天的日期。此公式可使其正確插入。
=IF(ISBLANK(B2)," ",NOW())
我將其放置在 C2 單元格中,因為那是我開始建立 C 列的位置。您可以將其放置在您要開始的任何列的儲存格中。例如,如果您的啟動儲存格是 F3,您應該將公式變更為
=IF(ISBLANK(F3), " ",NOW()).
如果對應的日期儲存格是 K3,請將公式放在那裡。 (公式位於第一個儲存格後,您可以將其拖曳到該列的其餘儲存格中。)
此公式將日期儲存格保持為空,直到「開始」儲存格輸入值。輸入該值後,就會加入日期。如果刪除該值,Excel 將自動刪除日期。因此它並不完美,但如果您需要更複雜的東西,您可能需要 Excel 專家或為您處理此問題的程式。
答案4
AFIK,您需要透過 VBA 來完成此操作。您可以建立一個函數來監視工作表上的更改,僅過濾掉儲存格 B5-B39 上的更改並相應地更新 C 中的儲存格。
更新:您可能會知道使用 alt-F11 進入 VBA。
雙擊名為 Sheet1 的 Excel 物件或您感興趣的任何工作表(在左上角的樹列表中)以取得該工作表的程式碼。
從 2 個下拉清單中選擇「工作表」和「變更」。所以你會得到如下所示的程式碼:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
變數“目標”現在可用,它是對更改的單元格的引用。
在這些行之間添加一些程式碼:
debug.Print Target
並按 ctrl-G 顯示立即視窗
在工作表中進行一些更改並切換回程式碼,您將看到您輸入的資料出現在「立即」視窗中。
現在更改程式碼if Target.
,您將看到與 Target 變數相關的可能屬性的下拉清單。
透過一些更改,您可以獲得:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And (Target.Row > 4 And Target.Row < 40) Then
Debug.Print Target.Value
End If
End Sub
現在僅列印您感興趣的範圍內的變更。
如果您想知道如何變更儲存格中的值,可以錄製手動執行此操作的巨集並檢查程式碼。希望你現在已經夠繼續下去了。如果沒有請告訴我。