好的,假设我有一个电影名称列表。为了简单起见,假设有 5 个电影名称。在下一列中,我根据我对电影的看法给出了评级,从 1 到 5,因为有 5 个名称。
以下是一个例子:
电影 A -> 2
电影 B -> 1
电影 C -> 3
电影 D -> 5
电影 E -> 4
现在假设我想添加一部评分为 3 的新电影,因为我比电影 C、D 和 E 更喜欢它。
电影 F -> 3
由于我现在将
电影 C -> 3 和电影 F -> 3,
评级将不得不改变,对吗?所以我正在寻找一个命令或公式,我可以使用它来自动制作:
- 电影 C 获得 4 (3+1) 评分
- 电影 D 的评分为 6(5+1)
- 电影 E 获得 5 分(4+1)
因此,在我添加“电影 F -> 3”之后,列表将自动更新为
电影 A -> 2
电影 B -> 1
电影 C -> 4
电影 D -> 6
电影 E -> 5
电影 F -> 3
有任何想法吗?
答案1
以下是u1016274的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("B:B"), Target) Is Nothing Then Exit Sub
v = Target.Value
addy = Target.Address(0, 0)
Application.EnableEvents = False
For Each r In Intersect(Range("B:B"), ActiveSheet.UsedRange)
If r.Address(0, 0) <> addy And r.Value >= v Then
r.Value = r.Value + 1
End If
Next r
Application.EnableEvents = True
End Sub
因此如果我们从以下开始:
并添加愤怒的公牛作为第 3 个,我们将得到:
因为它是工作表代码,所以非常容易安装和自动使用:
- 右键单击 Excel 窗口底部附近的选项卡名称
- 选择查看代码-这将打开一个 VBE 窗口
- 粘贴内容并关闭 VBE 窗口
如果您有任何疑虑,请首先在试用工作表上尝试一下。
如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
要删除宏:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
要了解有关事件宏(工作表代码)的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/event.htm
必须启用宏才能使其工作!
答案2
这是我的想法(无代码)。1
. 编写一个 VBA 例程,当 B 列中的值发生变化时运行(“Private Sub Worksheet_Change(ByVal Target As Range)”)。
2. 检查目标是否为 B 列中的单元格。3
. 将当前选择的值保存在变量中
new = Selection.value
4. 比较 B 列中从第 1 行到最后一个非空行的所有单元格值是否大于或等于新值。如果相等,并且与所选内容位于同一行,则跳过。对于所有其他情况,将值增加 1。