全部,我有大量的数据,每周更新两次。数据集不断缩小和增长。 我的问题是,虽然我很容易手动删除或扩展使数据可用的公式,但我希望自动化该过程。 公式涵盖10列。
好的 - 需要帮助,我似乎无法绕过工作表_转换 - 请帮忙。
工作表名为“data”。
我正在使用标题为“任务号”的Col A来建立公式的扩展。
公式为cols Y to AJ。
我想要的只是将自己扩展到最后一行的公式 - 听起来很简单??????
目前数据涵盖30,000行,
另一件事是,使用复制和粘贴宏将数据导入电子表格,这是否部分导致了我的问题?
在13.30
插入这是我试过的
Sheets("data").Select
Bot = Range("A3").End(xlDown).Row
Range("Y30000", "AJ30000").Select
Range("Y30000", "AJ30000").Copy
Selection.AutoFill Destination:=Range("Y30001" & Bot &, ":AJ30001" & Bot),
Type:=xlFillDefault
请帮助(再次)
答案 0 :(得分:2)
我可以想到两种方法,一种是直接使用Excel,另一种是使用VBA。
测试场景:
让我们认为我们的列A和B包含可变数据,然后列C和D包含公式(一旦你在幕后登录,带有公式的列数量就不重要了。)
此外,C列中的公式为= A + B,D列为A-B(C1 = A1 + B1,D1 = A1-B1等)。
<强> Excel中:强>
<强> VBA:强>
希望它能指导您解决问题!
修改强>
这样做的VBA公式就是这样......
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lCellCount As Long
Dim lFormulaCount As Long
Dim oWorkSheet As Excel.Worksheet
Dim oRangeSource As Excel.Range
Dim oRangeDest As Excel.Range
'Define sheet
Set oWorkSheet = Worksheets("Data")
'Count how many entries we have in our dataset now
lCellCount = oWorkSheet.Range("A1").End(xlDown).Row
'Count how many formulas we have to proper delete
lFormulaCount = WorksheetFunction.CountA(oWorkSheet.Columns("Y"))
If lCellCount <> lFormulaCount Then
'I assume we'll have at least one line in our report...
If lFormulaCount > 2 Then oWorkSheet.Range("Y3:AJ" & lFormulaCount).ClearContents
Set oRangeSource = oWorkSheet.Range("Y2:AJ2")
Set oRangeDest = oWorkSheet.Range("Y2:AJ" & lCellCount)
oRangeDest.Formula = oRangeSource.Formula
End If
End Sub
RGDS
答案 1 :(得分:0)
我认为此片段会对您有所帮助。它假定您分别为数据列和公式列之前的hdr单元格指定范围名称(可能是hdr行永远不会被删除)。可以调整以处理其他方案来定位要操作的范围。
' DA1 = 1st data row, FR1 = first formula row
Dim rgDA1 As Range: Set rgDA1 = Range("HDR_ROW_FOR_DATA").Offset(1)
Dim rgFR1 As Range: Set rgFR1 = Range("HDR_ROW_FOR_FORMULAS").Offset(1)
Dim ws As Worksheet: Set ws = rgDA1.Worksheet
' define range rgDAT to cover ALL data rows, and define rgFRM w the same# rows
Dim rgDAT As Range: Set rgDAT = rgDA1.Resize(1 + ws.Rows.Count - rgDA1.Row)
Set rgDAT = Intersect(rgDAT, ws.UsedRange)
Dim rgFRM As Range: Set rgFRM = rgFR1.Resize(rgDAT.Rows.Count)
' now copy the 1st formula row to the other rows
rgFR1.Select
Selection.Copy
rgFRM.Select
ws.Paste
Application.CutCopyMode = False