-1

需要一个代码片段;如果有好心的大师可以提供帮助,请。我需要在 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
4

3 回答 3

0

我不确定你的结束单元格是否总是相同的,这意味着你可能想要“取消”对行进行硬编码,但你可以试试这个。

Sub test()
    Range(Cells(1, 1), Cells(7951, 1)) = "=LEFT(RC[1],3)"
End Sub

如果您总是要根据 B 列中使用的行数将方程式放在 A 列中,您可以试试这个。

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
于 2013-03-22T21:26:21.470 回答
0

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

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
于 2013-03-23T01:44:22.643 回答
0

感谢 Todd 和 user2063626,

我决定采用更简单的方法。我只需要获取最后一行来设置我的选择区域;在要写入的实际值中不使用最后一行的编号。要操作的文件是平面 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

它并不优雅——它比单次选择和粘贴运行得慢——但它可以工作,并且可以处理我需要处理的所有文件。再次感谢。

于 2013-03-25T19:32:44.417 回答