根据没有年份的日期范围声明值

时间:2015-10-12 19:55:19

标签: excel ms-access ms-access-2010 excel-2010

我在Excel工作表中有大约10000条记录(虽然我可以更容易导入Access 2010),如果日期介于某些种植季节之间,我需要在单独的列中设置一个值。年份无关紧要。

因此,如果日期介于某个范围之间,则该栏填写适当的种植季节。

Spring = 3/16 - 5/15 
Summer 5/16-8/15 
Fall 8/15-10/31 
Everything else is Null

3/20/2015 and 4/16/2013 are both "Spring" in the seasons column
6/28/2011 and 8/1/2015 are both Summer, etc.

关于如何做到这一点的想法?正如我所说,我可以在Excel或Access中执行此操作,无论哪种方法都更容易。

3 个答案:

答案 0 :(得分:2)

您可以在Access查询中使用DateSerial Function。例如,您种植日期的春季可以表示为......

planting_date BETWEEN DateSerial(Year(planting_date), 3, 16) AND DateSerial(Year(planting_date), 5, 15)

您可以在Switch表达式中使用类似的模式来确定每个planting_date的种植季节......

SELECT
    y.planting_date,
    Switch
        (
            y.planting_date BETWEEN DateSerial(Year(y.planting_date), 3, 16) AND DateSerial(Year(y.planting_date), 5, 15), 'spring',
            y.planting_date BETWEEN DateSerial(Year(y.planting_date), 5, 16) AND DateSerial(Year(y.planting_date), 8, 15), 'summer',
            y.planting_date BETWEEN DateSerial(Year(y.planting_date), 8, 16) AND DateSerial(Year(y.planting_date), 10, 31), 'fall',
            True, Null
        ) AS season
FROM YourTable AS y;

如果您想将这些季节值存储在名为 planting_season 的字段中,请在Switch查询中使用UPDATE表达式...

UPDATE YourTable AS y
SET y.planting_season =
    Switch
        (
            y.planting_date BETWEEN DateSerial(Year(y.planting_date), 3, 16) AND DateSerial(Year(y.planting_date), 5, 15), 'spring',
            y.planting_date BETWEEN DateSerial(Year(y.planting_date), 5, 16) AND DateSerial(Year(y.planting_date), 8, 15), 'summer',
            y.planting_date BETWEEN DateSerial(Year(y.planting_date), 8, 16) AND DateSerial(Year(y.planting_date), 10, 31), 'fall',
            True, Null
        );

答案 1 :(得分:1)

此公式假设第一个日期在单元格A1中。在单元格B1中输入公式(或从第1行输入另一个空单元格):

=CHOOSE(MATCH(A1-DATE(YEAR(A1),1,0),{0;75;136;227;305},1),"","Spring","Summer","Fall","")

现在尽可能向下复制。

那就是它。

注意:这可以通过计算一年中的日期来计算,例如3月16日是一年中的第75天。一年中的一天'计算出一个简单的二进制匹配,对应于您的种植季节的天数数组。最后,CHOOSE函数用于将MATCH结果转换为季节名称。

要修改种植时间表,只需调整一年中的这几天即可。 array:{0; 75; 136; 227; 305}

注意:这是一个非常有效的自包含公式。不需要外部辅助列,也没有嵌套或其他的IF函数。

附录:这是一个变体,其中有一个处理闰年的条款:

=CHOOSE(MATCH(A1-DATE(YEAR(A1),1,0),{0;75;136;227;305}+(2=MONTH(DATE(YEAR(A1),2,29))),1),"","Spring","Summer","Fall","")

答案 2 :(得分:0)

提取月份和日期的一些帮助列很有用(假设值在A1:A1000处):

  

B1 = MONTH(A1)
  C1 = DAY(A1)
  D1 = DATE(2000, B1, C1)

我们故意"欺骗"关于更容易比较的一年。
在那之后,这里没什么特别的,只有很多嵌套的if

IF(AND(D1 >= DATE(2000, 3, 16), D1 <= DATE(2000, 5, 15)), "Spring",
   IF(AND(D1 >= DATE(2000, 5, 16), D1 <= DATE(2000, 8, 15)), "Summer",
   IF(AND(D1 >= DATE(2000, 8, 16), D1 <= DATE(2000, 10, 31)), "Fall", "Winter")))