【发布时间】:2016-04-02 15:35:53
【问题描述】:
我的设置如上图所示。
宏的逻辑是,如果我在单元格B5 或在Range("B2:B26") 的空单元格中输入一个数字1,那么输出将采用以下格式:
B2 3
B3 4
B4 2
B5 1
现在它给了我输出,但有某些缺点,例如
如果我向同一个单元格提供输入8,那么它仍然会增加排名。我合并了一个匹配检查以查看该值是否存在,但它似乎不起作用任何帮助将不胜感激。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim KeyCells As Range
Dim i As Long, Cel As Range, sht1 As Worksheet, j As Long, found As Boolean
Set sht1 = Sheet1
Set KeyCells = sht1.Range("B2:C26")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
If Target.Column = 2 Then
For i = 2 To 26
If sht1.Range("B" & i) <> Empty And sht1.Range("B" & i).Value >= Target.Value And i <> Target.Row Then
sht1.Range("B" & i).Value = sht1.Range("B" & i).Value + 1
Else: End If
Next i
Else: End If
If Target.Column = 3 Then
For i = 2 To 26
If sht1.Range("C" & i) <> Empty And sht1.Range("C" & i).Value >= Target.Value And i <> Target.Row Then
sht1.Range("C" & i).Value = sht1.Range("C" & i).Value + 1
Else: End If
Next i
Else: End If
Else: End If
Call CreateDataLabels
Target.Select
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
【问题讨论】:
-
我有点困惑。如果你在
B5中输入1那么会发生什么?你是如何在B3中得到4的? -
@SiddharthRout 如果你删除这部分
found = False For i = 2 To 26 If sht1.Range("B" & i) <> Empty And sht1.Range("B" & i).Value = Target.Value And i <> Target.Row Then found = True Else: End If Next i你会得到它。 -
能忘记代码,解释一下逻辑吗? :)
-
是的,逻辑是我有 1-25 项技能,我想强制排名,这样我就不能两次选择相同的数字。如果我有 1、2、3、4……然后我添加一个新的 3,那么 3 变成 4,4 变成 5,依此类推。
-
所以如果你在上面的场景中加上
8(你已经有1,2,3)那么8应该保持原样还是应该变成4?