我正在使用一本包含大量床单的excel书;第一张表链接到外部程序并通过外部函数提取数据,导入的行数变化很大 .
该块数据通过许多后续表格进行传播 . 第一步是使用工作表1中的行数填充列A(行名称) . 从这里,数据被分成多个列(当前为B-> L) . 顶行使用IF()函数填充第一行,我正在寻找一个干净的宏来将此公式复制到第x行(随每次数据导入刷新而变化),然后粘贴可管理文件大小的值 .
到目前为止,这里已经到了这里 . 它工作,但它是公平的(阅读:非常!)笨拙:
Sub Refresh_Data()
Sheets("Sheet2").Select
ActiveWindow.ScrollWorkbookTabs Sheets:=13
Sheets(Array("Sheet2" ... "Sheet25")).Select
Sheets("Sheet2").Activate
Sheets("Sheet25").Select Replace:=False
Range("B1:L1").Select
Selection.Copy
Range("__B2:B1000__").Select
ActiveSheet.Paste
Application.Calculate
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets(Array("Sheet2" ... "Sheet25")).Select
Sheets("Sheet2").Activate
Sheets("Sheet25").Select Replace:=False
Sheets("Sheet2").Select
Range("B3").Select
Sheets(Array("Sheet2" ... "Sheet25")).Select
Sheets("Sheet2").Activate
Sheets("Sheet25").Select Replace:=False
Range("B3:L4").Select
Range("__B2:L1000__").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Check_sheet").Select
MsgBox "Update complete"
End Sub`
我想要实现的主要功能是将代码 B2:L1000
替换为可以评估A列中行数的内容,并相应地选择行B到L中的范围 .
由于列L是最后填充的列,我不明白为什么这也不能水平完成而不是定义“B:L”,因为需要添加以后的列 .
2 回答
虽然早期的答案有其优点:
1)我不会使用COUNTA,因为如果行或列中有空单元格,则会忽略底部或右侧的单元格 .
2)在运行宏之前,我永远不会依赖用户选择要使用的正确表单;特别是有这么多床单的人 .
我对这个问题的反应是你已经设置了Macro Record,在你的工作簿上闲逛然后停止了记录 . 你选择一件事,然后选择另一件事 . 滚动页面 . 对我来说,大多数陈述都不笨拙,毫无意义 .
以下内容确实包含了有关查找A列最后一行的问题的答案,但它更多的是关于查找范围的维度,将数据从范围中取出然后将其放在其他位置的教程 . 这似乎是您对VBA最简单的理解所做的大部分工作 . 如果这种批评不公平,我很抱歉,但这是你的问题给我的印象 .
不要绝望!我们大多数人都从宏录制器开始,仍然使用它来发现一个不熟悉的命令的语法 . 看看其他问题 . 有些人询问异国情调的功能,但很多都是关于向有经验的程序员传递数据的简单方法 . 用提问者的问题设置一些工作簿 . 将解决方案复制并粘贴到模块中 . 使用F8(参见调试器)逐步执行它,在Excel和Editor之间切换,观察工作表发生的情况并将光标移到变量上以查看其当前值 . 花半天时间玩 . 你会惊讶于它开始有多快有意义 . 祝你好运,编程好 .
以下应该做的伎俩:
笔记:
Excel.Evaluate(...)
允许您在VBA宏中使用工作表函数的结果 .COUNTA(range)
是一个工作表函数,用于计算给定范围内非空单元格的数量 . 在这种情况下,它可用于确定数据集中的总行数,以及第1行中包含公式的列数 .