excel:日期在1周内的索引匹配?

时间:2016-04-22 14:02:52

标签: excel indexing

  const pos = <GeoJSON.Feature<GeoJSON.GeometryObject>>{
    "type": "Feature",
    "properties":{},
    "geometry": {
      "type": "Point",
      "coordinates": [0, 1]
    }
  };

然后在sheet2上,我想创建一周内发生的活动列表:

Sheet 2中:

type GeoGeom = GeoJSON.Feature<GeoJSON.GeometryObject>;
const pos: GeoGeom = {
    type: "Feature",
    properties: "foo",
    geometry: {
        type: "Point",
        coordinates: [0, 1]
    }
};

因为高尔夫球和网球都发生在四月二十二日和二十三日,并且距离今天都在一周之内,所以这些都应按日期降序显示。

要做到这一点,我知道我需要创建索引匹配并为我的日期设置参数,看看它们是否在7天内。但是我不能让下面的工作:

I have an excel spreadsheet with some rows of data on sheet1 like so:

Sheet1:

    ID       Subject          Date
    1        Tennis           23/04/2016
    2        Football         19/05/2016
    3        Golf             22/04/2016

请有人告诉我我哪里出错了吗?

提前致谢

3 个答案:

答案 0 :(得分:0)

您可以使用DATEDIF(即使它不在公式中):

IF((DATEDIF(TODAY(),C10,"D"))<7,"yes","no")

其中C10是您的日期字段。

答案 1 :(得分:0)

INDEX / MATCH只会返回第一场比赛。

您需要将INDEX与Aggregate函数结合使用以获得所需的顺序。

处理重复日期的最佳方法是在Sheet2上添加第二列日期。所以在Sheet 2上的B2中放了这个公式:

=IFERROR(AGGREGATE(15,6,Sheet1!$C$2:INDEX(Sheet1!$C:$C,MATCH(1E+99,Sheet1!$C:$C))/((Sheet1!$C$2:INDEX(Sheet1!$C:$C,MATCH(1E+99,Sheet1!$C:$C))<=TODAY()+7)*(Sheet1!$C$2:INDEX(Sheet1!$C:$C,MATCH(1E+99,Sheet1!$C:$C))>TODAY()-1)),ROW(1:1)),"")

然后我们使用以下公式在A2中引用B2:

=IF(B2<>"",INDEX(Sheet1!$B$2:INDEX(Sheet1!$B:$B,MATCH(1E+99,Sheet1!$C:$C)),AGGREGATE(15,6,(ROW(Sheet1!$B$2:INDEX(Sheet1!$B:$B,MATCH(1E+99,Sheet1!$C:$C)))-1)/(Sheet1!$C$2:INDEX(Sheet1!$C:$C,MATCH(1E+99,Sheet1!$C:$C))=B2),COUNTIF($B$2:$B2,B2))),"")

然后根据需要向下拖动以捕获所有想要的事件。

这是非CSE数组公式。数组公式计算是指数式的,因此我们需要将参考范围限制为所需的最小值。所有INDEX(Sheet1!$C:$C,MATCH(1E+99,Sheet1!$C:$C))找到包含数据的最后一个单元格,并将其设置为结束引用。

第一个IFERROR()包装器允许将公式复制下来,而不是列表将返回并避开#N/A。在图片中,公式占据前8行。

enter image description here

Sheet1供参考:

enter image description here

答案 2 :(得分:0)

如果您对VBA开放,这将有效:

'AMENDED with the assumption that the ID field is unique
Sub UpcomingAgenda()

Dim agendaRange As Range
Dim Dictionary As Object
Set Dictionary = CreateObject("Scripting.Dictionary")

For Each Item In Worksheets("sheet1").Range("C2:C6")
    If Item.Value >= Date And Item.Value < Date + 7 Then
        Dictionary.Add Item.Offset(0, -2).Value, Item.Offset(0, -1).Value
    End If
Next

With Worksheets("Sheet2")
    Range(.Range("A1"), .Range("A1").End(xlDown)) = ""
    Set agendaRange = .Range("A1").Resize(Dictionary.Count, 1)
    agendaRange = Application.Transpose(Dictionary.items)
End With

Set Dictionary = Nothing

End Sub

这是我的新代码,解决了上面的重复问题(没有排序)。我很抱歉!可能有更好的方法,但我还在学习自己。我希望它在某种程度上有所帮助。 : - )

Sub UpcomingAgenda()

Dim agendaRange As Range
Dim agenda() As String
Dim counter As Integer
Dim i As Integer

For Each Item In Worksheets("sheet1").Range("C2:C5")
    If Item.Value < Date + 7 Then
        counter = counter + 1
    End If
Next

i = 0
ReDim agenda(counter - 1)
For Each Item In Worksheets("sheet1").Range("C2:C5")
    If Item.Value < Date + 7 Then
        agenda(i) = Item.Offset(0, -1).Value
        i = i + 1
    End If
Next

With Worksheets("Sheet2")
    Range(.Range("A1"), .Range("A1").End(xlDown)) = ""
    Set agendaRange = .Range("A1").Resize(counter, 1)
    agendaRange = Application.Transpose(agenda)
End With

End Sub