![用户输入以选择并填写单元格的值](https://linux22.com/image/1423232/%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5%E4%BB%A5%E9%80%89%E6%8B%A9%E5%B9%B6%E5%A1%AB%E5%86%99%E5%8D%95%E5%85%83%E6%A0%BC%E7%9A%84%E5%80%BC.png)
我有这个 excel 表:A2 到 A11 是班级名称 Class_1、Class_2、...、Class_10。B1 到 K1 是学生姓名 1、2、3、...、10
对于班上的每个学生,我需要填写他的成绩
我想要一个 VBA 输入框或用户表单,这样我只需要回答输入框或用户表单中的问题来填写成绩。
我会想象输入框或用户窗体是这样的: Class: Class_1 '相当于单元格的行,在本例中为第 2 行 Student: 1 '相当于单元格的列,在本例中为 B 列 Grade: A '相当于单元格的值,在本例中为“A”
因此,如果我填写 Class_1,1,A,那么 VBA 将选择单元格 B2 并为该单元格填写值“A”。
答案1
这是针对此请求的非常基本的 VBA 设置。我猜你可能想对其进行一些调整,使其更加完善。它只是循环遍历工作表中的每个班级/学生组合,然后弹出一个输入框,要求输入成绩。
Sub getGrades()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") 'change this to your grade sheet
Dim intRow As Integer
Dim intColumn As Integer
Dim intClassCount As Integer
Dim intStudentCount As Integer
Dim strResponse As String
'get the last row in which a class is present and the last column in which a student is present
intClassCount = ws.Range("A65000").End(xlUp).Row
intStudentCount = ws.Range("IV1").End(xlToLeft).Column
'run through all of the class/student combinations
For intRow = 2 To intClassCount
For intColumn = 2 To intStudentCount
'Get the response
strResponse = InputBox("Please enter grade for" & vbCrLf & vbCrLf & "Class: " & ws.Cells(intRow, 1) & vbCrLf & "Student: " & ws.Cells(1, intColumn), "Enter Grade")
'May want to do some checking here to make sure strResponse is A,B,C,D, or F or whatever...
ws.Cells(intRow, intColumn).Value = strResponse
Next intColumn
Next intRow
End Sub
添加非 VBA 方法可能是解决此问题的更好方法。当我更深入地思考这个问题时,想象自己必须输入分布在许多班级的学生的成绩,我会:
创建一个新的工作表选项卡,其中一列列出每个学生,第二列列出他们各自的班级。此列表的长度为 <#OfStudents> x <#OfClasses>。您可以通过复制和粘贴快速创建此列表,或者编辑上面的 VBA 以将班级/学生组合粘贴到新工作表中各自的行中。
在新工作表的第三列(C 列)中,您可以输入他们的成绩。采用这种格式后,新工作表将允许您进行排序,然后按 Ctrl+F(查找)和自动筛选,以便仅针对您关心的学生。
回到原始工作表的单元格 A3 中,您可以使用以下公式从新工作表(我将新工作表称为“NewSheet”)中获取学生成绩:
=INDIRECT("NewSheet!C" & SUMPRODUCT((B$1=NewSheet!$A$1:$A$2000)*($A2=NewSheet!$B$1:$B$2000)*ROW(NewSheet!$A$1:$A$2000)))
疯狂的 sumproduct 公式将返回在 NewSheet 中找到学生/班级组合的行,而 Indirect 将从该特定行获取成绩。
走这条路有几个好处。首先,没有 VBA。并不是说 VBA 是坏事,只是不像工作表公式那样被广泛理解。其次,您将获得一个非常实用的 UserForm/Interface,可以使用 NewSheet、AutoFiltering 和 Sorting 以及所有其他 Excel 功能输入成绩。第三,您可以将其缩小到一百万个学生/班级组合,而无需摆弄代码。只需将公式复制并粘贴到不断扩大的班级和学生矩阵中,就可以了。