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