使用duplciates对日期列表进行排序

时间:2015-12-18 12:36:23

标签: excel-formula

我有一个数据集如下:

  • A栏 - 姓名
  • B栏 - 日
  • C栏 - 月份

日期和月份组合可以出现两次,名称不同。

我希望原始数据集保持不变,然后最好使用公式,按时间顺序对此列表进行排序。

1 个答案:

答案 0 :(得分:1)

我假设只使用数据表并且排序不是一个选项?

如果你想使用公式,它将涉及一些虚拟列和一些数组公式。首先,您必须将月份转换为数字。假设您在D列中执行此操作。我还假设您的数据集在第1行中包含标题,因此数据将从第2行开始并在第20行结束(出于说明目的)。

接下来,在F列中将是您的第一个虚拟列。在F2中,您将1放在F3 = F2 + 1中并向下复制。所有这一切都是为你的专栏编号。

现在我们跳到J列几个月了。通过在K2中使用公式= SMALL( D$2:D$20; F2 )并向下复制,您可以获得按月排序的列表。

接下来,我们将在第J列中获取日期数字。您要做的是再次使用SMALL()函数,但现在使用列B的子集。首先,我们将计算每个列的出现次数。月。我们将在G栏中这样做,这将是我们的第二个帮助专栏。在G2中,您放置= IF( K2 = K1; G1 + 1; 1 ),然后复制。这将为您提供每月发生的次数。现在,我们可以将其用于J列中的公式,以获取排序的日期编号。这将是我们的第一个数组公式。 = SMALL( IF( D$2:D$20 = K2; B$2:B$20; "" ); G2 )。请务必使用CTRL+Shift+Enter确认,而不仅仅是Enter。这告诉Excel它是一个数组公式。该公式将使我们获得与K2中的月份匹配的天数子集中的第n天(来自G2)最小的一天。您可以通过选择所需范围并按CTRL+D来复制数组公式。

获取名称有点复杂,我们需要两个虚拟列和一个数组函数。我们的第一个虚拟列将对每个特定日期的出现次数进行编号。我们将在E列中执行此操作,方法是将公式= COUNTIFS( B$1:B2; B2; D$1:D2; D2 )放入E2中并复制下来。在H列中我们完全相同,但现在用于输出范围。在H2中,这变为= COUNTIFS( J$1:J2; J2; K$1:K2; K2 )。最后,为了获得实际名称,我们需要查找匹配3个条件的原始名称列表中的第一个值:

  • 指定月份
  • 指定日期
  • 此组合的第n次出现

同样,我们将在I2中使用数组公式:= INDEX( A$2:A$20; MATCH( 1; ( J2 = B$2:B$20 ) * ( K2 = D$2:D$20 ) * ( H2 = E$2:E$20 ); 0 ) )。使用CTRL+Shift+Enter确认并使用CTRL+D进行复制。

那应该是它。希望这能回答你的问题。为了使它更清晰一些,这里有一些Excel中的图片:

Dataset and dummy columns

Output columns

抱歉,图片未嵌入。 StackExchange不会让我这样做,因为我的代表还不够高......这也是我无法发表评论的原因,不得不立即将其作为答案发布,所以我希望它不是完全的重点。 ..