1

在此处输入图像描述

在我的 Excel 表中,我有 VBA 代码来检测 A 列中的最后一个非空单元格,并在该单元格中添加增量序列号值(在下面的示例中,单元格 A6 的值应该是 SN104)。

此处理仅限于 A 列,在此图像示例中,第一个非空最后一个单元格位于 A6,有时它可能在 100 个单元格或 1000 个单元格之后。

有没有简单的方法来处理这种情况?

4

4 回答 4

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 列的最后一个单元格

于 2012-04-13T23:59:51.193 回答
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

我没有excel,我现在无法测试它。但这应该让你开始。

于 2012-04-13T23:31:05.717 回答
0

像这样的东西

  1. 在任何 Excel 版本中查找真正最后使用的单元格,并处理空白结果
  2. 解析最后一个非空白单元格中的字符串(处理任何长度的字母然后数字)以更新下一个空白单元格

    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
    
于 2012-04-14T02:53:27.690 回答
0

假设:

  • 列表中的下一个单元格为空
  • 序列 N 的 ' ' 字符串后只有三位数字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

-

于 2020-03-09T14:03:57.867 回答