同一单元格中有多个日期

同一单元格中有多个日期

我在单个单元格中有以下日期:

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 中有值,则用“”将它们分隔开/”。

然后我一开始展示的公式可以修改为TEXTJOIND列的值:

=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功能还不够快实现。

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)

例如: 在此处输入图片描述

相关内容