อินพุตของผู้ใช้เพื่อเลือกและเติมค่าสำหรับเซลล์


0

ฉันมีตาราง excel นี้: A2 ถึง A11 เป็นชื่อคลาส Class_1, Class_2, ... , Class_10 B1 ถึง K1 เป็นชื่อนักเรียน 1,2,3, ... , 10

สำหรับนักเรียนแต่ละคนในชั้นเรียนของฉันฉันจะต้องกรอกคะแนนของเขา

ฉันต้องการรับ VBA inputbox หรือ userform ดังนั้นฉันจะต้องตอบคำถามจากอินพุตหรือ userform เพื่อกรอกคะแนน

ฉันนึกภาพอินพุตหรือฟอร์มผู้ใช้เช่นนี้: คลาส: Class_1 'เทียบเท่ากับแถวของเซลล์ซึ่งในกรณีนี้แถว 2 นักเรียน: 1 'เทียบเท่ากับคอลัมน์ของเซลล์ซึ่งในกรณีนี้คอลัมน์ B ระดับ: A 'เทียบเท่ากับมูลค่าของเซลล์ซึ่งในกรณีนี้ "A"

ดังนั้นถ้าฉันกรอก Class_1,1 แล้ว A VBA จะเลือกเซลล์ B2 และจะเติมค่า "A" สำหรับเซลล์นั้น


1
คุณสามารถให้ชุดข้อมูลตัวอย่างได้หรือไม่? ฉันสงสัยว่าฉันรู้ว่าคุณกำลังทำอะไรอยู่และมีวิธีง่าย ๆ ที่จะทำ (โดยไม่ต้องใช้ VBA) แต่ฉันต้องการยืนยันวิธีการที่ข้อมูลจะตรวจสอบก่อนที่จะปรับแต่งโซลูชัน
James Brewer

ชุดข้อมูลมีลักษณะคล้ายกับชุดนี้ imgur.com/UADlMnV
Hien Le

คำตอบ:


0

นี่คือการตั้งค่า 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 ซึ่งอาจเป็นวิธีที่ดีกว่าในการแก้ปัญหานี้ เมื่อฉันคิดถึงคำถามที่ลึกกว่านี้และนึกภาพตัวเองว่าต้องเข้าเรียนเพื่อให้คะแนนนักเรียนแผ่กระจายไปทั่วหลายชั้นเรียนฉันจะ:

  1. สร้างแท็บชีตใหม่ที่แสดงนักเรียนแต่ละคนในหนึ่งคอลัมน์และคลาสที่เกี่ยวข้องในคอลัมน์ที่สอง รายการนี้จะ & lt; # OfStudents & gt; x & lt; # OfClasses & gt; ยาว. คุณสามารถสร้างสิ่งนี้ได้อย่างรวดเร็วโดยการคัดลอกและวางหรือแก้ไข VBA ด้านบนเพื่อรวมชุดนักเรียน / นักเรียนเข้ากับแถวของตนเองในแผ่นงานใหม่

  2. ในคอลัมน์ที่สามบนแผ่นงานใหม่ (คอลัมน์ C) คุณสามารถป้อนเกรดของพวกเขา หากมีในรูปแบบนี้แผ่นงานใหม่จะช่วยให้คุณสามารถเรียงลำดับและ Ctrl + F (ค้นหา) และตัวกรองอัตโนมัติเพื่อกำหนดเป้าหมายเฉพาะนักเรียนที่คุณสนใจ

  3. ย้อนกลับไปในแผ่นงานต้นฉบับในเซลล์ 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 และอื่น ๆ อีกมากมาย ประการที่สามคุณสามารถลดขนาดชุดนักเรียน / คลาสรวมเป็นล้านชุดโดยไม่ต้องใช้รหัส เพียงแค่คัดลอกและวางสูตรลงในเมทริกซ์ที่เพิ่มขึ้นของคลาสและนักเรียนและสิ่งที่คุณควรทำ


มีปัญหาสองสามข้อขึ้นมา: 1. ฉันไม่สามารถหยุดอินพุตได้มันก็โผล่ขึ้นมาเรื่อย ๆ 2. VBA นี้ย้ายบรรทัดไปยังบรรทัด ฉันต้องการตัวเลือกในการเลือกตำแหน่งของอินพุตของฉัน ดังนั้นฉันไม่ต้องคลิกป้อนหลายครั้งเพื่อย้ายไปยังนักเรียนเป้าหมายของฉัน โดยรวมแล้วรหัสที่ยอดเยี่ยมที่คุณเขียนนั้นมีอะไรบ้าง ขอบคุณมาก
Hien Le

ฉันเพิ่งแก้ไขคำตอบเพื่อเพิ่มโซลูชันที่ไม่ต้องใช้ VBA หากคุณยึดติดกับเส้นทาง VBA คุณอาจต้องการสร้าง UserForm ที่มีชั้นเรียนและนักเรียนที่ดึงลงมาจากแผ่นงาน เมื่อเลือกนักเรียน / คลาสคอมโบแล้วเกรดสามารถใส่ได้และตกลง ...
JNevill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.