我正在为一家银行开发财务模型,但遇到了以下我无法在 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] 删除。
我来说两句