在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
答案 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。