【问题标题】:How to create interdependent columns in Excel?如何在 Excel 中创建相互依赖的列?
【发布时间】:2015-11-21 06:34:14
【问题描述】:

我要创建的是一个预算电子表格,可以将值输入到每日、每周、每月或每年列的一个单元格中,并且它将跨行计算其他列的值。

          A                   B                  C                   D                  E
1  CATEGORY        DAILY BUDGET      WEEKLY BUDGET      MONTHLY BUDGET      YEARLY BUDGET
2  Restaurants            $1.43            *$10.00*             $43.45            $521.43
3  Fuel                   $3.29             $23.01            *$100.00*         $1,200.00
4  Daily coffee          *$1.65*            $11.55              $50.19            $602.25
5  Auto Insurance         $3.29             $23.01             $100.00         *$1,200.00*

如下所示,星号表示输入一阶值的位置。例如,在每周预算列中输入的 10 美元会计算其他三列的值,以此类推,对于在每个不同列中输入一阶值的其余行。

我知道它涉及到一些 Excel VBA。事实上,Yahoo Answers 上的这个答案非常接近我想要做的,除了我需要它来处理活动单元格相应行中的列。

编辑:添加了对我的表的列和行引用,这是我修改过的代码:

Private Sub PeriodConversion(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$B$2" Then
    [C2] = [B2] * 7
    [E2] = [B2] * 365
    [D2] = [E2] / 12
ElseIf Target.Address = "$C$2" Then
    [B2] = [C2] / 7
    [E2] = [B2] * 365
    [D2] = [E2] / 12
ElseIf Target.Address = "$D$2" Then
    [E2] = [D2] * 12
    [B2] = [E2] / 365
    [C2] = [B2] * 7
ElseIf Target.Address = "$E$2" Then
    [D2] = [E2] / 12
    [B2] = [E2] / 365
    [C2] = [B2] * 7
End If
Application.EnableEvents = True
End Sub

虽然它似乎不起作用.. :\

【问题讨论】:

  • 谁每天花的咖啡多于食物(餐厅)?
  • 这一切都需要在同一个表中。可能吗?我可能不知道你说的分开是什么意思..和@findwindow,整个想法是按比例分配..您实际上每周只会去餐厅一次(如果是快餐,则去两次),因此为什么会这样在每周预算间隔下输入。
  • @CalvinBroadus 大声笑我是在拖钓,因为你没有表现出任何努力 XD 但 pnuts 似乎很乐意提供帮助 ^_^
  • 使用@pnuts 方法,您还需要一个触发器来知道哪个是first order 期间(或者可能是一个查找表,上面写着咖啡= 每天,餐厅= 每周)。如果您以正确的方式设置电子表格,这是一个不错的非 vba 解决方案。
  • 触发器可以是具有输入值的活动单元格吗?我正在处理的代码是发布在 Yahoo Answers 上的代码。抱歉,说到 VBA,我几乎是个新手。

标签: vba excel


【解决方案1】:

我没有测试过这个,但是根据你开始的想法,也许试试这个:

(将代码放在表格所在的工作表中)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row=1 then Exit Sub

    Application.EnableEvents = False
    Select Case Target.Column
        Case 2
            '    [C2] = [B2] * 7
            Target.Offset(0, 1).Value = Target.Value * 7
            '    [E2] = [B2] * 365
            Target.Offset(0, 3).Value = Target.Value * 365
            '    [D2] = [E2] / 12
            Target.Offset(0, 2).Value = Target.Offset(0, 3).Value / 12
        Case 3
            '    [B2] = [C2] / 7
            Target.Offset(0, -1).Value = Target.Value / 7
            '    [E2] = [B2] * 365
            Target.Offset(0, 2).Value = Target.Offset(0, -1).Value * 365
            '    [D2] = [E2] / 12
            Target.Offset(0, 1).Value = Target.Offset(0, 2).Value / 12
        Case 4
            '    [E2] = [D2] * 12
            Target.Offset(0, 1).Value = Target.Value * 12
            '    [B2] = [E2] / 365
            Target.Offset(0, -2).Value = Target.Offset(0, 1).Value / 365
            '    [C2] = [B2] * 7
            Target.Offset(0, -1).Value = Target.Offset(0, -2).Value * 7
        Case 5
            '    [D2] = [E2] / 12
            Target.Offset(0, -1).Value = Target.Value / 12
            '    [B2] = [E2] / 365
            Target.Offset(0, -3).Value = Target.Value / 365
            '    [C2] = [B2] * 7
            Target.Offset(0, -2).Value = Target.Offset(0, -3).Value * 7
    End Select
    Application.EnableEvents = True

End Sub

【讨论】:

  • 这很好用,谢谢。我更进一步并添加了将填充颜色更改为更改值并清除其他值的代码。学到了很多,再次感谢!
猜你喜欢
  • 2020-01-16
  • 2015-08-09
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2012-12-22
  • 2016-01-16
相关资源
最近更新 更多