2012-04-13 248 views
1

enter image description here使用Excel VBA

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

该处理仅限于列A,并且在该图像示例中,第一个非空的最后一个单元在A6处,有时它可以在100个单元或1000个单元之后。

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

+0

这是* *这样重复。 [实施例](http://stackoverflow.com/a/6304419/119775)。下一次,请在询问已经被多次回答的问题之前,尝试做一个简单的[搜索](http://stackoverflow.com/search?q= [vba] + last + empty + cell)。 – 2012-04-14 08:44:42

回答

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在我身上,我现在不能测试它。但是这应该让你开始。

+1

这假定使用Excel 2003(65536行)而不是迎合所有Excel版本。它也锁定到字符串中始终有一个两位数的字母前缀 - 虽然这是合理的,但应该考虑到这个问题(同样也是一个空白结果) – brettdj 2012-04-14 02:56:18

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 

对于你的榜样,您可以定义范围变量毫克,并调用上面的函数以这种方式:

Dim rng as Range 
Set rng = GetLastCell(Range("A1")) 

然后RNG指的是A栏

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