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