如果有多个条目,我需要在excel中找到每天的最后一条记录
*******意图是获得EOD余额每个日期的行数********
就像我在excel中有这样的数据
date CR_DR amount EOD balance
----------------------
7/9/2017 19:09 CR 10 10
7/10/2017 18:37 CR 25 35
7/10/2017 21:06 DR 10 25
7/11/2017 19:21 CR 15 40
7/15/2017 14:17 DR 20 20
7/17/2017 17:12 CR 100 120
7/18/2017 7:44 DR 30 90
7/18/2017 14:08 DR 50 40
7/18/2017 16:52 CR 120 160
我需要获取数据(获取每天的最后一行)
7/9/2017 19:09 CR 10 10
7/10/2017 21:06 DR 10 25
7/11/2017 19:21 CR 15 40
7/15/2017 14:17 DR 20 20
7/17/2017 17:12 CR 100 120
7/18/2017 16:52 CR 120 160
答案 0 :(得分:1)
在Cell F2
=IFERROR(MAX(IF(INT($A$2:$A$10)=INT(INDEX($A$2:$A$10, MATCH(0, FREQUENCY(IF(EXACT(INT($A$2:$A$10), TRANSPOSE(INT($F$1:F1))), MATCH(ROW($A$2:$A$10), ROW($A$2:$A$10)), ""), MATCH(ROW($A$2:$A$10), ROW($A$2:$A$10))), 0))),$A$2:$A$10,0)),"")
这是一个数组公式,所以按 Ctrl + Shift + Enter 提交它。根据需要拖动/复制。
然后在Cell G2
输入
=VLOOKUP($F2,$A$2:$D$10,COLUMN(C1)-COLUMN($A$1),FALSE)
将此公式拖到({右)直到Cell I2
并根据需要向下拖动。
参见图片以供参考。
这里我们将使用辅助列,而不是使用丑陋的长公式。
在Cell F2
中输入以下公式
=MAX(IF(INT($A$2:$A$10)=INT(A2),$A$2:$A$10,0))
这是一个数组公式,所以按 Ctrl + Shift + Enter 提交它。根据需要拖动/复制。
然后在Cell G2
输入
=IFERROR(INDEX($F$2:$F$10,MATCH(0,INDEX(COUNTIF($G$1:G1,$F$2:$F$10),0,0),0)),"")
根据需要拖动/复制。
最后,在Cell H2
输入
=VLOOKUP($G2,$A$2:$D$10,COLUMN(C1)-COLUMN($A$1),FALSE)
将此公式拖到({右)直到Cell J2
并根据需要向下拖动。
参见图片以供参考。
编辑: 根据评论。
而不是
=VLOOKUP($G2,$A$2:$D$10,COLUMN(C1)-COLUMN($A$1),FALSE)
在Cell H2
=INDEX(B$2:B$10,MAX(IF($A$2:$A$10=$G2,ROW($A$2:$A$10)-ROW(INDEX($A$2:$A$10,1,1))+1)))
这是一个数组公式,所以按 Ctrl + Shift + Enter 提交它。将此公式拖动到({右)直到Cell J2
并根据需要向下拖动。根据需要拖动/复制。
屏幕截图:
答案 1 :(得分:0)
好的,这很粗糙,我确定有适当的"这样做的方法,但它适用于你想做的事情。我使用A列到D列的数据。在F列中,我使用公式=左(A3,5)并将其复制下来。您必须根据自己的情况进行修改。希望这会有所帮助或让你朝着正确的方向前进。祝你好运
Sub FindLast()
'FIND LAST LISTED DATE AND COPY
Dim myCount, myCount2, myRange, myRow, x, y, r
r = 3
myCount = Sheets("Sheet1").UsedRange.Rows.Count - 2
MsgBox "Rows used are " & myCount
For x = 3 To myCount Step 1
y = Range("F" & x).Value
MsgBox "Value of x is " & x
MsgBox "Value of y is " & y
myCount2 = WorksheetFunction.CountIf(Range("F3:F" & myCount + 2), y)
MsgBox "myCount2 value is " & myCount2
Max_date = Application.WorksheetFunction.Max(Range("A" & x & ":" & "A" & x + myCount2 - 1))
myRow = Range("A" & x + myCount2 - 1).Row
MsgBox "myRow number is: " & myRow
MsgBox CDate(Max_date)
Sheets("Sheet1").Range("I" & r).Value = Max_date
Sheets("Sheet1").Range("J" & r).Value = Range("B" & myRow).Value
Sheets("Sheet1").Range("K" & r).Value = Range("C" & myRow).Value
Sheets("Sheet1").Range("L" & r).Value = Range("D" & myRow).Value
r = r + 1
If myCount2 <> 1 Then
x = x + (myCount2 - 1)
Else
x = x
End If
Next x
End Sub
您会注意到有很多消息框。我用这些来测试参数并确保它们像我想要的那样出来。当你对它的工作方式感到满意时,只需将它们评论出来。
此外,对于您发布的示例,输出设置为I3到L8。如果您的真实工作表在这些区域中有任何数据,请务必编辑这些内容。我的建议是先测试一下,以便熟悉发生的事情。我没有把任何&#34; failafes&#34;或&#34;退出&#34;因为我没时间了。这个网站上有很多例子来帮助解决这个问题。
此致
答案 2 :(得分:0)
它需要输入A列中的日期(我没有足够的动力来弄清楚如何拉出独特的那些),但是如果你感觉很笨,你可以使用一些数组公式。 : - )
Column A Column B C D E
7/9/2017 7/9/2017 19:09 CR 10 10
7/10/2017 7/10/2017 21:06 DR 10 25
7/11/2017 7/11/2017 19:21 CR 15 40
7/15/2017 7/15/2017 14:17 DR 20 20
7/17/2017 7/17/2017 17:12 CR 100 120
7/18/2017 7/18/2017 16:52 CR 120 160
在A栏输入日期。然后在B栏输入:
=IFERROR(INDEX(Date,SMALL(IF(ROUNDDOWN(Date,0)=$A1,ROW(Date)-1),COUNTIFS(Date,">="&$A1,Date,"<"&$A1+1))),"")
使用CTRL-SHIFT-ENTER关闭单元格,以便公式栏中的公式看起来像
{=IFERROR(INDEX(Date,SMALL(IF(ROUNDDOWN(Date,0)=$A1,ROW(Date)-1),COUNTIFS(Date,">="&$A1,Date,"<"&$A1+1))),"")}
注意:自己输入花括号不起作用。 ;-)你必须用CTRL-SHIFT-ENTER关闭单元格。
公式中的Date
是命名范围 - 我不喜欢一直输入$A$2:$A$10
。如果您不想使用命名范围,请将Date
替换为$A$2:$A$10
或您的适用范围。
C栏:
=IFERROR(INDEX(CR_DR,SMALL(IF(ROUNDDOWN(Date,0)=$A1,ROW(Date)-1),COUNTIFS(Date,">="&$A1,Date,"<"&$A1+1))),"")
同样的事情 - 用CTRL-SHIFT-ENTER关闭单元格。为CR_DR
再次命名范围,与上面的Date
规则相同。复制/粘贴其他列,更改INDEX
正在搜索所需列的范围。
说明:ROUNDDOWN
删除源数据中日期的时间,以便它可以将其与A列中的日期匹配。如果日期匹配,则其行(-1,因为A2的行号是2,但它是$A$2:$a$10
)中的第一项被放入SMALL
函数的数组中。这将选择由COUNTIFS
函数定义的数组中的第n个最小项,该项计算在A列中的日期与A列中日期之后的日期之间的日期数(从而实际为您提供最大项目) 。然后INDEX
使用该范围并查找SMALL
传递给它的行号。如果错误,则单元格为空白。
如果您不想手动输入特定日期,请自动填写所有日期,并且在没有任何日期的情况下它将只是空白:
7/9/2017 7/9/2017 19:09 CR 10 10
7/10/2017 7/10/2017 21:06 DR 10 25
7/11/2017 7/11/2017 19:21 CR 15 40
7/12/2017
7/13/2017
7/14/2017
7/15/2017 7/15/2017 14:17 DR 20 20
7/16/2017
7/17/2017 7/17/2017 17:12 CR 100 120
7/18/2017 7/18/2017 16:52 CR 120 160