Excel 2010 - 将筛选结果复制到新工作表

时间:2017-03-08 19:08:43

标签: excel excel-vba excel-formula excel-2010 vba

我正在努力与M $ Excel一起努力创建一个公式来将结果复制到另一张表格。我想我可能需要VBA吧。

我有三张纸。一个名为学生,一个名为,另一个名为时间表

学生列A是" 名称"和B列是一个下拉列表" Day "本周休假作为选择。

我尝试创建一个查看B列并确定选择了哪一天的公式然后将学生名称从A列(名称)复制到表格时间表< / strong> A栏;第1,2,3等等。

这可能吗?

我已经在时间表

中找到了这个
=IF(SUM(COUNTIF(Pupils!$G$2:$G$663,Days!$C$2)),"true","false")

但这仅检查结果是否为真,它们是什么。

我的ramblings有意义吗?

Thanx寻找。

萨姆

3 个答案:

答案 0 :(得分:0)

在时间表工作表中未使用的单元格中,输入此公式

=IFERROR(INDEX(Pupils!A:A, AGGREGATE(15, 6, ROW(A$1:A$99)/(Pupils!B$1:B$99=Days!$C$2), ROW(1:1))), TEXT(,))

填写。如果第99行下面的学生工作表中列出了学生,请调整$99部分。

答案 1 :(得分:0)

如果您打算使用VBA,一种简单的方法就是将所有内容复制完毕,然后在工作表上进行评估(&#34;时间表&#34;)。

Dim i as integer
Dim LR as Long

LR = Sheets("Pupils).Cells(Rows.Count, "A").End(xlUp).Row

Sheets("Pupils").Range("A1:B"&LR).Copy Sheets("Timetable").Range("A1:B"&LR)

For i = LR to 2 Step -1
    If Sheets("Timetable").Cells(i,2).Value=Sheets(Pupils).Cells(2,2).Value Then
    Else: Sheets("Timetable").Rows(i).Delete
    End If
Next i    

我走了使用if语句的路线,如果你在B列中的那一天与Pupils标签单元格B2匹配,那么没有任何反应,但是如果它不匹配,它会删除该行。请注意,For循环有一个负步骤,因为在开始删除之前定义了最后一行,所以你想从底部到顶部向后移动。

编辑:

如果你想在Sheets上创建一个单元格(&#34;时间表&#34;)说出日期,你可以改变If语句来反映那个单元格,例如

=Sheets("Timetable").Cells(1,3) 'if you have the drop-down table in C1

如果你真的想深入研究,你也可以制作一个Userform来选择星期几。您可以将输入保存为变量,并比较类似于:

Dim DayInput as String

DayInput=CheckBox1.Value

If Sheets("Timetable").Cells(i,2).Value=DayInput Then

答案 2 :(得分:0)

希望我能附上一份文件。我参加了Jeeped建议的配方。

在时间表中我设置了7列:太阳,周一,周二,周三,周四,周五,周六

在时间表单元格A2:= IF(学生!$ B $ 2:$ B $ 99 =天!$ A $ 1,学生!$ A2,&#34;&#34;)

在时间表单元格B2:= IF(学生!$ B $ 2:$ B $ 99 =天!$ A $ 2,学生!$ A2,&#34;&#34;)

...继续查看所有7列,请注意编辑Days单元格引用

...然后将所有7列向下拉成与瞳孔一样多的行

在时间表单元格A3中:= IF(学生!$ B $ 2:$ B $ 99 =天!$ A $ 1,学生!$ A3,&#34;&#34;)

在时间表单元格A4:= IF(学生!$ B $ 2:$ B $ 99 =天!$ A $ 1,学生!$ A4,&#34;&#34;)

...

希望这是你想要的时间表&#39;。