Excel 如何在数据透视表中设置周开始日

Excel 如何在数据透视表中设置周开始日,excel,pivot-table,Excel,Pivot Table,我正在尝试筛选数据透视表中的数据。我需要把星期一定为一周的第一天。默认值为星期天。你知道怎么设置吗 Edit1:我想用这周的时间做动态过滤。由于默认值为星期天,结果与我的预期不符 Edit2:使用VBA的当前解决方案。我仍然在寻找一个更整洁的解决方案 Sub YmThisWeek() ' ' YmFinal Macro ' ' Dim startDate, endDate As Date endDate = Date startDate = endDate - 7 ' 7 D

我正在尝试筛选数据透视表中的数据。我需要把星期一定为一周的第一天。默认值为星期天。你知道怎么设置吗

Edit1:我想用这周的时间做动态过滤。由于默认值为星期天,结果与我的预期不符

Edit2:使用VBA的当前解决方案。我仍然在寻找一个更整洁的解决方案

Sub YmThisWeek()
'
' YmFinal Macro
'

'
    Dim startDate, endDate As Date

    endDate = Date
startDate = endDate - 7 ' 7 DAYS IN A WEEK

'Pick the star of the week
'vbSunday    1   Sunday (default used)
'vbMonday    2   Monday
'vbTuesday   3   Tuesday
'vbWednesday 4   Wednesday
'vbThursday  5   Thursday
'vbFriday    6   Friday
'vbSaturday  7   Saturday


Do While (startDate < endDate - 1) And Not Weekday(startDate) = 2 '<- week start day

    startDate = startDate + 1

Loop

ActiveSheet.PivotTables("pvtTbl").PivotFields("Date").ClearAllFilters
ActiveSheet.PivotTables("pvtTbl").PivotFields("Date").PivotFilters.Add Type:= _
    xlDateBetween, Value1:=Format(startDate, "dd/mm/yyyy"), Value2:=Format(endDate, "dd/mm/yyyy")
End Sub
Sub-YmThisWeek()
'
'最后一个宏
'
'
Dim startDate,endDate作为日期
endDate=日期
startDate=endDate-一周7'7天
“选择本周的明星
'vbSunday 1 Sunday(默认使用)
“星期一2星期一
“星期二3星期二
“星期三4星期三
"星期四五星期四"
“星期五6星期五
“星期六7星期六

做While(开始日期<结束日期-1)而不是工作日(开始日期)=2'好问题。我没有完美的答案。 但是这个解决方法可能会让你走

  • 点击“星期日”
  • 将其拖动到透视表的末尾

您可以使用VBA实现这一点。但您可以使用的非VBA方法包括向数据中添加额外的列。本周给它贴上标签。然后用一个返回真或假的公式填充它,具体取决于你对一周的定义。例如,如果本周是从最近的星期一到下一个星期六,与单元格F1中存储的日期相比,则公式为:

=AND(A2>=($F$1+1-WEEKDAY($F$1-1)),A2<=($F$1+7-WEEKDAY($F$1-1)))

<代码> =和(A2> =($F$ 1 +1工作日($1$ -1)),A2I编辑了我的问题。这不是命令,重要的是,我需要从星期一到星期日而不是星期日到星期六的数据!我不知道怎么做,但是在行区域中的日期,考虑“分组”。以天为单位,七人一组,从星期一开始。与筛选不同,但可能对您有效。使用VBA,您可以将筛选设置为“本周”通过使用宏选择要显示的相关日期,起始日期为星期一。谢谢@RonRosenfeld,但数据分组对我来说不起作用。你能解释一下如何使用VBA宏设置起始日期吗?如果你还不熟悉VBA,你需要自学VBA。但一个过程是迭代数据透视项“日期”中的“日期”PivotField并将每个数据与定义的范围内的日期数组进行比较;将Visible属性设置为True或False,具体取决于它们是否匹配。这样,行区域中只显示希望显示的日期。您可以通过录制宏从t上面的下拉列表中选择所需的日期来了解情况但是,我有一个非VBA方法,我将在@RonRosenfeld发布。到目前为止,我所做的是记录一个VBA宏,该宏使用DateBetween进行过滤。然后我定义了两个变量来替换value1和value2。value2是当前日期,使用while循环,value1设置为Closer Monday(使用value2)。然后,我让filter方法负责选择范围value1和value2中的数据。我认为一定有一个方法或属性为用户提供了这样的选项!类似于“ThisWeek.StartDay=1”的内容我很想看到非VBA方法!