Vba 自动编号重置
在Excel中,我试图根据当前年份和序列中的下一个数字创建一个自动编号单元格。示例表Vba 自动编号重置,vba,excel,Vba,Excel,在Excel中,我试图根据当前年份和序列中的下一个数字创建一个自动编号单元格。示例表14/001中的第一行,下一行应该是14/002 我已经将我的工作表格式化为表格,我的公式是单元格A2中的=TEXT(TODAY(),“yy”)和“/”TEXT(行(A1),“000”) 当我在表中的行上单击tab键并到达行的最后一个单元格时,它默认为下一行,创建新行,向下复制公式,并按预期的方式递增一。那部分工作得很好 我不知道该怎么做的是,到2015年,我该如何重置/00?至/001因此,2015年1月1日的
14/001
中的第一行,下一行应该是14/002
我已经将我的工作表格式化为表格,我的公式是单元格A2
中的=TEXT(TODAY(),“yy”)和“/”TEXT(行(A1),“000”)
当我在表中的行上单击tab键并到达行的最后一个单元格时,它默认为下一行,创建新行,向下复制公式,并按预期的方式递增一。那部分工作得很好
我不知道该怎么做的是,到2015年,我该如何重置/00
?至/001
因此,2015年1月1日的下一行应为15/001
=TEXT(TODAY(),"yy")& "/" &
if(left(previous_cell,2)=TEXT(TODAY(),"yy"),
TEXT(ROW(A1),"000"),
"001")
=文本(今天(),“yy”)和“/”&
如果(左(上一个单元格,2)=文本(今天(),“yy”),
正文(第(A1)行,“000”),
"001")
由于您愿意接受VBA解决方案,因此假设自动编号将出现在列a中。手动将第一个值放入A1。然后在工作表代码区域中输入以下事件宏:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim A As Range, oldYr As String, yr As String, N As Long, oldN As Long
Set A = Range("A2:A" & Rows.Count)
If Intersect(Target, A) Is Nothing Then Exit Sub
If Target.Value <> "" Or Target.Offset(-1, 0) = "" Then Exit Sub
Cancel = True
ary = Split(Target.Offset(-1, 0).Value, "/")
oldYr = ary(0)
oldN = CLng(ary(1))
yr = Right(CStr(Year(Date)), 2)
If yr = oldYr Then
Target.Value = yr & "/" & Format(oldN + 1, "000")
Else
Target.Value = yr & "/" & Format(1, "000")
End If
End Sub
Private子工作表\u双击之前(ByVal目标作为范围,Cancel作为布尔值)
变暗A为范围,老Y为字符串,老Y为字符串,N为长,老N为长
设置A=范围(“A2:A”和行数)
如果Intersect(Target,A)为空,则退出Sub
如果Target.Value“”或Target.Offset(-1,0)=“”,则退出Sub
取消=真
ary=拆分(目标偏移量(-1,0).Value,“/”)
oldYr=ary(0)
oldN=CLng(第(1)项)
年=右(CStr(年(日)),2)
如果yr=oldYr,则
Target.Value=yr&“/”格式(oldN+1,“000”)
其他的
Target.Value=yr&“/”格式(1,“000”)
如果结束
端接头
如果双击列A中的第一个空单元格,将在该单元格中输入下一个自动编号
由于它是工作表代码,因此安装和自动使用非常容易:
必须启用宏才能工作我希望您能意识到,在2015年1月1日,您专栏中的所有单元格都将切换到15/XXX。我能想到的方法是,第一行是“种子”行-不带公式-允许后续行上的公式进行文本比较,以决定是否重置计数器并增加年份代码。不起作用-IF函数将始终返回true,即使没有返回true,您也只会在第一行上获得“001”,并更改年份。之后的行将恢复为仅显示当前行号,例如1月1日的15/001,然后1月2日的15/367。这不是要求的结果吗?个人认为要求是15/001,15/002等。无论如何,fmla中的If函数将始终返回真值,导致数字持续上升,且从未重置,因此该点没有意义。