Reputation: 57
In the column AS
, I have a blank column where I need to give a number to each row starting from row 3 to the last row (this is already predefined as lastrow(row number) in the VBA). Is there any way to number them from 1 to the last row in VBA programming?
For example, in the Column AS
i would like to have
Row 3: 1
Row 4: 2
Row 5: 3
....
Last Row: XXX
If possible, how do you format the numbers so that they are all 4 digits
0001,
0002,
0003,
etc
Upvotes: 0
Views: 822
Reputation: 6216
Here is a solution to give you the numbers as text and without looping:
Range("AS3:AS" & Range("B" & Rows.Count).End(xlUp).Row).formula = "=Right(""000"" & Row(AS3) - 2,4)"
Range("AS:AS").copy
Range("AS:AS").PasteSpecial xlPasteValues
Uses the ROW()
function in excel then copies and pastes as values.
Assumes you have data in column B
Upvotes: 0
Reputation: 16321
There is a much better solution that what's been offered. Excel has a Fill Series
feature that can perform trends and linear progressions. It's a simple one-line function call to DataSeries()
in VBA:
Range("AS3") = 1 ' Set the starting value
With Range("AS3:AS" & intLastRow)
.DataSeries xlColumns, xlLinear, , 1 ' Linear series, step = 1
.NumberFormat = "0000" ' Pad with zeros
End With
Upvotes: 1
Reputation:
MatthewD's code is fine, but my .NumberFormat
method is a little cleaner, and I don't use the problematic UsedRange
.
Sub M1FourDigitRow()
'
' M1FourDigitRow Macro
'
' Keyboard Shortcut: Ctrl+Shift+Q
'
Dim Range1 As Range
Dim Cell1 As Range
Set Range1 = ThisWorkbook.Sheets("Sheet9").Range(ThisWorkbook.Sheets("Sheet9").Cells(3, "AS"), ThisWorkbook.Sheets("Sheet9").Cells(1000, "AS"))
For Each Cell1 In Range1
Cell1.Value = Cell1.Row - 2
Cell1.NumberFormat = "0000"
Next Cell1
End Sub
Upvotes: 2
Reputation: 6771
Dim lRow As Long
Dim lCount as Long
Dim ws as excel.worksheet
Set ws = Application.ActiveSheet
Dim strCount As String
lRow = 3
lCount = 1
Do While lRow <= ws.UsedRange.Rows.count
strCount = Trim(str(lCount))
If Len(strCount) = 1 Then
ws.Range("AS" & lRow).Value = "'000" & strCount
ElseIf Len(strCount) = 2 Then
ws.Range("AS" & lRow).Value = "'00" & strCount
ElseIf Len(strCount) = 3 Then
ws.Range("AS" & lRow).Value = "'0" & strCount
Else
ws.Range("AS" & lRow).Value = "'" & strCount
End If
lCount = lCount + 1
lRow = lRow + 1
Loop
Upvotes: 1