0

我在 Excel 工作表中有一些数据,例如产品、价格和时间间隔(三个日期:产品激活、产品停用、优惠有效期)。

我必须根据周数细分数据以进行价格分析。

例如:

Prod1 | Prices1 | 2012/08/01 | 2012/09/08
Prod2 | Prices2 | 2012/08/14 | 2012/10/16

在:

week 2012/07/30-2012/08/05 | Prod1 | Prices1
week 2012/08/06-2012/08/12 | Prod1 | Prices1
week 2012/08/13-2012/08/19 | Prod1 | Prices1
week 2012/08/13-2012/08/19 | Prod2 | Prices2
week 2012/08/20-2012/08/26 | Prod1 | Prices1
week 2012/08/20-2012/08/26 | Prod2 | Prices2
week 2012/08/27-2012/09/02 | Prod1 | Prices1
week 2012/08/27-2012/09/02 | Prod2 | Prices2
week 2012/09/03-2012/09/09 | Prod1 | Prices1
week 2012/09/03-2012/09/09 | Prod2 | Prices2
week 2012/09/10-2012/09/16 | Prod2 | Prices2

我该如何继续?

编辑

我在想也许最好不要以周为基础进行推理,而是以日为基础,因为我可能会有一个重叠的日期。然后我可以在新数据上创建一个数据透视表。

4

2 回答 2

1

我认为最直观的方法就是使用 VBA。

如果您像这样组织数据: 数据图片1

然后你可以运行这个宏,它会拆分出周数:

Sub QuestionMacro()

Dim wbk As Workbook
Set wbk = ThisWorkbook

Dim ws As Worksheet
Set ws = wbk.Sheets(1)

Dim cell As Range
Dim DataRange As Range

Dim RowIndex As Range

Set DataRange = ws.Range("A1:D10000")

    For Each RowIndex In DataRange.Rows

        If RowIndex.Cells(1, 5).Value < RowIndex.Cells(1, 6).Value Then
            RowIndex.EntireRow.Copy
            RowIndex.EntireRow.Insert
            RowIndex.Cells(1, 5).Value = RowIndex.Cells(1, 5).Value + 1
        End If

    Next RowIndex

End Sub

你应该得到这样的东西: 宏结果之后

然后您可以使用拆分出来的周数、vlookup 和这样的表格来检索适当的实际日期:

日期VlookupTable

Jook 的回复中提到的周数公式是:

=WEEKNUM(C2,2)

等等

这是带有标题的开始数据(您必须删除它才能使宏正常工作: 以标题开始数据

这可能是解决您的问题的一种过于复杂和混乱的方法,但它会解决您的问题。

你应该可以很容易地得到这样的东西: 最后结果

如果您需要有关如何使用 VLookup 的更多信息,请告诉我。祝你好运。

编辑:

如果您想每天获取价格和产品(我个人更喜欢),您可以像这样调整上述宏(假设您的日期是实际数字):

Sub QuestionMacroPerDayBasis()

Dim wbk As Workbook
Set wbk = ThisWorkbook

Dim ws As Worksheet
Set ws = wbk.Sheets(1)

Dim cell As Range
Dim DataRange As Range

Dim RowIndex As Range

Set DataRange = ws.Range("A1:D10000")

For Each RowIndex In DataRange.Rows

    If RowIndex.Cells(1, 3).Value < RowIndex.Cells(1, 4).Value Then
        RowIndex.EntireRow.Copy
        RowIndex.EntireRow.Insert
        RowIndex.Cells(1, 3).Value = RowIndex.Cells(1, 3).Value + 1
    End If

Next RowIndex


End Sub
于 2012-09-18T15:56:22.060 回答
0

为您的数据添加一个新列:

WEEKNUM(A1,2)

或德语:

KALENDERWOCHE(A1;2)

A1 是日期,2 是从星期一开始的一周

现在您可以使用 VLOOKUP 或过滤器来选择您的数据。

这也被问到这里:

如何将日期转换为周数

编辑:

有一点误解 - 我正在努力改进......

好的,再看看这个,它有点复杂,因为你想从你的小数据集派生到一个更大的数据集。您最终会得到一个产品的多行,以及一周的多行。

我仍然认为 WEEKNUM 在这里会有所帮助......如果我发现更多,我会重新编辑。

编辑

有了这个,您可以粘贴从特定日期开始的周范围。

C21=Date

G21=C$21+(ROW($G21)-ROW(G$21))*14

H21=G21+7

这应该完成其余的工作,但是您必须找出标准部分的正确格式 - 可以使用 ">=D1" 或类似的东西 - 就像在条件格式中一样。

F21=SUMIFS(B:B,C:C,G21)

此处价格将在列 B 中,日期开始将在 C 中,并将与 G21 中的给定日期进行比较。我最初的想法是:

F21=SUMIFS(B:B,C:C,">=G21",D:D,"<=H21",A:A,"="Product1"")

但正如我所说,标准中有一些错误。希望你明白你的想法。

于 2012-09-18T14:49:12.880 回答