在VBA(Excel)中,列A如何插入一个ID标头,后跟1-X,直到它到达表示包含数据的最高行的空单元格?

在VBA(Excel)中,列A如何插入一个ID标头,后跟1-X,直到它到达表示包含数据的最高行的空单元格?,vba,excel,Vba,Excel,我正在尝试创建一个宏,该宏将插入一列,这将是电子表格(a)中的第一列,同时将1列上的所有原始列向右移动 然后,我需要这第一列来创建标题“ID”,每个标题都以数字方式计算行数: [A] ID 一, 二, 三, 我只希望编号在到达电子表格中最后一行时停止。在录制宏时,通过执行通常的操作来完成此任务,我能够生成以下VBA,结果如下: Sub InsertID() ' ' InsertID Macro ' Add first column to be 1-## ' ' Keyboard Shortcut

我正在尝试创建一个宏,该宏将插入一列,这将是电子表格(a)中的第一列,同时将1列上的所有原始列向右移动

然后,我需要这第一列来创建标题“ID”,每个标题都以数字方式计算行数:

[A]

ID

一,

二,

三,

我只希望编号在到达电子表格中最后一行时停止。在录制宏时,通过执行通常的操作来完成此任务,我能够生成以下VBA,结果如下:

Sub InsertID()
'
' InsertID Macro
' Add first column to be 1-##
'
' Keyboard Shortcut: Ctrl+Shift+N
'
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "ID"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("A3").Select
    ActiveCell.FormulaR1C1 = "2"
    Range("A2:A3").Select
    Selection.AutoFill Destination:=Range("A2:A522")
    Range("A2:A522").Select
    Range("A1").Select
End Sub
显然,这对我的情况不起作用。我使用的模板只有521行。这个数字将是一个变量,它通常可以由原始列a中的行数决定(在运行此宏之后,现在是列be)

我已经深入研究了如何为特定列中的行数创建一个变量,但是找不到一个参数足够相似的问题,尽管它看起来很简单

提前感谢

试试这个

Sub CreateIDColumn()
lr = ActiveSheet.UsedRange.Rows.Count
Columns(1).Insert
Range("A1").Value = "ID"
Range("A2:A" & lr).Formula = "=ROW()-1"
Range("A2:A" & lr).Value = Range("A2:A" & lr).Value
End Sub
试试这个

Sub CreateIDColumn()
lr = ActiveSheet.UsedRange.Rows.Count
Columns(1).Insert
Range("A1").Value = "ID"
Range("A2:A" & lr).Formula = "=ROW()-1"
Range("A2:A" & lr).Value = Range("A2:A" & lr).Value
End Sub

我相信下面的代码将完成您想要做的事情。它声明变量(如果声明了Option Explicit,则应该是),插入列,查找最后一行(如果有),并插入相关数据

Private Sub InsertID()
    Dim lastrow, i As Integer 'declaring variables

    'adding column
    Range("A1").EntireColumn.Insert

    'getting last row #
    If Application.WorksheetFunction.CountA(Cells) <> 0 Then
        lastrow = Cells.Find(What:="*", _
                    After:=Range("A1"), _
                    Lookat:=xlPart, _
                    LookIn:=xlFormulas, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlPrevious, _
                    MatchCase:=False).Row
    Else
        lastrow = 1
    End If

    'setting value of cell A1
    Cells(1, 1) = "ID"

    'setting value for the rest of the cells in column A
    For i = 2 To lastrow
        Cells(i, 1) = i - 1
    Next

End Sub
Private Sub InsertID()
Dim lastrow,i作为整数声明变量
'添加列
范围(“A1”)。全部插入
“最后一排#
如果Application.WorksheetFunction.CountA(单元格)为0,则
lastrow=单元格。查找(内容:=“*”_
之后:=范围(“A1”)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
其他的
lastrow=1
如果结束
'单元格A1的设置值
单元格(1,1)=“ID”
'设置列A中其余单元格的值
对于i=2到最后一行
单元(i,1)=i-1
下一个
端接头

我相信下面的代码将完成您想要做的事情。它声明变量(如果声明了Option Explicit,则应该是),插入列,查找最后一行(如果有),并插入相关数据

Private Sub InsertID()
    Dim lastrow, i As Integer 'declaring variables

    'adding column
    Range("A1").EntireColumn.Insert

    'getting last row #
    If Application.WorksheetFunction.CountA(Cells) <> 0 Then
        lastrow = Cells.Find(What:="*", _
                    After:=Range("A1"), _
                    Lookat:=xlPart, _
                    LookIn:=xlFormulas, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlPrevious, _
                    MatchCase:=False).Row
    Else
        lastrow = 1
    End If

    'setting value of cell A1
    Cells(1, 1) = "ID"

    'setting value for the rest of the cells in column A
    For i = 2 To lastrow
        Cells(i, 1) = i - 1
    Next

End Sub
Private Sub InsertID()
Dim lastrow,i作为整数声明变量
'添加列
范围(“A1”)。全部插入
“最后一排#
如果Application.WorksheetFunction.CountA(单元格)为0,则
lastrow=单元格。查找(内容:=“*”_
之后:=范围(“A1”)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
其他的
lastrow=1
如果结束
'单元格A1的设置值
单元格(1,1)=“ID”
'设置列A中其余单元格的值
对于i=2到最后一行
单元(i,1)=i-1
下一个
端接头

有关如何查找给定范围内最后一行的想法,请参见此:有关避免使用
Select
method::)的想法和原因,请参见此。此外,如果只是在此处设置值,则无需使用
formula1c1
。只需使用
.Value
即可。有关如何查找给定范围内的最后一行的方法,请参见此:有关避免使用
选择
方法::)的想法和原因,请参见此。此外,如果只是在此处设置值,则不需要使用
公式1c1
。只需使用
.Value
即可。