excel如何根据一系列日期数据(yyyymmdd)来统计当年的第几周的个数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了excel如何根据一系列日期数据(yyyymmdd)来统计当年的第几周的个数?相关的知识,希望对你有一定的参考价值。

如图,假设A列有以下日期,-->如何统计A列中2013年第一周有多少个数据?,第2周有多少个数据,。。。第52周有多少个数据?(要使用函数直接在B列生成,而且A列的数据必须是日期,即YYYYMMDD格式。)

       要用到数组公式,不需要辅助列,不需要任何其他操作,只需要在B1单元格输入公式如下:

=SUM(IF(INT((A:A-"2013-1-1"+WEEKDAY("2013-1-1")+1)/7)+1=ROW(A1),1,0))

       注意:这是个数组公式,要按CTRL+SHIFT+ENTER结束编辑(如果操作成功,则单击B1单元格看到的公式两边是有大括号的)。

       然后把这个公式复制下拉52格就行,对应的分别就是第1周至第52周的数据。另外,为了提高计算的速度,可以把公式里的A:A换成你有数据的范围(比如$A$1:$A$100,只有100行数据)


假设条件:

    每周是以星期天为第1天;

    你所说的2013年的第一周是指2013年1月1日(星期四)至2013年1月4日(星期六)

如果假设条件不符合你的要求,则公式需要稍做改动。

追问

这个公式我看不懂,能解释每段函数对应的意思吗?(假设条件是星期天为第一天,可如果以星期一为第一天,怎么整哦?)因为不懂意思,所以不知道改;

PS:

按照月来统计1~12月的公式是这样的:
=SUMPRODUCT((YEAR(nouvelle!Y$7:Y$41)=2012)*(MONTH(nouvelle!Y$7:Y$41)=1))
,我也不懂这个函数;

追答

刚发现我那个公式写错了,应该是:

=SUM(IF(INT((A:A-"2013-1-1"+WEEKDAY("2013-1-1")-1)/7)+1=ROW(A1),1,0))

说明一下我那个公式的思路吧:

    A:A-"2013-1-1“是得到两个日期之间的天数差;

    WEEKDAY("2013-1-1")是求2013年1月1日对应的星期几,返回值是整数,其中1对应星期日,2对应星期一,以此类推。例如:2013-1-1对应的是星期二,则WEKDAY("2013-1-1")返回的是3;

    INT((A:A-"2013-1-1")+WEEKDAY("2013-1-1")+1)/7的意思是求A行各列日期对应的是第几周,因为天数差从2013年1月1日起是0开始的,如果1月1日是周二的话,则1月6日(天数差为5)就是周日,则是下一周了,即天数差为0至4为第1周,5至11为第2周,为了计算方便,在些基础上加2(WEEKDAY("2013-1-1")-1)即变成:2至6为第1周,7至13为第2周。这样一来用INT取这个值除以7的整数部分即可得到是当年的哪一周了;

    ROW(A1)在往下复制的时候会变成ROW(A2)、ROW(A3),相当于第一行是1,第二行是2……以此类推;

    然后用IF判断,当A列的数据对应的是第1周时,返回1,否则返回0,然后再用SUM求这个数组的和,这个和也就是第1周的数据数。

如果以星期一为第一天的话,公式改为:

=SUM(IF(INT((A:A-"2013-1-1"+WEEKDAY("2013-1-1")-2)/7)+1=ROW(A1),1,0))

追问

怎么还是不行呢?郁闷了。。。

追答

你能把你的文件发给我看看吗?或许我的文件有什么细节和你的不一样。

参考技术A 间接方法如下
在B1中输入或复制粘贴此公式
=WEEKNUM(A1,2)
下拉填充或双击B1右下角的填充柄

在C1中输入或复制粘贴此公式
=COUNTIF(B:B,ROW(A1))
下拉填充共52或53行
参考技术B 这个比较麻烦点
setp1.首先加入一行计算这些日期是那一周,一般Excel有织带函数weeknum(e12,1)假设日期在e12单元格,如果没有自带weeknum函数就比较麻烦点,要自己写函数,把下面的函数抄进去也可以=IF(E12,INT((E12-DATE(YEAR(E12),1,0)+WEEKDAY(DATE(YEAR(E12),1,0),2)+7-WEEKDAY(E12,2))/7),""),一直往下拉,就可以了
step2,统计周函数
可以用countif函数,把1到54分别写出来,用countif函数统计就可以了,
或者数据图示表一下就出来了,
参考技术C 我想的办法需加一个辅助列,在C1列输入=WEEKNUM(A1,2)后回车,下拉计算,再在B1输入=COUNTIFS(A:A,"<>"&"",C:C,"="&ROW(A1))后回车,下拉到52行,得到所需结果 参考技术D 使用自定义函数

如何检查我的日期格式?

【中文标题】如何检查我的日期格式?【英文标题】:How can I check the format of my date? 【发布时间】:2015-11-10 11:58:27 【问题描述】:

我有一张表,我想根据YYYYMMDD,HH24MISS检查记录的日期时间格式。如果我的记录的日期时间格式不正确,请写一条错误消息。如何在 PL/SQL 中创建函数或过程?

【问题讨论】:

如果您使用原生格式(例如date)存储值,那么您不必担心格式。 此列的数据类型? if date - 格式将根据 nls_date_format 参数。如果您想以其他格式为本专栏提供鞋履 - 只需使用 to_char 函数 你是对的,但我没有存储这些记录,我需要检查它。你有什么想法吗? 例如这是我的日期 => 10/06/2013 11:05:55 。我想检查一下日期格式是否正确? Return number from Oracle Select statement after parsing date的可能重复 【参考方案1】:

你可以这样写一个函数:

CREATE OR REPLACE FUNCTION CheckDateString(str IN VARCHAR2) RETURN DATE IS
BEGIN
    RETURN TO_DATE(str,'YYYYMMDD,HH24MISS');
EXCEPTION
    WHEN OTHERS THEN 
        RETURN NULL;
END CheckDateString;

并像这样使用它

SELECT *
FROM my_table
WHERE CheckDateString(DATE_STRING) IS NULL 
    AND DATE_STRING IS NOT NULL;

当然,下一个行动点是更正错误的值并将该列的数据类型更改为DATE,分别。 TIMESTAMP.

【讨论】:

谢谢@Wernfried Domscheit。我曾经像这样更改数据类型 SELECT * FROM my_table WHERE CheckDateString(to_number(to_char(CRTTAR,'YYYYMMDDHH24MISS'))) IS NULL AND CRTTAR IS NOT NULL; 输入数据类型应该是VARCHAR,我改了。 对于你的函数,你认为 10/06/2013 11:05:55 这个日期的返回值是多少? 您没有要求dd/mm/yyyy hh24:mi:ss 格式。根据您的问题,格式为YYYYMMDD,HH24MISS,对应于20130610,110555 我完全理解你 :) 我应该想到这一点。非常感谢【参考方案2】:

如果您的列是 VARCHAR2 并且您需要检查其中的值是否可以使用您想要的格式转换为日期,这可能是一个解决方案:

declare
  v_foo_date date;
begin
  for r_date in (
    select date_col from my_table
  ) loop
      begin 
        v_foo_date := to_date(r_date.date_col, 'YYYYMMDD,HH24MİSS');
        exception when others then
           dbms_output.put_line('error in validating value ' || r_date.date_col);
      end;
  end loop;
end;

【讨论】:

【参考方案3】:

如果您想获取具有所需格式的数据,也许您可​​以执行以下操作: 否则我会选择 Wernfried Domscheit 的答案。

    将日期转换为表格中的日期时间

    select *, cast(yourDateColumn as datetime) as verifiedDate into #tempTable from yourTable

    然后将yourTable 中的数据与#tempTable 中的数据进行对比

    select * from yourTable yt inner join #tempTable tt on yt.yourDateColum = tt.verifiedDate and yt.ID = tt.ID

【讨论】:

以上是关于excel如何根据一系列日期数据(yyyymmdd)来统计当年的第几周的个数?的主要内容,如果未能解决你的问题,请参考以下文章

如何把日期改成yyyy-mm-dd

在excel中 如何快速吧日期格式ddmmyyyy改为yyyymmdd这种

excel 日期格式为 "yyyymmdd hhmm" 如何计算两个时间的差?

如何将日期格式yyyymmdd

请问在excel中如何把数值YYYYMMDD转换为日期YYYY-MM-DD呢?如果直接设置单元格格式为日期,只能显示一连串

Excel 如何将YYYY-MM-DD日期格式改为YYYYMMDD格式