Excel VBA动态范围/循环问题

时间:2017-11-23 10:39:12

标签: vba excel-vba loops dynamic range

我正在为银行开发财务模型并遇到以下问题,我无法在Excel VBA中解决,并感谢您的帮助。

我构建了一个简单的宏,它基本上做了两件事:(i)它清除给定范围内的内容,(ii)它用公式填充相同的范围。它以非常简短的方式显示如下:

Sub AutoCalculateCashFlows()
    Range(D208:L208).ClearContents
    Range("L208").FormulaR1C1 = "=+R[-34]C-R[-34]C[-1]"
    Range("L208").AutoFill Destination:=Range("E208:L208"), Type:=xlFillDefault
End Sub

我的问题是应该自动填充的范围取决于用户在E10:L10范围内填写的单元格数。用户将从右到左开始填充此范围,但我不知道它们将从列L向左移动多远。我的宏自动填充的公式至少需要两个数据,即。至少L10和K10应该填充,如果后者是这种情况,那么宏只需要用公式自动填充L208,如果J10:L10被填写,那么宏需要自动填充范围L208:K208等等如果填写完整的D10:L10范围,那么E208:L208应填充公式。

我曾考虑通过两条路线来解决这个问题:(i)将其作为动态范围问题来处理,在这种情况下我需要一个vba代码来确定用户在D10:L10范围内填充的最后一个单元格的前一个并在“目的地:=范围(”E208: L 208“)”中使用该单元格的列代码,或者(ii)运行一个循环,该循环将使用公式填充范围E208:L208直到该单元格在D10范围内的上一列中:L10由用户填写,并在不是时停止。

希望这是有道理的,并提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

当您需要VBA中的动态范围时,您应该只构建一个。这可能是最简单的方法:

Sub TestMe()

    Dim colRange    As Long
    Dim rowRange    As Long
    Dim rngMain     As Range

    rowRange = 10

    With Worksheets(1)
        colRange = .Cells(1, .Columns.Count).End(xlToLeft).Column
        Set rngMain = .Range(.Cells(rowRange, colRange), .Cells(100, 200))
        MsgBox rngMain.Address
    End With

End Sub

它是动态的,基于第一个工作表的第1行中最后使用的列。

关于第1行中第二个使用的列,这3个中的一个可能会为您完成,具体取决于您想要的内容:

.Cells(1, 1).End(xlToRight).End(xlToRight).Column
.Cells(1, 1).End(xlToRight).Column
.Cells(1, 1).End(xlToRight).Column + 1