:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#1

Post by aueijung »

:mrgreen: ถ้าหากเราต้องการจะดึงข้อมูลของนักเรียน 2 คนให้มาอยู่ในกระดาษหน้าเดียว เช่น เลขที่ 1,2 อยู่ในหน้าที่ 1 ส่วนเลขที่ 3,4 อยู่ในหน้าที่ 2 ประเด็นคือต้องการประหยัดกระดาษเวลาปริ้น เราจะต้องแก้ตรงส่วนไหนครับอาจารย์
ผลลัพธ์ที่ต้องการ
pic_resize.png
ไฟล์แนบที่มีปัญหา
รายงานผลการเรียน.xlsm
อีกอย่างครับ คือถ้าเราต้องการดึง ชื่อรายวิชาในชีท "คะแนนสอบกลางภาค" โดยจับชื่อวิชาที่เรียงอันดับรายวิชา 1 2 3 4 4.1 . . . 16 มาเทียบกับชื่อวิชาที่ตำแหน่ง ที่ ในชีท
"รายงานผลการเรียน-Miterm" เพื่อจะวางข้อมูลชื่อรายวิชา คะแนนเต็ม และคะแนนที่ได้ ตามโครงสร้างของของแบบฟอร์ม พื้นที่สีเขียว และสีเหลือง เราจะต้องทำอย่างไรครับอาจารย์ :mrgreen:
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31132
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#2

Post by snasui »

:D ตัวอย่างสูตรที่ B7, E7, F7 ตามด้านล่างครับ

Code: Select all

B7	 =INDEX(คะแนนสอบกลางภาค!$G$4:$W$4,MATCH($A7,คะแนนสอบกลางภาค!$G$3:$W$3,0))

E7	 =INDEX(คะแนนสอบกลางภาค!$G$6:$W$6,MATCH($A7,คะแนนสอบกลางภาค!$G$3:$W$3,0))

F7	 =INDEX(คะแนนสอบกลางภาค!$G$7:$W$21,MATCH($F$4,คะแนนสอบกลางภาค!$B$7:$B$21,0),MATCH($A7,คะแนนสอบกลางภาค!$G$3:$W$3,0))
จากนั้น Copy B7, E7, F7 ลงด้านล่างครับ
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#3

Post by aueijung »

:thup: :thup: :thup: :thup: :thup: ใช้ได้ดีมากครับอาจารย์

อาจารย์ครับ ผมสั่งปริ้นโดยกำหนดการพิมพ์เป็นช่วง ที่ชีท รายงานผลการเรียน-Miterm โดยการกรอกเลขที่เริ่มต้น และเลขที่สิ้นสุด กดปุ๋มพิมพ์ มันจะไปดึงเอาข้อมูลคะแนนจากชีท คะแนนสอบกลางภาค มาโชว์พรีวิวก่อนปริ้น ที่โค๊ด VBA ต้องปรับอย่างไรให้ ที่ชีท รายงานผลการเรียน-Miterm คอลัมภ์ A:F เป็นข้อมูลของนักเรียนเลขที่ คี่ และคอลัมภ์ I:N เป็นข้อมูลของนักเรียนหมายเลข คู่ วนรอบจนครบทุกคนเวลาปริ้นเอกสารออกมา แค่กดปุ่มปริ้นครั้งเดียวครับ

หรือมีวิธีให้โค๊ด VBA สั้นกว่านี้หรือไม่ครับ เพราะสูตรที่ทำยาวเกินไปครับ
ได้แนบโค๊ด VBA มาให้อาจารย์พิจารณาดูแล้วครับ
รายงานผลการเรียน.xlsm
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31132
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#4

Post by snasui »

:D คอลัมน์ F และ N ผมทำสูตรไว้ให้แล้ว ไม่จำเป็นต้องดึงข้อมูลมาด้วย VBA

จากไฟล์แนบ ควรกรอกเฉพาะเลขที่ก็เพียงพอ เซลล์อื่น ๆ สามารถดึงมาได้ด้วยสูตร

ค่าที่จะกรอกคือ F4 และ N4 โดยดูเฉพาะค่าเริมต้นและค่าสิ้นสุดเป็นหลัก

ตัวอย่างการ Loop ตามด้านล่างครับ

Code: Select all

Sub test()
    Dim iStart%, iStop%, i%
    With ActiveSheet
        iStart = .Range("q18")
        iStop = .Range("q20")
        For i = iStart To iStop Step 2
            .Range("f4") = i
            .Range("n4") = IIf(iStop >= i + 1, i + 1, "")
        Next i
    End With
End Sub
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#5

Post by aueijung »

:D :thup: :cp: ได้ผลลัพธ์ตามที่ต้องการปรับอีกนิดเดียว อาจารย์สุดยอดมากเก่งมากครับ ว่าแต่อาจารย์ได้เขียนหนังสือออกมาตามท้องตลาดหรือยังครับ ถ้ามีที่อาจารย์เขียนไว้ผมจะไปหาซื้อมาอ่าน แล้วก็อาจจะซื้อเข้าห้องสมุดโรงเรียน ถ้าอาจารย์เขียนหนังสือยังไงผมจะติดตามเรื่อยๆ นะครับอาจารย์ ขอบพระคุณมากครับ

Code: Select all

Sub ReportMiterm_Click()
Dim iStart%, iStop%, i%
    With ActiveSheet
        iStart = .Range("Q18")
        iStop = .Range("Q20")
        For i = iStart To iStop Step 2
            .Range("F4") = i
            .Range("N4") = IIf(iStop >= i + 1, i + 1, "")
                        If Sheets("รายงานผลการเรียน-Miterm").Range("Q22") = "พิมพ์ทันที Then
                                Sheets("รายงานผลการเรียน-Miterm").PrintOut
                        Else
                                Sheets("รายงานผลการเรียน-Miterm").PrintOut Preview:=True
                        End If

        Next i

    End With
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31132
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#6

Post by snasui »

:D ผมเขียนบทความและตอบปัญหาเท่านั้นครับ สำหรับหนังสือคิดว่าให้ท่านอื่น ๆ เขียนไปตามสะดวก ส่วนผู้อ่านและผู้ใช้งาน Excel หากทำตามหนังสือแล้วไม่ได้คำตอบสามารถยกมาถามกันได้ครับ
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#7

Post by aueijung »

:thup: ขอบคุณครับอาจารย์ :D
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#8

Post by aueijung »

:mrgreen: จะมองอย่างไรให้ เซลล์ G4 เป็นค่าของชีท รายงานผลการเรียน-Miterm เซลล์ F25
โดยจับคู่กับเลขที่เซลล์ B4 และชีทเกรดเฉลี่ย เซลล์ G4 จะเปลี่ยนไปเรื่อยๆ เมื่อเปลี่ยนเลขที่ ที่เซลล์ B4 ครับอาจารย์
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31132
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#9

Post by snasui »

:D เซลล์ G4 คีย์สูตรตามด้านล่างครับ

=LOOKUP(9.99999999999999E+307,INDEX('รายงานผลการเรียน-Miterm'!A:N,0,MATCH(B4,'รายงานผลการเรียน-Miterm'!$A$4:$N$4,0)))

Enter
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#10

Post by aueijung »

:mrgreen: เซลล์ G6 ถึงเซลล์ G55 ที่ชีท เกรดเฉลี่ย ไม่แสดงข้อมูลเลยครับเลยครับอาจารย์
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31132
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#11

Post by snasui »

:D ตามที่ถามเป็นการนำมาแสดงได้ทีละ 2 ค่าเท่านั้น

ไม่ทราบว่าส่วนที่ต้องการให้แสดงในเซลล์ต่อจากนั้น นำค่ามาจากไหนครับ :?:
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#12

Post by aueijung »

ค่าได้นั้นมาจาก เมื่อเราเปลี่ยน .....อ่อ......ครับอาจารย์เราจะทำอย่างไรให้ได้ข้อมูลของทุกๆ เลขที่ ตั้งแต่ เลขที่ 1 ถึง เลขที่สุดท้าย เมื่อเราเปลี่ยนเลขที่ ที่เซลล์ F4 ชีทรายงานผลการเรียน-Miterm แล้วให้มันเปลี่ยนอัติโนมัติ เพื่อดึงเอาค่า F25 มาใส่ที่เซลล์ G4 ถึง G55 ที่ชีทเกรดเฉลี่ย ให้มันวนรอบนำค่ามาแสดงจนครบทุกเลขที่ กลายเป็นข้อมูลแทนที่เราจะมาทำการเปลี่ยนเลขที่เอง คือให้มันสรุปข้อมูลออกมาจนครบทุกคนครับอาจารย์
User avatar
snasui
Site Admin
Site Admin
Posts: 31132
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#13

Post by snasui »

:D การให้ได้ค่าทั้งหมดตามตัวอย่างที่แนบมาได้นั้นต้อง Loop ด้วย VBA

ลองเขียนมาเองก่อน ติดตรงไหนค่อยถามกันต่อครับ
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#14

Post by aueijung »

:mrgreen: ชีท เกรดเฉลี่ย เซลล์ G7:G61 แสดงข้อมูลแค่เพียงค่าเดียวเองครับอาจารย์ มันไม่แสดงข้อมูลจนครบทุกคน เราจะแก้ไขอย่างไรครับอาจารย์
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31132
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#15

Post by snasui »

:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Sub GA_Click()
    Dim sheet As Worksheet, j As Integer
    Dim iStart%, iStop%, i%
    'j = 7
    With ActiveSheet
        iStart = .Range("Q18")
        iStop = .Range("Q20")
        For i = iStart To iStop Step 2
            .Range("F4") = i
            .Range("N4") = IIf(iStop >= i + 1, i + 1, "")
            If Sheets("รายงานผลการเรียน-Miterm").Range("Q22") = "พิมพ์ทันที" Then
                Sheets("เกรดเฉลี่ย").Range("g" & Rows.Count).End(xlUp).Offset(1, 0).Value = _
                    Sheets("รายงานผลการเรียน-Miterm").Range("F25")
                If Sheets("รายงานผลการเรียน-Miterm").Range("N4").Value <> "" Then
                    Sheets("เกรดเฉลี่ย").Range("g" & Rows.Count).End(xlUp).Offset(1, 0).Value = _
                        Sheets("รายงานผลการเรียน-Miterm").Range("N25")
                End If
            Else
                Sheets("รายงานผลการเรียน-Miterm").PrintOut Preview:=True
            End If
            ' Sheets("รายงานผลการเรียน-Miterm").PrintOut Preview:=True
        Next i
        ' Sheets("รายงานผลการเรียน-Miterm").PrintOut Preview:=True
    End With
End Sub
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#16

Post by aueijung »

:mrgreen: ถ้าเราจะให้เซลล์ F4 ที่ชีทรายงานผลการเรียน-Miterm มันมาเช็คค่ากับเซลล์ B7 ที่ชีทเกรดเฉลี่ย ว่าถ้าเลขที่เท่ากัน ก็ให้คัดลอกค่าเซลล์ F25 ไปกรอกที่เซลล์ B7 ที่ชีท เกรดเฉลี่ย แล้วเพิ่มค่า F4 ที่ชีทรายงานผลการเรียน-Miterm เปรียบเทียบกับค่ากับเซลล์ B7 ที่ชีทเกรดเฉลี่ย ในลำดับถัดมา ว่าถ้าเลขที่เท่ากัน ก็ให้คัดลอกค่าเซลล์ F25 ไปกรอกที่เซลล์ B8 ที่ชีท เกรดเฉลี่ย วนไปเรื่อยๆ จนถึงเลขที่สุดท้ายที่เป็นค่าตัวเลข ที่แสดงในเซลล์ B7:B61 โดยไม่ต้องไปเช็คกับคำว่า "พิมพ์ทันที" ก็ได้ครับ(มองแต่เฉพาะข้อมูลที่เราจะสรุปเป็นค่าของตัวเลขจากเซลล์ F25 เพื่อเอาไปกรอกเท่านั้นครับ) ถ้าไม่เท่ากันก็ให้หยุดการทำงาน ต้องทำการปรับตรงไหนบ้างครับอาจารย์
User avatar
snasui
Site Admin
Site Admin
Posts: 31132
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#17

Post by snasui »

:D ตัวอย่าง Code เฉพาะส่วนที่ปรับปรุงครับ

Code: Select all

If Sheets("รายงานผลการเรียน-Miterm").Range("Q22") = "พิมพ์ทันที" Then
    Sheets("เกรดเฉลี่ย").Range("g6").Offset(Sheets("รายงานผลการเรียน-Miterm").Range("f4").Value, 0) = _
        Sheets("รายงานผลการเรียน-Miterm").Range("F25")
    If Sheets("รายงานผลการเรียน-Miterm").Range("N4").Value <> "" Then
        Sheets("เกรดเฉลี่ย").Range("g6").Offset(Sheets("รายงานผลการเรียน-Miterm").Range("n4").Value, 0) = _
            Sheets("รายงานผลการเรียน-Miterm").Range("N25")
    End If
Else
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA คัดลอกค่าข้อมูลที่เปลี่ยนไปตามเงื่อนไข

#18

Post by aueijung »

:mrgreen: หลังการปรับ ก็ยังดึงค่าได้แค่ทีละ 2 ค่า ครับอาจารย์ เราสามารถดึงค่าแบบครบทุกเลขที่ได้หรือไม่ครับอาจารย์ โดยการกดปุ่มเพียงครั้งเดียวครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31132
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019, 365
Contact:

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#19

Post by snasui »

:D หากมาคลิกปุ่มที่ชีท เกรดเฉลี่ย ต้องเปลี่ยน Code ใหม่จาก With ActiveSheet เป็น With Sheets("รายงานผลการเรียน-Miterm") ครับ
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA แสดงรายการผลการเรียนของ 2 คน ในหน้าเดียว

#20

Post by aueijung »

:mrgreen: อาจารย์ครับใช้ได้ดีมากครับ แต่ว่า พอเรากดปุ่ม พิมพ์ มันจะทำลายสูตร(สูตรหายไปหมดหลังจากกดปุ่มพิม์)ในชีท รายงานผลการเรียน-Miterm เซลล์ F7:F24 และเซลล์ N7:N24 มันเป็นเพราะอะไรหรือครับสูตรถึงหายไปครับอาจารย์ และจากปกติปริ้นตามกำหนดเลขที่ได้มันออกมาหนึ่งหน้ามีเลขที่ทั้ง เซลล์ F4 และเซลล์ N4 (กดปุ่มพิมพ์ออกมา ไม่มี 2 เลขที่เหมือนเดิม ที่เป็นหน้าคู่ เพื่อประหยัดกระดาษ 1 แผ่นต้องมี 2 เลขที่ แต่กลับมีเลขที่เดียวในสองฝั่ง) งงมากๆ ครับตอนนี้
Post Reply