【发布时间】:2016-05-12 07:00:56
【问题描述】:
宏的工作原理如下:
- 我们有一个程序以 1-120s 的间隔记录值,来自它的数据在 Sheet2 上,动态数据范围 B:W 列
- 用户正在 Sheet3 上输入目标和偏差值
- 在 Sheet2 上,如果一行中的最大值大于“目标值减去偏差值”,它将开始将行复制到 Sheet1 上的表中
- Sheet1 表格中的值需要每 2 分钟显示一次,因此宏将复制每 X 行(取决于间隔)
宏工作正常,但我需要在 8 个不同的目标值上运行 8 次。想知道是否有人有任何想法加快速度
'Cell address with target value"
target = Sheets(3).Cells(93, 2).Value
'Cell address with deviation value"
deviation = Sheets(3).Cells(95, 2).Value
'Calculate time between measurements'
lngRowMultiplier = 120 / Sheets(3).Cells(81, "B").Value
'First row to copy into'
pasteRow = 34
'Row number to search through'
For i = 2 To 8000
'Range to search through'
s_max_value_range = "B" & i & ":W" & i
'Max value in a row'
max_value = Application.WorksheetFunction.Max(Sheets(2).Range(s_max_value_range))
If (Abs(target - max_value) <= deviation) Then
'Copy up to 5 hours or until lowest value in a row will be bigger than target value + deviation'
For j = 1 To 150
'Minimum value in a row'
min_value = Application.WorksheetFunction.Min(Sheets(2).Range("B" & i + (j - 1) * lngRowMultiplier & ":W" & i + (j - 1) * lngRowMultiplier))
If (min_value <= target + deviation) Then
s_copyRange = "B" & i + (j - 1) * lngRowMultiplier & ":W" & i + (j - 1) * lngRowMultiplier
s_pasteRange = "C" & pasteRow & ":V" & pasteRow
'Copy to Sheet1'
Sheets(2).Range(s_copyRange).Copy Destination:=Sheets(1).Range(s_pasteRange)
Sheets(1).Range("B" & pasteRow) = Sheets(2).Range("B" & i + (j - 1) * lngRowMultiplier)
pasteRow = pasteRow + 1
End If
Next j
i = 8001
End If
Next i
感谢所有帮助
【问题讨论】:
-
这个问题在CodeReview.SE 上比较热门。