在我的Excel工作表中,我有VBA代码来检测A列中的最后一个非空单元格,并在该单元格中添加增量序列号值(在下面的示例中,单元格A6值应为SN104)。
此处理仅限于A列,在此图像示例中,第一个非空的最后一个单元格位于A6,有时可以位于100个单元格或1000个单元格之后。
有没有简单的方法来处理这种情况?
答案 0 :(得分:1)
Public Function GetLastCell(ByVal startRng as Range) as Range
With startRng
Set GetLastCell = IIf(.Offset(1).Value = "", .Offset(0), .End(xlDown))
End With
End Function
对于您的示例,您可以定义Range变量rng,并以这种方式调用上述函数:
Dim rng as Range
Set rng = GetLastCell( Range("A1") )
然后rng指的是A列的最后一个单元格
答案 1 :(得分:0)
像
这样的东西Dim lngLastUsedRow as Integer
lngLastUsedRow = Range("A65536").End(xlUp).Row
Dim lngFirstEmptyRow as Integer
lngFirstEmptyRow = Range("A65536").End(xlUp).Offset(1,0)
// do your increment
newValue = Cint(Mid(CurrentWorkSheet.Range("A" + lngLastUsedRow).Value,2)) + 1
CurrentWorkSheet.Range("A" & lngFirstEmptyRow).Value = "SN" + newValue
我没有擅长我,我现在无法测试。但这应该让你开始。
答案 2 :(得分:0)
像这样的东西
解析最后一个非空单元格中的字符串(处理任意长度的alpha然后是数字)以更新下一个空白单元格
Sub GetTrueLastCell()
Dim rng1 As Range
Dim objRegex As Object
Dim strFirst As String
Set rng1 = Columns("A").Find("*", [a1], xlFormulas)
If Not rng1 Is Nothing Then
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "^(.+?[^\d])(\d+)$"
If .test(rng1.Value) Then
strFirst = .Replace(rng1.Value, "$1")
rng1.Value = strFirst & (Val(Right$(rng1.Value, Len(rng1.Value) - Len(strFirst)) + 1))
End If
End With
Else
MsgBox "Data range is blank"
End If
End Sub
答案 3 :(得分:0)
假设:
SN
'字符串后有三位数(即,如果达到1000,则较早的数字不需要填充,例如'0100
'-
Dim rAll As Range, rLast As Range, rNext As Range, iNextSN As Integer
Set rAll = Intersect(Sheet1.Cells(1).CurrentRegion, Sheet1.Columns(1)) ' Column 'A' can be contiguous with others
Set rLast = rAll.Cells(rAll.Cells.Count) ' Last cell in current list
Set rNext = rLast.Offset(1) ' Next cell below current list
iNextSN = CInt(Right(rLast.Value, 3)) ' Get value of last serial N
rNext.Value = "SN" & iNextSN + 1 ' Assemble next SN with increment
-