需要一个代码段;如果有一位善良的大师可以提供帮助,请。我需要在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
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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
它不优雅 - 它运行速度比单个选择和粘贴慢 - 但它可以工作,它将适用于我需要处理的所有文件。再次感谢。