我正在为银行开发财务模型并遇到以下问题,我无法在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由用户填写,并在不是时停止。
希望这是有道理的,并提前感谢您的帮助。
答案 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