excel中的周细分数据

时间:2012-09-18 10:58:31

标签: excel

我在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

我该怎么办?

修改

我在想,也许最好不要按周计算,而是按天计算,因为我可能会重叠日期。然后我可以在新数据上创建一个数据透视表。

2 个答案:

答案 0 :(得分:1)

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

如果您按照以下方式整理数据: DataPicture1

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

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

你应该得到这样的东西: After Macro Result

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

DateVlookupTable

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

=WEEKNUM(C2,2)

以下是带标题的开始数据(必须删除才能使宏正常工作: Begin Data With Headers

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

您应该能够轻松达到以下目的: Final Result

如果您需要有关如何使用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

答案 1 :(得分:0)

为您的数据添加新列:

WEEKNUM(A1,2)

或德语:

KALENDERWOCHE(A1;2)

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

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

这也在这里被问到:

How to convert date to week number

编辑:

有一点误会 - 我正致力于改善...

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

我仍然认为WEEKNUM在这里可以提供帮助......如果我找到更多,我会重复。

修改

有了这个,您可以从特定日期开始减少几个星期的范围。

C21=Date

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

H21=G21+7

这应该做其余的事情,但你必须找出标准部分的正确格式 - 可以使用“&gt; = D1”或类似的东西 - 就像在条件格式中一样。

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

这里的价格在col B中,date-start将在C中,并将与我们从G21的给定日期进行比较。我最初的想法是:

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

但正如我所说,标准中存在一些错误。希望你能得到这个想法。