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
请有人告诉我我哪里出错了吗?
提前致谢
答案 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行。
Sheet1供参考:
答案 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