Excel VBA 动态范围/循环问题

托尼·菲安特

我正在为一家银行开发财务模型,但遇到了以下我无法在 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内的前一列中的单元格是由用户填写,未填写时停止。

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

维佳塔

当您在 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章