Excel - 根据活动表的名称将多个单元格的内容复制到多个工作表

时间:2014-09-23 12:39:32

标签: excel vba

在Sheet1中,除其他外,还有学生ID及其成绩水平的学生列表。在工作簿中,每个学生还有一个单独的工作表。工作表根据学生ID命名。我需要将每个学生的成绩水平复制到他们的特定工作表。这必须为所有学生完成。

例如,AA栏包含学生ID,AB栏包含每个学生的成绩水平。我需要将学生12345,4年级复制到工作表12345 Cell F1。然后我需要转到下一个学生并做同样的事情,直到我没有更多的学生。

我尝试了很多方法,但我一直陷入困境。我发现了很接近的例子,但总是错过一个让它起作用的关键因素,所以我希望有人能够让我开始。我觉得应该很容易,但事实证明并非如此。

修改

我正在试图逐步解决这个问题。在一个简单的测试文件中我试过:

Dim I As Long 
For I = 1 To Sheets.Count
Worksheets(I).Activate 
Workbooks("StuData.xlsm").Sheets(I).Range("F1").Value = Workbooks("StuData.xlsm").Sheets("Sheet1").Cells(I, 2)
Next

然后我尝试了:

Dim Sheetname as String 
Sub activateSheet(sheetname As String) 
    Worksheets(sheetname).Activate
End Sub 

2 个答案:

答案 0 :(得分:1)

您不需要VBA来执行此操作。

首先在作为工作簿作用域的Ctrl+F3字段中,使用New创建以下命名公式(SheetName - > Name:)。在Refers to:中输入以下完全如下所示,然后点击OK

=RIGHT(CELL("FILENAME",!$A$1),LEN(CELL("FILENAME",!$A$1))-FIND("]",CELL("FILENAME",!$A$1),1))

请务必在每个单元格地址的开头添加额外的!!很重要。快速解释:虽然它是作用于整个工作簿的,但是单元格地址开头的!使得命名公式中的每个单元格地址都在当前工作表的上下文中进行评估。它相当于为每个工作表设置不同的Sheetname变量(作用于每个工作表)。

现在选择第一张学生表。按Ctrl+Shift+PgDn并重复,或只需按住Ctrl并单击每个学生单,直到选中所有学生表。您现在正在同时编辑所有学生表。

在其中一张学生表的单元格F1中(无关紧要),输入以下内容:

=INDEX('ALL STUDENTS SHEET'!$AB:$AB,MATCH(VALUE(SheetName),'ALL STUDENTS SHEET'!$AA:$AA,0))

(当然,您需要将ALL STUDENTS SHEET替换为第一张表的名称。)

最后,通过选择第一张纸张取消选择多张纸张,这样您就可以继续工作而无需同时编辑所有纸张。

编辑:请注意,为了使SheetName按预期工作,工作簿必须已保存到磁盘(即,在CELL("FILENAME",<Cell Address>)公式保存之前,它不会在新工作簿上工作需要一个文件名)。

答案 1 :(得分:1)

虽然我同意在没有VBA的情况下可以做到你想要的,但你仍然可以尝试这个:

Sub TransferGrades()
    Dim RID As Range, SID As Range, lrow As Long
    With Sheets("Sheet1") '~~> change to suit
        lrow = .Range("AA" & .Rows.Count).End(xlUp).Row
        Set RID = .Range("AA1", "AA" & lrow) '~~> change to suit
    End With
    For Each SID In RID
        On Error Resume Next
        '~~> You need to use CStr Function if ID's are numbers
        Sheets(CStr(SID.Value)).Range("F1").Value = SID.Offset(0, 1).Value
        If Err.Number <> 0 Then SID.AddComment "Not found,you need to add sheet." _
        Else SID.ClearComments
        On Error GoTo 0
    Next
End Sub

这会将成绩转移到仅找到的学生ID表 如果找不到学生证表,则会忽略该表并继续下一个身份证 它会在没有相应工作表的学生ID上添加评论。 HTH。