以我Excel表单检测非空最后一个单元格的位置,我有VBA代码以检测在列A的最后一个非空单元和在该单元格添加增量序列号的值(在下面的例子单元格A6值应该是SN104)。
该处理仅限于列A,并且在该图像示例中,第一个非空的最后一个单元在A6处,有时它可以在100个单元或1000个单元之后。
有没有简单的方法来处理这种情况?
以我Excel表单检测非空最后一个单元格的位置,我有VBA代码以检测在列A的最后一个非空单元和在该单元格添加增量序列号的值(在下面的例子单元格A6值应该是SN104)。
该处理仅限于列A,并且在该图像示例中,第一个非空的最后一个单元在A6处,有时它可以在100个单元或1000个单元之后。
有没有简单的方法来处理这种情况?
喜欢的东西
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
我没有Excel在我身上,我现在不能测试它。但是这应该让你开始。
这假定使用Excel 2003(65536行)而不是迎合所有Excel版本。它也锁定到字符串中始终有一个两位数的字母前缀 - 虽然这是合理的,但应该考虑到这个问题(同样也是一个空白结果) – brettdj 2012-04-14 02:56:18
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
对于你的榜样,您可以定义范围变量毫克,并调用上面的函数以这种方式:
Dim rng as Range
Set rng = GetLastCell(Range("A1"))
然后RNG指的是A栏
的最后一个单元格像这样的东西
解析在最后一个非空白小区中的串(处理阿尔法然后数字的任何长度)来更新下一个空白小区
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
这是* *这样重复。 [实施例](http://stackoverflow.com/a/6304419/119775)。下一次,请在询问已经被多次回答的问题之前,尝试做一个简单的[搜索](http://stackoverflow.com/search?q= [vba] + last + empty + cell)。 – 2012-04-14 08:44:42