Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel中的周细分数据_Excel - Fatal编程技术网

excel中的周细分数据

excel中的周细分数据,excel,Excel,我在excel工作表中有一些数据,如产品、价格和时间间隔(三个日期:产品激活、产品停用、报价有效期) 我必须按周对数据进行细分,以便对价格进行分析 例如: Prod1 | Prices1 | 2012/08/01 | 2012/09/08 Prod2 | Prices2 | 2012/08/14 | 2012/10/16 在: 我怎样才能继续 编辑 我在想,也许最好不要以周为基础,而是以天为基础,因为我可以有一个重叠的日期。然后我可以在新数据上创建透视表。向数据中添加新列: WEEKNUM(A

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

我必须按周对数据进行细分,以便对价格进行分析

例如:

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

我怎样才能继续

编辑


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

向数据中添加新列:

WEEKNUM(A1,2)
或德语:

KALENDERWOCHE(A1;2)
A1表示日期,2表示从周一开始的一周

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

这里也有人问:

编辑:

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

好的,再看一遍,它有点复杂,因为你想从你的小数据集衍生到一个更大的数据集。最终,一个产品会有多行,一周内还会有多行

我仍然认为WEEKNUM在这里是有帮助的。。。如果我找到更多,我会重新编辑

编辑

使用此选项,您可以从特定日期开始向下粘贴周的范围

C21=Date

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

H21=G21+7
剩下的就用这个了,但是你必须为criteria部分找到正确的格式-可以在条件格式中使用“>=D1”或类似的东西

F21=SUMIFS(B:B,C:C,G21)
这里的价格是B列,起始日期是C列,并与G21的给定日期进行比较。我最初的想法是:

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

F21=SUMIFS(B:B,C:C,“>=G21”,D:D,”我认为最直观的方法就是使用VBA

如果您这样组织数据:

然后,您可以运行此宏,它将拆分周数:

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
等等

以下是带标题的begin data(必须删除该标题才能使宏正常工作:

这可能是一个过于复杂和混乱的方式来解决你的问题,但它会解决你的问题

您应该能够轻松地获得以下内容:

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

编辑:

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

子问题MacroperDaybasis()
将wbk设置为工作簿
设置wbk=thishworkbook
将ws设置为工作表
设置ws=wbk.Sheets(1)
暗淡单元格作为范围
变暗数据范围作为范围
变暗行索引作为范围
Set DataRange=ws.Range(“A1:D10000”)
对于DataRange.Rows中的每个行索引
如果RowIndex.Cells(1,3).Value
因此,您基本上是说需要按日期(按周顺序)对列表进行排序?@MikeKellogg:真的,我需要根据覆盖的周数拆分一条记录。例如,Prod1 | Prices1 | 2012/08/01 | 2012/09/08记录将生成6条记录,因为2012/08/01-2012/09/08间隔包含6周。那么这6周的预期输出是什么?基本上,这6条记录是什么样子的?一列价格?等等那么,您是在寻找解决此问题的宏解决方案,还是只寻找基本的excel功能?@pnuts:我可以了解更多信息(如产品、价格)对于同一周,我检索了开始日期和结束日期的周数,但我不知道如何继续。sry,目前无法进一步帮助您-最大的问题是,您希望从较小的子集中增加数据。目前,我尝试使用VBA进行此操作或访问,但获取ea的周数据应该很容易ch产品单独-因此应该有一种方法来合并它们。要获得一个产品的数据,你应该在两个日期行上做一个标记,就像我的公式一样,然后做一个vlookup/sumif左右的标记来选择特定产品到这些日期的价格。我无法获得正确的标准,但你可以通过
SUMIFS
获得正确的价格>函数,一旦有了两行日期。可以使用多个条件设置此函数,以便您可以使用state、daterange和productname,如果找到匹配项,则此函数将用作F21的数据(根据我的示例)谢谢。我会试试的。我在想也许最好不要以周为基础,而是以天为基础,因为我可以有一个日期重叠。然后我可以根据新数据创建一个数据透视表。你当然可以将同样的方法应用于每天。我同意只以天为基础进行推理会更好、更容易。请参阅我的ed这是一个如何调整宏的示例-假设您将数据保持在相同的范围内。基于周的示例有效。谢谢。现在我尝试基于日期的示例。当我尝试基于日期的示例时,我不知道为什么添加的行的开始日期大于结束日期。是的,我尝试了几次欺骗代码这样做-但我做不到-所以我不确定为什么会发生这种情况。从编程角度讲,宏只会在开始日期(在C列中)小于结束日期时插入一行。您确定它不是比开始日期早一年的日期吗?
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
=WEEKNUM(C2,2)
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