我有一个带有用户数据以及当月出行时间的excel表:
User 01/01/2019 02/01/2019 03/01/2019 04/01/2019 05/01/2019
Joe A X X X
Jane A X
Bob A X X Z
A是连续旅行几天中第一个以Z结尾的地方。
在另一张纸上,我有一个摘要,我想知道在哪一天开始旅行的人。
即
Date Outbound Name
02/01/2019 Joe
如果我填写出站日期,我希望它在与该日期相对应的列中返回带有“ A”的人员姓名。
我无法终生使用索引,比赛或VLookup解决问题。 我对工作表的格式并不珍贵,这只是继承的内容。
任何指针都非常感谢!
答案 0 :(得分:1)
=INDEX(A:A,AGGREGATE(15,6,ROW($A$2:$A$4)/(INDEX($B$2:$F$4,0,MATCH($A$8,$B$1:$F$1,0))="A"),ROW(A1)))
具有功能15的聚集执行类似数组的操作。因此,请勿在数组函数内使用完整的列引用,否则您将得到大量多余的计算。
调整单元格引用以适合您的数据。根据需要向下复制以获得多个名称。为避免在找不到出发地点或您超出当天出发的姓名数量时出现错误消息,请将整个内容包装在IFERROR函数中,如下所示:
=IFERROR(=INDEX(A:A,AGGREGATE(15,6,ROW($A$2:$A$4)/(INDEX($B$2:$F$4,0,MATCH($A$8,$B$1:$F$1,0))="A"),ROW(A1))),"NOT FOUND")
如果您喜欢空白或自己的消息,请将“找不到”更改为“”。
答案 1 :(得分:0)
如果每个日期只有一个用户,则可以使用以下内容:
=INDIRECT(ADDRESS(MATCH("A",INDIRECT(SUBSTITUTE(ADDRESS(1,MATCH($H$3,A1:F1,0)),"$1","")&":"&SUBSTITUTE(ADDRESS(1,MATCH($H$3,A1:F1,0)),"$1","")),0),1))
可能是有一个较小的版本,但没想到这么快。 如果每个日期有更多用户,我认为您需要一个vba公式。
答案 2 :(得分:0)
B列中的公式:
=OFFSET(Sheet1!$A$1,MATCH("A",OFFSET(Sheet1!$A$1,0,MATCH(A1,Sheet1!$B$1:$F$1,),10,1),0)-1,0)
10是搜索的深度。
如果每个日期需要多个,则需要一个VBA宏。
答案 3 :(得分:0)
此宏将为给定日期查找多个名称。
Function GetNameofTraveler(CellIn)
SourceShtNm = "Sheet1" ' <---- Name of the shet that has the traveller data
DateRow = 1 ' <----- Chnage to match the row that has the travel dates
NameCol = 1 ' <----- Chnage to match the column that has the names
Set Datasheet = ActiveWorkbook.Sheets(SourceShtNm)
TargetDate = CellIn.Value
'* Get the range for the traveler data
LastCol = Datasheet.UsedRange.Columns.Count
LastRow = Datasheet.UsedRange.Rows.Count
NameList = ""
NumNames = 0
' Look for the date that matches
For i = 1 To LastCol
If Datasheet.Cells(DateRow, i).Value = TargetDate Then
' Look for names on rows that have an "A"
For j = 1 To LastRow
If UCase(Datasheet.Cells(j, i)) = "A" Then
NameList = NameList + Datasheet.Cells(j, NameCol) + vbLf
NumNames = NumNames + 1
End If
Next j
End If
Next i
If NumNames = 0 Then
NameList = " "
End If
GetNameofTraveler = Left(NameList, Len(NameList) - 1)
End Function
在单元格中使用
=GetNameofTraveler(A2)
其中A2为感兴趣日期。