Vba 如何在Excel中创建相互依赖的列?

Vba 如何在Excel中创建相互依赖的列?,vba,excel,Vba,Excel,我试图创建的是一个预算电子表格,它可以将值输入到每日、每周、每月或每年列的一个单元格中,并计算整行的其他值 A B C D E 1 CATEGORY DAILY BUDGET WEEKLY BUDGET MONTHLY BUDGET YEARLY BUDGET 2 Restaurants

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

          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。事实上,这个答案非常接近我想要做的,只是我需要它来处理活动单元格各自行中的列

编辑:向我的表添加了列和行引用,下面是我修改的代码:

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 lol我之所以这么说是因为你没有表现出任何努力XD,但是pnuts似乎很乐意帮助你使用@pnuts方法。你还需要一个触发器来知道哪一个是第一次下单的时间段(或者可能是一个显示咖啡=每天,餐厅=每周的查找表)。如果您以正确的方式设置电子表格,这是一个很好的非vba解决方案。触发器是否可以是具有输入值的活动单元格?我正在绞尽脑汁的代码就是发布在Yahoo Answers上的代码。对不起,对于VBA,我几乎是个新手。这很有效,谢谢。我进一步添加了代码,将填充颜色更改为更改后的值,并清除了其他颜色。我学到了很多,再次感谢!
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