我在单个单元格中有以下日期:
2020 年 6 月 29 日 2020 年 6 月 7 日 2020 年 6 月 6 日 2020 年 8 月 6 日
如何将所有内容放在同一个单元格中,如下所示:“06,07,29/06/2020;06/08/2020;”?
答案1
这应该可以帮助你入门:
=TEXTJOIN("; ",TRUE,TEXT(SORT(A1:A4),"dd/mm/yyyy"))
经过一些尝试后,你可以通过这个获得完整的效果(首先一步一步展示,然后使用一个公式)。
首先确保按升序对日期进行排序(这比使用 SORT 函数更简单)。然后我们需要确保能够区分月份的最后一天和该月份的任何其他日期。
因此,在单元格 B1 中,我们可以通过以下方法获取每个日期的天数,并进行排序:
=TEXT(A1:A4,"dd")
然后在单元格 C1 中,获取 mm/yyyy 后缀,但仅限于下一个日期在不同月份的日期:
=IF(MONTH(OFFSET(A1:A4,1,0))=MONTH(A1:A4),"",TEXT(A1:A4,"mm/yyyy"))
D1中的公式:
=B1#&IF(C1#<>"","/","")&C1#
因此,我们说“连接 B 列和 C 列,但如果 C 中有值,则用“”将它们分隔开/
”。
然后我一开始展示的公式可以修改为TEXTJOIN
D列的值:
=TEXTJOIN(IF(LEN(D1#)=2,", ","; "),TRUE,D1#)
如果你想把这一切放在一个很长的公式里,它看起来是这样的:
=TEXTJOIN(IF(LEN(TEXT($A$1:$A$4,"dd")&IF(IF(MONTH(OFFSET($A$1:$A$4,1,0))=MONTH($A$1:$A$4),"",TEXT($A$1:$A$4,"mm/yyyy"))<>"","/","")&IF(MONTH(OFFSET($A$1:$A$4,1,0))=MONTH($A$1:$A$4),"",TEXT($A$1:$A$4,"mm/yyyy")))=2,", ","; "),TRUE,TEXT($A$1:$A$4,"dd")&IF(IF(MONTH(OFFSET($A$1:$A$4,1,0))=MONTH($A$1:$A$4),"",TEXT($A$1:$A$4,"mm/yyyy"))<>"","/","")&IF(MONTH(OFFSET($A$1:$A$4,1,0))=MONTH($A$1:$A$4),"",TEXT($A$1:$A$4,"mm/yyyy")))
所有这些都证明该LET
功能还不够快实现。
答案2
您可以尝试自定义 UDF,这个可以工作,但您需要正确排序日期。如果有问题,我明天会再看一遍,让它自行排序。
Function DoMonth(target As Range) As String
On Error GoTo MyErr
Dim x As Long, i As Long
Dim MyString As String
Dim c As Range
For i = 12 To 1 Step -1
x = 0
For Each c In target
If c.Value = Empty Then GoTo MyNxt
If Not IsDate(c) Then GoTo MyNxt
If Month(c) = i Then
If x = 0 Then
MyString = "/" & Month(c) & "/" & Year(c) & "; " & MyString
x = 1
End If
If x = 1 Then
MyString = Day(c) & MyString
x = 2
Else
MyString = Day(c) & ", " & MyString
End If
End If
MyNxt:
Next c
Next i
DoMonth = MyString
Exit Function
MyErr:
DoMonth = "Error Number - " & Err.Number
End Function
按 ALT-F11 打开窗口,然后插入模块,将函数放置在开发人员窗口中的模块中。
粘贴后使用:
=DoMonth(range)