表示されたコードに基づいて、Formula
のコードをWorksheet_Change
イベントに含めるほうが簡単です(例:
Sub Worksheet_Change(ByVal Target As Range)
Dim macroName As String
macroName = "something"
If macroName = "PFC" Then
Application.EnableEvents = False
Cells(Target.Row, "F").Formula = "=DATEDIF(""2/24/2017"",Today(),""d"")"
Application.EnableEvents = True
ElseIf macroName = "SPC" Then
Application.Run Formula2()
EndIf
End Sub
これは、変更されたセルが存在するシートがシート(「シート1」)であると仮定します。
シートに変更を加える前にApplication.EnableEventsが無効になっていることに注意してください。これはExcelが無限ループに入るのを止めるでしょう。
Function Formula(c As Range)
Workbook.Sheets("Sheet1").Cells(c.Row, "F").Formula = "=DATEDIF(""2/24/2017"",Today(),""d"")"
End Function
Sub Worksheet_Change(ByVal Target As Range)
Dim macroName As String
macroName = "something"
If macroName = "PFC" Then
Application.EnableEvents = False
Formula Target
Application.EnableEvents = True
ElseIf macroName = "SPC" Then
Formula2
EndIf
End Sub
か、まだ単なるパラメータとして変化セルの行番号を渡すことであろう別の方法:
また、あなたはFormula
へのパラメータとして変更されたセルを渡すことができますFormula
へ:
Function Formula(r As Long)
Workbook.Sheets("Sheet1").Cells(r, "F").Formula = "=DATEDIF(""2/24/2017"",Today(),""d"")"
End Function
Sub Worksheet_Change(ByVal Target As Range)
Dim macroName As String
macroName = "something"
If macroName = "PFC" Then
Application.EnableEvents = False
Formula Target.Row
Application.EnableEvents = True
ElseIf macroName = "SPC" Then
Formula2
EndIf
End Sub
正しい日付を計算するために
(およびコーディングの私の第一の方法に基づいて)あなたが何かを行うことができます:
Sub Worksheet_Change(ByVal Target As Range)
Dim macroName As String
Dim mthsToAdd As Integer
Dim apd As Date
macroName = "something"
If macroName = "PFC" Then
Application.EnableEvents = False
mthsToAdd = 3
'Note: The following formula won't correctly handle cases such as
' adding two months to 30 December 2016 (it will calculate
' 2 March 2017 in that case, due to "30 February 2017" being
' treated as "2 days after 28 February 2017")
Cells(Target.Row, "F").FormulaR1C1 = "=DATEDIF(Today(),DATE(YEAR(RC4),MONTH(RC4)+" & mthsToAdd & ",DAY(RC4)),""d"")"
'or, if your formula doesn't need to allow for future changes to column D
apd = DateAdd("m", mthsToAdd, Cells(Target.Row, "D").Value)
Cells(Target.Row, "F").FormulaR1C1 = "=DATEDIF(Today(),""" & Format(apd, "mm/dd/yyyy") & """,""d"")"
'or, if you don't even need to allow for future changes to "Today"
apd = DateAdd("m", mthsToAdd, Cells(Target.Row, "D").Value)
Cells(Target.Row, "F").Value = apd - Date()
Application.EnableEvents = True
ElseIf macroName = "SPC" Then
Application.Run Formula2()
EndIf
End Sub
は、いくつかのコードを表示します! <3 –
DateAdd関数を参照すると、日付の違いを自動化するのに役立ちます。あなたが最初にすべての変数を設定する限り。 –
'Workbook_Change'が実際に' Worksheet_Change'で、 'Application.EnableEvents = False'を設定したと仮定すると、' Application.Run Formula() 'を' Target.EntireRow.Range( "F1")に置き換えることができます。Value =#02/24/2017# - Date() ' - 変更されたセルの行の列Fが、2月24日から今日までの日数に更新されます。 (明らかに、ハードコードされた日付は、自動プロモーションの日付として計算された日付変数に置き換えることができます)また、 'Cells(Target.Row、" F ")を使用することもできます。/2017# - Date() ' – YowE3K