更改一个单元格后,依次更新行中的列

我的工作表基本上是一个度量工作表,它具有依赖于input到一列中的date的多个列,但是这些后面的列中的每一列然后依次依次设置date和时间段。

我试图find一种方法来更新某些列在同一行时,第一个值更改; 通过Worksheet_SelectionChange事件(如果可能的话)(或其他方式,如果结果是相同的)。

我想要发生的事情:我在列A中input“开始”date。 我需要excel然后根据列A中的值更新同一行的列B. 然后我需要列C (同一行)根据B列中的新值进行更新; 那么我需要D列根据列C中的值进行更新; 等等。 这有道理吗?

你似乎真的想要VBA,所以我会发表另一个答案(与另一个不同)。

这里我使用Worksheet_Change事件。 它调用一个函数,返回一个包含datetypesVariant的数组。 然后这个数组可以简单地用=来写入表单。

我发现这比在单元格中使用公式稍微复杂一些,但它有一个更清洁的前端,你似乎想要的优势。

在表单模块中:

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A:A")) Is Nothing Then Target.Offset(0, 1).Resize(1, 3) = RelevantDates(Target.Value) End If End Sub 

在一个代码模块中:

 Function RelevantDates(startDate As Date) As Variant Dim v As Variant ' Adapt to your needs: ReDim v(1 To 3) v(1) = startDate + 1 ' add one day v(2) = DateSerial(Year(v(1)), Month(v(1)), Day(v(1)) + 7) ' add one more week v(3) = DateSerial(Year(v(2)), Month(v(2)) + 1, Day(v(2))) ' add one month RelevantDates = v End Function 

当然,以上只返回3个相当平凡的date,但你可以自定义这个你认为合适的。

在这里输入图像说明

我不明白为什么要这样做VBA。 只需在你的单元格中写入公式。 这很简单,真的。

下面是一个例子,在列A中input的date改变了列B中的值,这反过来又改变了列C中的值,依此类推。

在这里输入图像说明

第2行显示了公式的结果,而第4行显示了公式本身(对于这些相当长的公式的糟糕格式的道歉)。

理想情况下,您的后面的列将根据以前的列只有公式。 例如对于列B2 =A2*100 ,对于列C2 =B2+88

如果这不容易,因为计算困难,请考虑工作表函数,例如=ComplicatedFunction(A2) B2的=ComplicatedFunction(A2)函数=ComplicatedFunction(A2)

 Function ComplicatedFunction(depended_on As Range) If depended_on.Value <> 0 Then PAYEES = 1 Else PAYEES = 2 End If End Function 

如果这是不可能的,那么你是对的 – 一个工作表更改事件可能会有所帮助,可能是这样的:

 Public Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Debug.Print "change to column A encountered" Range(2,Target.Row).Value = Target.Value + 2 ElseIf Target.Column = 2 Then Debug.Print "change to column B encountered" Range(3,Target.Row).Value = Target.Value + 99 ElseIf Target.Column = 3 Then Debug.Print "change to column C encountered" Range(4,Target.Row).Value = Target.Value * 7 End If End Sub 

我相信Worksheet_Change调用将在更新子本身内的值后级联。