Используйте общую информацию для создания набора данных - PullRequest
0 голосов
/ 13 октября 2019

Я создал файл, в котором я использую некоторые поля для создания набора данных. Имя проекта От даты до даты Сумма

В моем файле 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, но на самом деле незнаю, как это сделать. Я надеялся получить здесь указатели сома:)

1 Ответ

0 голосов
/ 13 октября 2019

Примерно так, если я понимаю, что вы имеете в виду :) Мои данные такие же, как ваши в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...