Arrays 从另一个工作表返回特定值的Excel代码

Arrays 从另一个工作表返回特定值的Excel代码,arrays,excel,vba,Arrays,Excel,Vba,我有一个excel文件,列出了多个学生和他们参加的课程以及他们参加的时间。工作表设置为学生按行列出,课程按列列出,并注明日期。我在一张单独的工作表上创建了一个日历,以显示学生及其课程的快照视图。我正在努力研究如何将数据输入日历。基本上,逻辑是我需要搜索(或循环搜索)名为StatusArray的非相邻单元格数组,如果存在值,则我需要它返回学生ID和相关课程名称。更重要的是,有时每个学生都有多个课程,所以我需要确保它返回所有课程,每个课程都在一个新行上。状态列中都有公式,因为它们是根据输入的日期生成

我有一个excel文件,列出了多个学生和他们参加的课程以及他们参加的时间。工作表设置为学生按行列出,课程按列列出,并注明日期。我在一张单独的工作表上创建了一个日历,以显示学生及其课程的快照视图。我正在努力研究如何将数据输入日历。基本上,逻辑是我需要搜索(或循环搜索)名为StatusArray的非相邻单元格数组,如果存在值,则我需要它返回学生ID和相关课程名称。更重要的是,有时每个学生都有多个课程,所以我需要确保它返回所有课程,每个课程都在一个新行上。状态列中都有公式,因为它们是根据输入的日期生成的

例如: 工作表1列-学生ID、姓名、地址、课程状态、开始日期、结束日期、成绩、课程状态、开始日期、结束日期、成绩

我需要它通读课程状态列,并且(如果不是空的话)返回日历工作表J中状态列的状态标题和C列中的学生ID。如果它还返回姓名、地址、电话和评论,则会获得奖励


我完全不知道该怎么做

暴力方法:假设您有4个重复的“状态/开始/结束/等级”信息块。我知道4个课程模块是所有学生拥有的最多的模块,但有些学生的数据填充在3个或更少的模块中

首先,仅复制包含学生ID、姓名和地址的数据区域。将其粘贴到现有学生列表的正下方。重复此步骤,直到您总共有4组学生信息。第一套是您的原件,然后是下面的3份多余副本

接下来,剪切最右边(第四)块状态/等信息,并将其粘贴到学生的第一个重复部分旁边。确保将粘贴的状态列与第一个块的状态列对齐。再重复此练习两次,删除最右边的状态块等,并粘贴到多余学生信息的下一部分

您现在应该有一个只有7列数据的表:前三列是student ID、name和address,与之前相同。接下来的四列是课程状态、开始、结束和成绩。现在,您应该能够简单地过滤“状态”列中您正在寻找的内容


另外,我通常不推荐暴力,但在这种情况下,如果没有关于布局的更多细节,就不可能编写出更优雅的代码。假设您没有大量的数据可操作,并且假设您不需要经常这样做,那么这个解决方案应该是快速而简单的

您能否提供一些示例数据(表格或图像)和预期结果?还有,到目前为止你尝试了什么?我相信新的用户限制(许多问题似乎都集中在非规范化数据的处理上。我没有看到任何地方可以添加一个示例表来显示示例。最初,我列出了每个学生15次(课程数量)并使用VLOOKUP和MATCH来表示修了哪些课程,然后根据该列进行过滤以显示所有修过的课程。不幸的是,大约有2500名学生,所以我的文件大小现在已经失控。