นี่คือการตั้งค่า 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 ซึ่งอาจเป็นวิธีที่ดีกว่าในการแก้ปัญหานี้ เมื่อฉันคิดถึงคำถามที่ลึกกว่านี้และนึกภาพตัวเองว่าต้องเข้าเรียนเพื่อให้คะแนนนักเรียนแผ่กระจายไปทั่วหลายชั้นเรียนฉันจะ:
สร้างแท็บชีตใหม่ที่แสดงนักเรียนแต่ละคนในหนึ่งคอลัมน์และคลาสที่เกี่ยวข้องในคอลัมน์ที่สอง รายการนี้จะ & lt; # OfStudents & gt; x & lt; # OfClasses & gt; ยาว. คุณสามารถสร้างสิ่งนี้ได้อย่างรวดเร็วโดยการคัดลอกและวางหรือแก้ไข 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)))
สูตรผลรวมบ้าจะส่งคืนแถวที่พบชุดนักเรียน / ชั้นเรียนใน NewSheet และทางอ้อมจะดึงเกรดจากแถวนั้น
ไปเส้นทางนี้คุณมีข้อได้เปรียบเล็กน้อย อย่างแรกคือไม่มี VBA ไม่ใช่ว่า VBA นั้นเป็นสิ่งที่ไม่ดี แต่ก็ไม่เป็นที่เข้าใจกันอย่างกว้างขวางว่าเป็นสูตรชีต ประการที่สองคุณจะได้รับ UserForm / ส่วนต่อประสานที่ใช้งานได้มากสำหรับการป้อนคะแนนด้วย NewSheet และ AutoFiltering and Sorting และอื่น ๆ อีกมากมาย ประการที่สามคุณสามารถลดขนาดชุดนักเรียน / คลาสรวมเป็นล้านชุดโดยไม่ต้องใช้รหัส เพียงแค่คัดลอกและวางสูตรลงในเมทริกซ์ที่เพิ่มขึ้นของคลาสและนักเรียนและสิ่งที่คุณควรทำ