excel在多列或者多行查找同一数据,然后匹配另一列数据

如图所示,同事根据日期统计了每天学生上课情况,同一节课有不同人数的学生,登记的时候学生名字顺序也不一样,所以导致E-K列都有可能出现同一个学生的名字,现在我想根据学生的名字,统计他的上课日期,该用什么函数呢?请教各位大神,非常感谢!

你可以用VBA不

看的不清楚,代码给你,复制粘贴就行。

GIF是生成的过程,图片是结果。把宏启动,就能用了


Range("p2:y9999").ClearContents

q2 = Application.WorksheetFunction.CountA(Range("p" & w1 & ":y" & w1)) + 16

以上两串代码包含Y列,如果数据超过Y列,就把这两个代码里面的Y加大,改成多少就看你自己了。

Sub 取数()

Dim q1%, q2%, q3%, q4%

Dim w1%, w2%, w3%, w4%


Range("p2:y9999").ClearContents

q1 = Application.WorksheetFunction.CountA(Range("o2:o9999")) + 1


For w1 = 2 To q1

    

    q3 = Application.WorksheetFunction.CountA(Range("a2:a9999")) + 1

    

    For w2 = 2 To q3

        

        For w3 = 5 To 11

            q2 = Application.WorksheetFunction.CountA(Range("p" & w1 & ":y" & w1)) + 16

            If Cells(w1, 15) = "" Then

            ElseIf Cells(w2, w3) = Cells(w1, 15) Then

            Cells(w1, q2) = Cells(w2, 2)

            End If

            

        Next

    

    Next


Next


End Sub


Sub 清除()

Range("p2:y9999").ClearContents

End Sub

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-14
你这样的一个数据结构,加上不知所以然的提问,估计很难操作啊!……
比如:B3、B4、B10都是7月1日同一个人,怎么统计和显示???
难道就是显示3个7月1日???
所以, 你还是想一下最终需要做什么,结果显示是怎么一个形式,做几个数据实例样子……
因此,你的问题最主要的还是优化数据结构的问题,数据结构到位了核算就很简单了……追问

嗯嗯,是我没有说的很清楚,实际上就是需要统计学生当月总共上了几次课,然后显示具体的上课日期,一个学生一天内上了几次课,就显示几个日期

追答

在P2单元格输入公式:
=SUMPRODUCT(($D$2:$D$222)*($E$2:$K$222=O2)*(MONTH($B$2:$B$222)=7))
复制并下拉,即是每个学生7月份上课的小时数。
在Q2单元格输入公式:
=SUMPRODUCT(($E$2:$K$222=O2)*(MONTH($B$2:$B$222)=7))
复制并下拉,即是每个学生7月份上课的次数。
至于哪几个日期在上课,左边已经有明细的数据,何必还要再做一个呢?

第2个回答  2019-08-14
P2输入:
=IFERROR(INDEX($B:$B,SMALL(IF($E$2:$K$1000=$O2,ROW($E$2:$K$1000)),COLUMN(A1))),"")
ctrl+shift+回车,右拉、下拉追问

您好,这个公式右拉可以,下拉怎么不行呢?请教!!!!感恩

第3个回答  2019-08-14
如果日期只有一个月
=IFERROR(INDIRECT("B"&SUMPRODUCT(1/LARGE(($E$2:$E$999=$O2)/ROW($2:$999),COLUMN(A1)))),"")
第4个回答  2019-08-14
把表二的列标题日期换成具体的日期,然后用COUNTIFS可能统计出来具体的上课日期及节数。
相似回答