我在excel的父表中有数据,我需要填充子表。
Parent Sheet P
Name Gender Grades Frequency
John Male A 3
John Male B 1
John Male C 2
Jay Male B 6
Sarah Female B 5
Sarah Female C 1
Maria Female A 4
Maria Female D 2
很明显,所有学生都不会拥有所有类型的成绩。对于E.g,玛丽亚有两个D级,其他学生没有。
Child sheet (Male) M
Name Grade A Grade B Grade C Grade D
John 3 1 2 0
Jay 0 6 0 0
Child sheet (Female) F
Name Grade A Grade B Grade C Grade D
Sarah 0 5 1 0
Maria 4 0 0 2
这就是我想要的。我已经制作了带有标题和唯一名称以及性别的表格,因此只需要填写成绩频率数据。我想用SQL来做。我有两件事要写。
'For Male Sheet
rs.open "SELECT [P$].Frequency FROM [P$] WHERE Name like (SELECT [M$].NAME FROM [M$])
M.Cells(3,1).CopyFromRecordset rs
这会完成这项工作吗?如果是约翰或格拉德A,那么记录集会将D级值返回0,对于周杰伦,C级,D级值是0吗?请指教。谢谢。
答案 0 :(得分:2)
使用数据透视表的示例。我认为SQL在这里有点过分,因为Excel内置了功能。
答案 1 :(得分:1)
考虑使用关系数据库而不是flatfile电子表格来查询可能的100万个条目。除非使用VBA或加载项调用,否则Excel自然不具有SQL查询功能。
如果使用PC,使用MS Access(Excel的Office同级),您可以轻松运行交叉表查询,该查询基本上聚合并转动您的记录集:
TRANSFORM Sum(ParentSheet.Frequency) AS SumOfFrequency
SELECT ParentSheet.[Name]
FROM ParentSheet
GROUP BY ParentSheet.[Name]
PIVOT 'Grade ' & ParentSheet.Grades;
并添加一个where子句以按性别划分:
<强> MALE 强>
TRANSFORM Sum(ParentSheet.Frequency) AS SumOfFrequency
SELECT ParentSheet.[Name]
FROM ParentSheet
WHERE ParentSheet.Gender = 'Male'
GROUP BY ParentSheet.[Name]
PIVOT 'Grade ' & ParentSheet.Grades;
<强> FEMALE 强>
TRANSFORM Sum(ParentSheet.Frequency) AS SumOfFrequency
SELECT ParentSheet.[Name]
FROM ParentSheet
WHERE ParentSheet.Gender = 'Female'
GROUP BY ParentSheet.[Name]
PIVOT 'Grade ' & ParentSheet.Grades;
如上所示,只需将父工作表导入名为ParentSheet的数据库表即可。您甚至可以将特定于性别的查询导出到子表格中,如csv,txt,xml或重新导入xlsx。