Excel – find一个值并复制到不同的工作表中

我需要一些帮助,我正在努力为一本商标书做一个公式。 我有一本工作手册,上面有一张标有“硕士”的表格,其中包含A2列的学生唯一参考号,B2 / C2以及他们在D2,E2,F2和G2列中学习的四门科目。 然后,我也为每个单独的主题单独的表。

我想查一下母表上的科目(在四列中),如果“math”是一个学生需要在这些列中的一个,我想相应的学生名称和该行的引用被复制并粘贴到“math”表中,以便可以input关于该科目/学生和class级的进一步信息。

我已经尝试过使用IF和MATCH公式,但是它似乎变得相当复杂,因为我有超过400名学生,每个学生有四个科目,科目可以出现在四个科目列中的任何一个。

有什么build议么?

TIA!

有两种可能的解决scheme,最简单的是:

在math表格中插入:

[单元格B2 ]

=IF(Sheet1!D2="Math";Sheet1!B2;IF(Sheet1!E2="Math";Sheet1!B2;IF(Sheet1!F2="Math";Sheet1!B2;IF(Sheet1!G2="Math";Sheet1!B2;"")))) 

[单元格C2 ]

 =IF(Sheet1!D2="Math";Sheet1!C2;IF(Sheet1!E2="Math";Sheet1!C2;IF(Sheet1!F2="Math";Sheet1!C2;IF(Sheet1!G2="Math";Sheet1!B2;"")))) 

并把它们拖下来通过文件…


这是我做的一个样本testing:

学生表:

 ------------- 1001 Toni Almeida Math Portuguese Programming Another 1002 David P Portuguese French Programming Another 1003 Neil C Math Portuguese Programming Another 1004 James H Portuguese French Programming Another ------------- 

结果(math表):

 ------------- 1001 Toni Almeida 1002 1003 Neil C 1004 ------------- 

您也可以创build一个查询:

注意:这至less在Google电子表格中是有效的 ,我没有MS Office在Excel中testing。

 =query(B2:G5;"select B,C where D='Math'OR E='Math' OR F='Math' OR G='Math'";1) 

结果:

 ------------- 1001 Toni Almeida 1003 Neil C ------------- 

最简单的解决scheme是过滤D2,E2,F2,G2列,然后将结果复制/粘贴到不同的工作表。 如果你想自动完成这个,你需要编写一个macros。 问候,

编辑:将你的数据移动到名为“Main”和alt + F11的表单中,打开Visual Basic编辑器,插入>模块,select模块并粘贴下面的代码并保存。 alt + F8打开macros并运行ProcessListmacros,它会自动创build你的工作表。

 Sub ProcessList() Dim course As String Dim studentID As String Dim studentName As String Dim studentSurname As String Application.DisplayAlerts = False For Each w In Worksheets If Not w.Name = "Main" Then w.Delete End If Next Application.DisplayAlerts = True i = 0 While Not Worksheets("Main").Cells(2 + i, 1) = "" i = i + 1 Wend studentcount = i For i = 0 To studentcount - 1 studentID = Worksheets("Main").Cells(2 + i, 1).Value studentName = Worksheets("Main").Cells(2 + i, 2).Value studentSurname = Worksheets("Main").Cells(2 + i, 3).Value For j = 0 To 3 course = Worksheets("Main").Cells(2 + i, 4 + j).Value If Not course = "" Then Call checkcourse(course) Call insertStudentData(course, studentID, studentName, studentSurname) End If Next j Next i End Sub Sub checkcourse(course) found = False For Each w In Worksheets If w.Name = course Then found = True End If Next If found = False Then Worksheets.Add().Name = course End If End Sub Sub insertStudentData(wsName As String, studentID, studentName, studentSurname) i = 0 While Not Worksheets(wsName).Cells(2 + i, 1) = "" i = i + 1 Wend Worksheets(wsName).Cells(2 + i, 1).Value2 = studentID Worksheets(wsName).Cells(2 + i, 2).Value2 = studentName Worksheets(wsName).Cells(2 + i, 3).Value2 = studentSurname End Sub