Variables 如何捕获单元格地址作为变量并在VB代码中使用?

Variables 如何捕获单元格地址作为变量并在VB代码中使用?,variables,excel,cell,vba,Variables,Excel,Cell,Vba,需要一个代码片段;如果有什么好心的大师能帮忙,请。我需要在XL VBA中表示以下光标移动顺序 在单元格A1中输入公式(Col-a为空)后,我需要将公式复制到A1:AN范围内的所有单元格,其中N是表格的最后一行 我录制了一个宏来执行以下操作(代码如下): 1) 输入公式(在单元格A1中) 2) 复制公式 3) 直走B1 4) 转到Col-B中最后填充的单元格[使用Ctrl+Down](查找最后一行的最简单方法) 5) 向左走到Col-A 6) 选择从当前到A1的所有单元格 7) 将公式粘贴到所选内

需要一个代码片段;如果有什么好心的大师能帮忙,请。我需要在XL VBA中表示以下光标移动顺序

在单元格A1中输入公式(Col-a为空)后,我需要将公式复制到A1:AN范围内的所有单元格,其中N是表格的最后一行

我录制了一个宏来执行以下操作(代码如下):

1) 输入公式(在单元格A1中)

2) 复制公式

3) 直走B1

4) 转到Col-B中最后填充的单元格[使用Ctrl+Down](查找最后一行的最简单方法)

5) 向左走到Col-A

6) 选择从当前到A1的所有单元格

7) 将公式粘贴到所选内容

我需要帮助的部分是一种在步骤5中将单元格地址捕获为变量的方法,以便我可以在一系列具有可变行数的文件上使用此宏

这是录制的宏。在本例中,表中的最后一行是7952

Sub test()
    ActiveCell.FormulaR1C1 = "=LEFT(RC[1],3)"
    ActiveCell.Select
    Selection.Copy
    ActiveCell.Offset(0, 1).Range("A1").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(0, -1).Range("A1").Select
    Range(Selection, Selection.End(xlUp)).Select
    ActiveCell.Offset(-7951, 0).Range("A1:A7951").Select
    ActiveCell.Activate
    ActiveSheet.Paste
End Sub

我不确定您的结束单元格是否总是相同的,这意味着您可能希望“取消”硬编码行,但您可以尝试这样做

Sub test()
    Range(Cells(1, 1), Cells(7951, 1)) = "=LEFT(RC[1],3)"
End Sub
Sub test()
    ' dimension the variable type
    Dim lastRow As Long
    ' select cell "B1"
    Cells(1, 2).Select
    ' jump to the last consecutive row in column B
    Selection.End(xlDown).Select
    ' collect the row number into a variable
    lastRow = ActiveCell.Row
    ' paste the equation into the variable length range
    Range(Cells(1, 1), Cells(lastRow, 1)) = "=LEFT(RC[1],3)"
End Sub
如果您总是根据列B中使用的行数将方程式放入列A中,您可以尝试这样做

Sub test()
    Range(Cells(1, 1), Cells(7951, 1)) = "=LEFT(RC[1],3)"
End Sub
Sub test()
    ' dimension the variable type
    Dim lastRow As Long
    ' select cell "B1"
    Cells(1, 2).Select
    ' jump to the last consecutive row in column B
    Selection.End(xlDown).Select
    ' collect the row number into a variable
    lastRow = ActiveCell.Row
    ' paste the equation into the variable length range
    Range(Cells(1, 1), Cells(lastRow, 1)) = "=LEFT(RC[1],3)"
End Sub

请将以下代码复制到工作表中

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual


    If Target.Address = "$A$1" And Target.Count = 1 And Target.HasFormula Then

        Dim lastRow As Long
        lastRow = Range("A65000").End(xlUp).Row

        Dim rng As Range
        Set rng = Range("A2:A" & lastRow)

        '        Target.Copy
        '        rng.PasteSpecial xlPasteFormulas

        'OR
        '  rng.Formula = Target.Formula

       ' OR

        rng.FormulaR1C1 = Target.FormulaR1C1

    End If

    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
End Sub

感谢Todd和用户2063626

我决定采用一种更简单的方法。我只需要获得最后一行就可以设置我的选择区域;要写入的实际值中不使用最后一行的编号。要操作的文件是平面ascii导出;列布局是恒定的,只有行数是可变的

将公式写入A1后,我向下移动B列,每次测试一个单元格的值;如果为TRUE,则将公式复制到左侧相邻单元格;如果为FALSE,则结束进程

Sub FillClientCodes()

    Range("A1").Select
    ActiveCell.FormulaR1C1 = "=LEFT(RC[1],3)"
    ActiveCell.Select
    Selection.Copy
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Offset(1, 0).Select
CheckCell:
    ActiveCell.Activate
    If ActiveCell.Value <> 0 Then
        ActiveCell.Offset(0, -1).Select
        ActiveCell.Activate
        ActiveSheet.Paste
        ActiveCell.Offset(0, 1).Select
        ActiveCell.Offset(1, 0).Select
        GoTo CheckCell
    Else: GoTo EndOfData
    End If
EndOfData:

End Sub
Sub-FillClientCodes()
范围(“A1”)。选择
ActiveCell.FormulaR1C1=“=左(RC[1],3)”
ActiveCell。选择
选择,复制
ActiveCell.Offset(0,1)。选择
ActiveCell.Offset(1,0)。选择
检查单元:
激活细胞,激活
如果ActiveCell.Value为0,则
ActiveCell.Offset(0,-1)。选择
激活细胞,激活
活动表。粘贴
ActiveCell.Offset(0,1)。选择
ActiveCell.Offset(1,0)。选择
转到检查单元
其他:转到EndOfData
如果结束
EndOfData:
端接头
它并不优雅——它比单一的选择和粘贴运行得慢——但它可以工作,并且可以处理我需要处理的所有文件。再次感谢