Vba 非连续计数细胞

Vba 非连续计数细胞,vba,excel,contiguous,Vba,Excel,Contiguous,我不完全确定如何表达我的意图,但我会尽我所能 我想按单击的顺序计算Excel中的非连续单元格 例如,假设列A有一个下拉列表,我希望列B记录列A下拉列表的选择顺序。因此,如果一个人跳过A1:A3并选择A4,那么B4将等于1;接下来,他们选择A2,然后设置B2=2 这有可能吗?我尝试过索引、vlookups、计数、辅助细胞,但似乎什么都不起作用,因为我假设Excel以顺序方式思考,而我所做的是试图解释看似随机的非顺序的人类交互 禁用迭代计算也不是一个选项,因为还有其他依赖于迭代的引用 我知道VBA,

我不完全确定如何表达我的意图,但我会尽我所能

我想按单击的顺序计算Excel中的非连续单元格

例如,假设列
A
有一个下拉列表,我希望列
B
记录列
A
下拉列表的选择顺序。因此,如果一个人跳过
A1:A3
并选择
A4
,那么
B4
将等于
1
;接下来,他们选择
A2
,然后设置
B2=2

这有可能吗?我尝试过索引、vlookups、计数、辅助细胞,但似乎什么都不起作用,因为我假设Excel以顺序方式思考,而我所做的是试图解释看似随机的非顺序的人类交互

禁用迭代计算也不是一个选项,因为还有其他依赖于迭代的引用

我知道VBA,但只是很浅薄。如有任何帮助,将不胜感激。谢谢。

在工作表代码区域中放置以下事件宏:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim A As Range, wf As WorksheetFunction
    Dim B As Range

    Set A = Range("A:A")
    Set B = Range("B:B")
    Set wf = Application.WorksheetFunction
    If Intersect(A, Target) Is Nothing Then Exit Sub
    If Target.Count <> 1 Then Exit Sub
    Application.EnableEvents = False
        Target.Offset(0, 1).Value = wf.Max(B) + 1
    Application.EnableEvents = True
End Sub
Private子工作表\u更改(ByVal目标作为范围)
调暗A作为范围,wf作为工作表功能
变暗B为范围
设置A=范围(“A:A”)
设置B=范围(“B:B”)
设置wf=Application.WorksheetFunction
如果Intersect(A,目标)为空,则退出Sub
如果目标计数为1,则退出Sub
Application.EnableEvents=False
目标偏移量(0,1).Value=wf.Max(B)+1
Application.EnableEvents=True
端接头
由于它是工作表代码,因此安装和自动使用非常容易:

  • 在Excel窗口底部附近的选项卡名称上单击鼠标右键
  • 选择查看代码-这将打开一个VBE窗口
  • 粘贴内容并关闭VBE窗口
  • 如果您有任何顾虑,请先在试用工作表上试用

    如果保存工作簿,宏将与工作簿一起保存。 如果在2003年以后使用Excel版本,则必须保存 文件的格式为.xlsm而不是.xlsx

    要删除宏,请执行以下操作:

  • 如上所述打开VBE窗口
  • 清除代码
  • 关闭VBE窗口
  • 要了解有关宏的更多信息,请参阅:

    要了解有关事件宏(工作表代码)的详细信息,请参阅:


    必须启用宏才能工作

    工作绝对完美!谢谢你的链接@c、 wendel感谢您的反馈!