使用一般信息创建数据集

时间:2019-10-13 09:36:59

标签: excel vba excel-formula powerbi

我已经建立了一个文件,我正在其中使用一些字段来创建数据集。 项目名 从日期 至今 金额

在我的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指针:)

1 个答案:

答案 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