Excel VBA 中的可变变量及其总和
Variable Variables and Sums of Them in Excel VBA
为了缓解暑假的无聊,我决定尝试制作一个 Excel 程序,根据棋盘游戏《大富翁》中拥有的财产和这些财产上的房屋数量,跟踪某人欠多少钱(我正在试验一些新规则)。我设置了电子表格,使每个 属性 都在自己的行中。我希望 Excel 程序执行此操作:
假设您正在查看一个单元格。然后,对于 i=1 到 10(因为我怀疑 10 个以上的玩家在大富翁中是否可行),如果右边的单元格的值为 i,则将您实际查看的单元格的值相加并求和对于玩家 i.
我可以生成变量变量 sum1、sum2、sum3、...、sum10 吗?然后我可以说
总和'i' = 总和'i' + cell.Value
如果满足第 2 段中的条件,则在 for 循环中?
更新:我试过这段代码,它可以用来获取玩家 1 的总和。然而,它为所有玩家提供了玩家 1 的总和,并且每当有人购买新的 属性 或升级当前的 属性 时更新是很麻烦的(我需要在每次更新时重新输入公式)。
Public Function monopolySum(i As Integer) As Variant
Dim sum(1 To 10) As Variant, rng As Range, cell As Range
For i = 1 To 10
sum(i) = 0
Next i
Set rng = Range("C2:C29")
For Each cell In rng
For i = 1 To 10
If cell.Offset(0, 1).Value = i Then
sum(i) = sum(i) + cell.Value
End If
Next i
Next cell
For i = 1 To 10
monopolySum = sum
Next i
End Function
提前谢谢大家!我的编程经验很少,非常感谢任何指导:)
您正在寻找数组:
Dim varSum(1 To 10) As Variant
'Access it like this:
varSum(i) = xyz
更新答案
我看到几个可以改进的地方:
- 您将
i
作为函数的参数,但稍后会重新分配值。更好地命名您的参数 iPlayer
(我认为需要它)
- 您想计算特定玩家的总和吗?然后你不需要数组并计算所有玩家的总和。
编辑(老实说:你不需要 VBA。看看 SUMIF)
- 你想计算所有玩家的总和,比如说一个大总和?然后你必须在最后一个For-Loop中写
monopolySum = sum(i)
。
编辑(在这里你可以使用 SUM,但我想你知道)
- 您可以将所需范围作为函数的参数,因此您不必通过函数设置它 "hard"。试试这个
Public Function monopolySum(iPlayer As Integer, rngGame As Range) As Variant
- 您最初问题的答案是否正确?那么它应该被接受:)
为了缓解暑假的无聊,我决定尝试制作一个 Excel 程序,根据棋盘游戏《大富翁》中拥有的财产和这些财产上的房屋数量,跟踪某人欠多少钱(我正在试验一些新规则)。我设置了电子表格,使每个 属性 都在自己的行中。我希望 Excel 程序执行此操作:
假设您正在查看一个单元格。然后,对于 i=1 到 10(因为我怀疑 10 个以上的玩家在大富翁中是否可行),如果右边的单元格的值为 i,则将您实际查看的单元格的值相加并求和对于玩家 i.
我可以生成变量变量 sum1、sum2、sum3、...、sum10 吗?然后我可以说
总和'i' = 总和'i' + cell.Value
如果满足第 2 段中的条件,则在 for 循环中?
更新:我试过这段代码,它可以用来获取玩家 1 的总和。然而,它为所有玩家提供了玩家 1 的总和,并且每当有人购买新的 属性 或升级当前的 属性 时更新是很麻烦的(我需要在每次更新时重新输入公式)。
Public Function monopolySum(i As Integer) As Variant
Dim sum(1 To 10) As Variant, rng As Range, cell As Range
For i = 1 To 10
sum(i) = 0
Next i
Set rng = Range("C2:C29")
For Each cell In rng
For i = 1 To 10
If cell.Offset(0, 1).Value = i Then
sum(i) = sum(i) + cell.Value
End If
Next i
Next cell
For i = 1 To 10
monopolySum = sum
Next i
End Function
提前谢谢大家!我的编程经验很少,非常感谢任何指导:)
您正在寻找数组:
Dim varSum(1 To 10) As Variant
'Access it like this:
varSum(i) = xyz
更新答案
我看到几个可以改进的地方:
- 您将
i
作为函数的参数,但稍后会重新分配值。更好地命名您的参数iPlayer
(我认为需要它) - 您想计算特定玩家的总和吗?然后你不需要数组并计算所有玩家的总和。
编辑(老实说:你不需要 VBA。看看 SUMIF) - 你想计算所有玩家的总和,比如说一个大总和?然后你必须在最后一个For-Loop中写
monopolySum = sum(i)
。
编辑(在这里你可以使用 SUM,但我想你知道) - 您可以将所需范围作为函数的参数,因此您不必通过函数设置它 "hard"。试试这个
Public Function monopolySum(iPlayer As Integer, rngGame As Range) As Variant
- 您最初问题的答案是否正确?那么它应该被接受:)