【发布时间】:2016-03-19 19:47:40
【问题描述】:
我编写了以下代码,但无法让它按照我希望的方式循环。
每 600 个单元格,我的数据集就会更改为新的一天,我想循环它以便进行正确的计算。在 600 个单元块之间,有 15 个长度各不相同的数据子集。 DO 但是遵循相同的模式,即有一个空白,然后是 2 个不需要计算的无用标题单元格。
如何循环这段代码,使其遍历 15 个子集,然后每 600 个单元格重复一次?谢谢。
Sub SelectandCount()
Dim Top As Double
Dim Bottom As Double
Dim Ratio As Double
Dim count As Integer
For count = 0 To 600
N = Cells(1, 1).End(xlDown).Row
Range("C4:C" & N).Select
Rownum = Selection.Rows.count
NumberofRows = Rownum * 0.2
AdjustedNumberofRows = Round(NumberofRows)
Sheet1.Range("E1").Value = Array(" As Number")
Worksheets(1).Range("E2").Value = AdjustedNumberofRows
ActiveCell.Resize(AdjustedNumberofRows, 1).Select
Topsum = Application.WorksheetFunction.sum(Selection)
Top = (Topsum / AdjustedNumberofRows)
Sheet1.Range("F1").Value = Array("Top")
Worksheets(1).Range("F2").Value = Top
Range("C3").End(xlDown).Select
ActiveCell.Offset(1 - AdjustedNumberofRows).Resize(AdjustedNumberofRows).Select
Bottomsum = Application.WorksheetFunction.sum(Selection)
Bottom = (Bottomsum / AdjustedNumberofRows)
Sheet1.Range("G1").Value = Array("Bottom")
Worksheets(1).Range("G2").Value = Bottom
MetricRatio = (Top / Bottom)
Sheet1.Range("H1").Value = Array("Ratio")
Worksheets(1).Range("H2").Value = Ratio
Next
'ActiveCell.Offset(4, 0).Resize(AdjustedNumberofRows).Select
MsgBox ("Done")
End Sub
【问题讨论】:
-
您可以使用每 15 行重置一次的计数器,或者您可以在数据中找到可以控制触发器的标识符。我经常通过更改日期来做到这一点,将当前日期存储为字符串变量,并根据数据添加检查它,我循环遍历它。如果有变化,我会存储新的日期并继续。
-
有 15 个长度各不相同的数据子集...如果没有某种指标,这将是一个挑战。您很可能需要在循环中使用条件
if/then或select/case。请发布某种模拟/示例数据以获取可重复的示例。 -
指标不同,但它们都是(A、B、C、D、E、F、H、I、J 或 K)。需要注意的是,每组都有所有这些,然后它会重新启动。我认为最合乎逻辑的方法是扫描这些并停在特定的行号处。有什么想法吗?