对于收集的测试数据,我必须在 Excel 中执行一个重复的过程。我必须对收集的每个数据点执行此过程。每次测试我都会收集 200 多个数据点。
我的数据自动填充到 A 列和 B 列中。我需要能够选择 A 列中的所有真实数据,将其乘以一个常数并放在单独的列中。问题是 A 列中每个数据点的单元格数量各不相同。例如,一组测试数据有 800 行,下一组有 3200 行。它始终是独立的,我需要能够选择整行,而不管行数是多少。
我需要能够将其制作成宏,这样我就可以一次完成所有其他必要的数据操作。问题在于我创建宏时...我使用快捷方式选择所有数据,而宏将此步骤视为选择指定单元格。因此,当我为 3200 个单元格长度的数据点录制宏,然后尝试在 800 个单元格的数据点上运行它时,它会选择 3200 个单元格。我需要它只选择真实数据。
答案1
听起来你正在尝试根据字段汇总可变数量的列。尝试小计功能,看看是否适合您。(见示例)
如果没有,你可以使用查找和参考函数获取字段 A 从 1 变为 2 的引用,然后尝试使用引用作为输入生成带有数组的 sum()。抱歉,我不能更详细,但我以前从未尝试过。
A B
--------
+ 1 1.5
| 1 1.6
| 1 1.7
| 1 1.8
+ 1 1.9
1 Total 7
+ 2 1.5
| 2 1.6
| 2 1.7
| 2 1.8
+ 2 1.9
2 Total 7
答案2
这是一个宏观解决方案。
我假设您的数据在 A 列,标题在单元格 A1 中,而列标题在 B 列的单元格 B1 中。将这两个代码块粘贴到模块中,看看它是否适合您。要运行的宏是 MultiplyAllData()。
第一个块是获取 A 列最后一行的函数
Function MyLastRow() As Long
'This will give the last row in column A
Dim theLastRow As Long
Range("A1").Select
Selection.End(xlDown).Select
theLastRow = Selection.Row
MyLastRow = theLastRow
End Function
下一个块是要运行的宏。它将 A 列中的每个值乘以一个常数(您可以编辑),并将结果放在 B 列中:
Sub MultiplyAllData()
Dim ourLastRow As Long
Dim myConstant As Double
myConstant = 3.14 'you can edit your constant here
ourLastRow = MyLastRow 'this is a call to our function
Range("B2").Select
' NOTE: below is the code I got when I first recorded my macro.
' I had test data down to cell A40.
' ActiveCell.FormulaR1C1 = "=RC[-1]*3.14"
' Selection.AutoFill Destination:=Range("B2:B40")
' Range("B2:B40").Select
'
' Here is the modified code from the macro, with more flexibility now
' because of the variables.
ActiveCell.FormulaR1C1 = "=RC[-1]*" & myConstant
Selection.AutoFill Destination:=Range("B2:B" & ourLastRow)
Range("B2:B" & ourLastRow).Select
Range("B1").Select 'park the cursor
End Sub
答案3
鲁迪:
我会使用这样的东西:
Range(Cells(1,ActiveCell.Column),Cells(WorksheetFunction.CountA(Columns(ActiveCell.Column)),ActiveCell.Column)).Select
这将选择活动列中从第 1 行开始包含数据的行数。