私のExcelシートには、列Aの最後の空でないセルを検出し、そのセルに増分シリアル番号値を追加するVBAコードがあります(以下の例では、セルA6の値はSN104である必要があります)。
この処理は列Aのみに制限されており、この画像の例では、最初の空でない最後のセルはA6にあり、100セルまたは1000セルの後にある場合もあります。
このシナリオを処理する簡単な方法はありますか?
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の最後のセルを参照しています
何かのようなもの
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
私はエクセルを持っていないので、今はテストできません。しかし、これで始められるはずです。
このようなもの
空白でない最後のセルの文字列を解析し (任意の長さの英字と数値を処理)、次の空白セルを更新します
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