답변1
암호:
Function MakeCompact(times As Range, shedules As Range, letter As String) As String
Dim i As Integer, n As Integer
If times.Cells.Count <> shedules.Cells.Count + 1 Then
MakeCompact = "Error. Wrong source data."
Exit Function
End If
n = times.Cells.Count
MakeCompact = ""
For i = 1 To n
If letter = shedules.Cells(1, i).Value Then
If Right(MakeCompact, 1) <> "-" Then
MakeCompact = MakeCompact & "," & times.Cells(1, i).Value & "-"
End If
Else
If Right(MakeCompact, 1) = "-" Then
MakeCompact = MakeCompact & times.Cells(1, i).Value
End If
End If
Next
MakeCompact = Mid(MakeCompact, 2)
End Function
용법:
테이블을 생성합니다:
A B C D E F G
1 name 1 2 3 4 5 6
2 bob m m b m m
3 fred b m e e
4
5 m b e
6 bob
7 fred
A1:G7 범위는 소스 데이터입니다(행 1은 헤더임).
A5:D7 범위는 우리가 채우려는 테이블입니다.
B6에 다음 수식을 삽입합니다.
=MakeCompact($B$1:$G$1;$B2:$F2;B$5)
가로 및 세로로 드래그하여 셀을 채웁니다.
나는 이 아이디어가 귀하의 작업 솔루션을 만들기에 충분하다고 생각합니다.
추신. 주의하세요. 일정 시간 동안 추가 열이 있습니다.
조달청. 디버깅 후 함수를 Volatile로 만듭니다.