简体   繁体   English

Excel-在正确的工作时间单元中安排人员

[英]Excel - Scheduling persons in the correct cell of working hours

I'm head of a group of students organising events. 我是一群组织活动的学生的负责人。 In the picture you see 3 tables: 在图片中您看到3个表格:

  • First the event with the persons and their hours they will do their job on the event 首先,与人员及其工作时间一起进行活动
  • Secondly the amount of persons I have for that specific hour interval. 其次,在该特定小时间隔内,我的人数。
  • And thirdly (what my question is about), I would like to see in a way that the people that I selected to work from 16-18 will show in one string (Person 1, Person 3) in the cell I2 第三,(我的问题是什么),我想以某种方式看到我选择的16-18岁工作的人将在I2单元格中显示为一个字符串(人1,人3)

I can't figure out in which order I would be using the formulas of Excel to execute this. 我不知道我将使用Excel的公式执行该顺序。

Thanks in advance 提前致谢

Image 图片

If you have a subscritption to Office 365 Excel then something like this array formula: 如果您订阅了Office 365 Excel,则类似于此数组公式:

=TEXTJOIN(",",TRUE,IF($B2:$D2=I1,$B$1:$D$1,""))

Being an array formula it needs to be confirmed with Ctrl-Shift-Enter instead of Enter when exiting edit mode. 作为数组公式,退出编辑模式时,需要使用Ctrl-Shift-Enter而不是Enter进行确认。 If done correctly then Excel will put {} around the formula. 如果操作正确,则Excel会将{}放在公式周围。


IF you do not have a subscription to Office 365 Excel 如果您没有订阅Office 365 Excel

Then put this code in a module attached to the workbook and use the formula as described above: 然后将此代码放在工作簿附带的模块中,并使用上述公式:

Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
    Dim d As Long
    Dim c As Long
    Dim arr2()
    Dim t As Long, y As Long
    t = -1
    y = -1
    If TypeName(arr) = "Range" Then
        arr2 = arr.Value
    Else
        arr2 = arr
    End If
    On Error Resume Next
    t = UBound(arr2, 2)
    y = UBound(arr2, 1)
    On Error GoTo 0

    If t >= 0 And y >= 0 Then
        For c = LBound(arr2, 1) To UBound(arr2, 1)
            For d = LBound(arr2, 1) To UBound(arr2, 2)
                If arr2(c, d) <> "" Or Not skipblank Then
                    TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
                End If
            Next d
        Next c
    Else
        For c = LBound(arr2) To UBound(arr2)
            If arr2(c) <> "" Or Not skipblank Then
                TEXTJOIN = TEXTJOIN & arr2(c) & delim
            End If
        Next c
    End If
    TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
End Function

Linked IF(): 链接的IF():

=LEFT(IF($B2=I1,$B$1 & ",","") & IF($C2=I1,$C$1 & ",","") & IF($D2=I1,$D$1 & ",",""),LEN(IF($B2=I1,$B$1 & ",","") & IF($C2=I1,$C$1 & ",","") & IF($D2=I1,$D$1 & ",",""))-1)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM