我已经建立了一个文件,我正在其中使用一些字段来创建数据集。 项目名 从日期 至今 金额
在我的excel文件中,我使用VBA创建了一个表,其中两个日期之间的每一天都被分配了中间值。
例如,如果我有以下信息(通常在一个字段为一列的excel表中):
project: project1 From date: 2019-01-01 To date: 2019-01-04 Amount: 100 The table would be: Project Date Amount Project1 2019-01-01 25 Project1 2019-01-02 25 Project1 2019-01-03 25 Project1 2019-01-04 25
我的问题是,当表中有很多项目和很多数据时(发现删除和更新日期),此方法变得相当慢。所以我想知道是否有办法使它更有效。
能够使用数据透视表中的信息很重要,因此我正在考虑使用Excels数据模型,但实际上并不知道如何去做。我希望在这里获得som指针:)
答案 0 :(得分:0)
如果我得到您的意思,就是这样:)我的数据与J1:K4
中的数据相同,并且我将J6
的结果转储下来
Sub AddToTable()
Dim rngInspect As Excel.Range
Dim rngDestination As Excel.Range
Dim strProjName As String
Dim dtStartDate As Date
Dim dtEndDate As Date
Dim dblCost As Double
Dim dblCostPerPeriod As Double
Dim lngPeriods As Long
Dim lngCounter As Long
Set rngDestination = Range("j6")
Set rngInspect = Range("j1:k4")
With rngInspect
strProjName = .Cells(1, 2).Value
dtStartDate = .Cells(2, 2).Value
dtEndDate = .Cells(3, 2).Value
dblCost = .Cells(4, 2).Value
End With
lngPeriods = DateDiff("m", dtStartDate, dtEndDate) + 1
dblCostPerPeriod = dblCost / lngPeriods
For lngCounter = 1 To lngPeriods
rngDestination.Offset(lngCounter - 1, 0).Value = strProjName
rngDestination.Offset(lngCounter - 1, 1).Value = DateAdd("m", lngCounter - 1, dtStartDate)
rngDestination.Offset(lngCounter - 1, 2).Value = dblCostPerPeriod
Next lngCounter
End Sub