Esta é uma configuração básica do VBA de bare bones para esta solicitação. Eu suponho que você provavelmente gostaria de ajustá-lo um pouco para torná-lo um pouco mais. Ele apenas passa por cada combinação de Classe / Aluno em sua planilha e exibe uma caixa de entrada solicitando a nota.
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
Adicionando um método não-VBA que é provavelmente a melhor maneira de resolver isso. Como eu penso sobre a questão mais profunda, e me imagino tendo que inserir notas para dezenas de alunos espalhados por muitas classes, eu gostaria de:
-
Crie uma nova guia de planilhas que liste cada aluno em uma coluna e suas respectivas classes em uma segunda coluna. Esta lista seria < # OfStudents > x < # OfClasses > longo. Você pode criar isso rapidamente copiando e colando ou editando o VBA acima para simplesmente colocar a combinação de classe / aluno em suas próprias linhas na nova planilha.
-
Em uma terceira coluna na nova planilha (coluna C), você pode inserir sua nota. Com esse formato, uma nova planilha permitirá que você classifique e Ctrl + F (localizar) e o Filtro automático para segmentar apenas os alunos de que você gosta.
-
De volta à planilha original na célula A3, você pode usar a seguinte fórmula para trazer a nota de alunos da nova planilha (eu chamarei a nova planilha "NewSheet") na fórmula:
=INDIRECT("NewSheet!C" & SUMPRODUCT((B$1=NewSheet!$A$1:$A$2000)*($A2=NewSheet!$B$1:$B$2000)*ROW(NewSheet!$A$1:$A$2000)))
A fórmula maluca do sumproduct retornará a linha na qual a combinação Estudante / Classe é encontrada em NewSheet, e o Indireto buscará a Nota daquela linha em particular.
Indo por esse caminho, você tem algumas vantagens. Primeiro, não há VBA. Não que o VBA seja uma coisa ruim, não é tão amplamente entendido como uma fórmula de folha. Segundo, você obtém um UserForm / Interface muito útil para inserir notas com NewSheet e AutoFiltering and Sorting e todas as outras sutilezas do Excel. Em terceiro lugar, você pode dimensionar isso para um milhão de combinações de alunos / classes sem mexer com o código. Basta copiar e colar a fórmula na sua matriz de Classes e Alunos em constante expansão e pronto.