VBA:在下一栏重复相同的过程

时间:2017-03-21 14:19:24

标签: vba excel-vba excel

我正在尝试自动计算不同列的RSS。在下面的示例中,我计算了G列中Y值的RSS。只有我的Y值会改变列,这意味着我的X值将始终位于相同的列中。

是否可以在(例如,列H)中为下一列Y值自动重复此计算,依此类推,直到列的第一行中没有更多名称?

我已经尝试过循环这个过程但是VBA总是会给我一些错误信息。

Private Sub Regr(strWksData As String, WsTools As Worksheet, strWksFF3 As String, strWksResult As String)

Dim NoOfRow As Long

Dim rX1 As Range
Dim rX2 As Range
Dim rX3 As Range

Dim rY1 As Range
Dim rY2 As Range
Dim rX3 As Range


'Set X ranges
Set rX1 = Worksheets(strWksFF3).Range("C2:E21")
Set rX2 = Worksheets(strWksFF3).Range("C22:E41")
Set rX3 = Worksheets(strWksFF3).Range("C42:E64")

'Set Y ranges
Set rY1 = Worksheets(strWksData).Range("G2:G21")
Set rY2 = Worksheets(strWksData).Range("G22:G41")
Set rY3 = Worksheets(strWksData).Range("G42:G64")

'Loop through columns
'Provide statistic
Do Until Worksheets(strWksData).Range("G").Value = ""

vStat1 = Application.WorksheetFunction.LinEst(rY1, rX1, True, True)
Worksheets(strWksResult).Range("G2").Value = vStat1(5, 2)
NoOfRow = Worksheets(strWksData).Range("G2:G21").Rows.Count
WsTools.Range("B2").Value = NoOfRow

vStat2 = Application.WorksheetFunction.LinEst(rY2, rX2, True, True)
Worksheets(strWksResult).Range("G3").Value = vStat2(5, 2)
NoOfRow = Worksheets(strWksData).Range("G22:G41").Rows.Count
WsTools.Range("B3").Value = NoOfRow

vStat3 = Application.WorksheetFunction.LinEst(rY3, rX3, True, True)
Worksheets(strWksResult).Range("G4").Value = vStat3(5, 2)
NoOfRow = Worksheets(strWksData).Range("G42:G64").Rows.Count
WsTools.Range("B4").Value = NoOfRow

Call GetNextColumn("G")
counter1 = counter1 + 1

Loop


MsgBox ("RSS Done")

End Sub

任何形式的帮助都将深表感谢。非常感谢你提前!

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码获取工作表的最后一列索引:

Dim wSheet : Set wSheet = Thisworkbook.worksheets("mysheetnamehere")
lastColumn = wSheet.Cells(1, wSheet.Columns.Count).End(xlToLeft).Column

如果最后一列是Y,这将给你25个。然后你可以编写一个足够简单的循环:

For myCol = 1 to lastColumn
    wSheet.Cells(2, myCol).Value = "Something"
Next myCol

上面的示例将使用标题值迭代第2行中的所有列,并插入文本" Something"进入他们。

如果需要,您也可以使用非常相似的方式获取最后一行:

lastRow = wSheet.Cells(wSheet.Rows.Count, 1).End(xlUp).Row