: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 ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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 ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#1

Post by aueijung »

:mrgreen: อาจารย์ครับ จะแก้ปัญหาอย่างไรครับ การแสดงผลการดึงผิดพลาดไปครับ โดยที่ VBA ดึง(คะแนน, คุณลักษณะฯ, อ่าน คิด วิเคราะห์และเขียนสือความ) แต่ละไฟล์มาแสดงคลาดเคลื่อนไปครับ

Code: Select all

Sub P11_Click()
Dim directory As String, fileName As String
    Dim sheet As Worksheet, j As Integer
    Dim tempBook As Workbook, thsBook As Workbook
    Application.ScreenUpdating = False
    'directory = "D:\ปพ.5\ปีการศึกษา2557\ประถม\เทอม1-2\ป.1-1\"
    directory = Sheets("ป.1").Range("c1").Value
    fileName = Dir(directory & "*.xl??")
    Set thsBook = ThisWorkbook
    j = 5 'บรรทัดที่ 5 คอลัมภ์ที่ 1 ชื่อไฟล์ที่นำไปแสดง
    Do While fileName <> ""
        Set tempBook = Workbooks.Open(directory & fileName)
        thsBook.Sheets("ป.1").Cells(j, 1) = tempBook.Name
        thsBook.Worksheets("ป.1").Cells(j, 5).Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("k19").Value

      j = j + 1
        tempBook.Close False
        fileName = Dir()
    Loop
       
    Application.ScreenUpdating = True
    'MsgBox ("รับข้อมูล...จาก Directory " & Sheets("ปก").Range("c1").Value & " เรียบร้อยแล้วครับ")
End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: VBA ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#2

Post by snasui »

:D ช่วยอธิบายว่าเอาชีทไหน เซลล์ไหนของไฟล์ต้นทางมาวางในไฟล์ปลายทาง โดยมีเงื่อนไขอะไรบ้าง ฯลฯ ครับ
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#3

Post by aueijung »

ดึงข้อมูลจากชีท ปก ของแต่ละไฟล์ที่มีอยู่ใน directory D:\ปพ.5\ปีการศึกษา2557\ประถม\เทอม1-2\ป.1-1\ มาแสดงที่ไฟล์ rtaw-pm-test.xlsm ชีท ป.1 ตามสีเหลืองที่มาคไว้ด้วยเซลสีเหลืองครับ (คัดลอกข้อมูลในแต่ละไฟล์มาวางตามชื่อรายวิชา เกรด คุณลักษณะอันพึงประสงค์ และการอ่าน คิด วิเคราะห์ และเขียนสื่อความ)
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: VBA ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#4

Post by snasui »

:D กรณีนี้ให้อธิบายโดยชี้ถึงระดับเซลล์ ระบุตำแหน่งเซลล์เลย อย่าระบุค่าที่อยู่ในเซลล์ เพราะจะทำให้เสียเวลาในการค้นหาค่าที่อธิบายมาครับ
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#5

Post by aueijung »

:mrgreen:
ระดับผลการเรียน
ชีท ปก เซลล์ F14:P14 ดึงมาวางที่ชีท ป.1-1 เซลล์ D5:N5

คุณลักษณะอันพึงประสงค์
ชีท ปก เซลล์ C19:I19 ดึงมาวางที่ชีท ป.1-1 เซลล์ Q5:W5

การอ่าน คิดวิเคราะห์ และเขียนสื่อความ
ชีท ปก เซลล์ L19:R19 ดึงมาวางที่ชีท ป.1-1 เซลล์ Z5:AF5

ทุกๆไฟล์ที่มีในโฟลเด้อ ป.1-1 ก็ปฏิบัติเหมือนกันตามลำดับครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: VBA ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#6

Post by snasui »

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

Code: Select all

Do While fileName <> ""
    Set tempBook = Workbooks.Open(directory & fileName)
    With thsBook.Sheets("».1")
        .Cells(j, "a") = tempBook.Name
        .Cells(j, "d").Resize(1, 12).Value = _
            tempBook.Sheets("»¡").Range("f14:q14").Value
        .Cells(j, "q").Resize(1, 8).Value = _
            tempBook.Sheets("»¡").Range("c19:j19").Value
        .Cells(j, "z").Resize(1, 8).Value = _
            tempBook.Sheets("»¡").Range("l19:s19").Value
    End With
    j = j + 1
    tempBook.Close False
    fileName = Dir()
Loop
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#7

Post by aueijung »

อาจารย์ครับ ปรับใหม่เป็น
ระดับผลการเรียน
ชีท ปก เซลล์ F14:P14 ดึงมาวางที่ชีท ป.1-1 เซลล์ D5:M5

คุณลักษณะอันพึงประสงค์
ชีท ปก เซลล์ C19:I19 ดึงมาวางที่ชีท ป.1-1 เซลล์ O5:R5

การอ่าน คิดวิเคราะห์ และเขียนสื่อความ
ชีท ปก เซลล์ L19:R19 ดึงมาวางที่ชีท ป.1-1 เซลล์ T5:W5

อาจารย์ครับ เราสามารถปรับให้ชื่อไฟล์ที่แสดงที่ ชีท ป.1-1 เซลล์ A5 ให้ตรงกับรหัสวิชา 6 ตัว ที่เซลล์ B5 คือให้ชื่อไฟล์ตรงกัน เช่น
เซลล์ A5 ชื่อไฟล์ ค11101-1.xlsm ตรงกับค่ารหัสวิชา เซลล์ B5 ค11101 สามารถทำได้หรือไม่ครับ

Code: Select all

Sub P11_Click()
Dim directory As String, fileName As String
    Dim sheet As Worksheet, j As Integer
    Dim tempBook As Workbook, thsBook As Workbook
    Application.ScreenUpdating = False
    'directory = "D:\ปพ.5\ปีการศึกษา2557\ประถม\เทอม1-2\ป.1-1\"
    directory = Sheets("ป.1-1").Range("c1").Value
    fileName = Dir(directory & "*.xl??")
    Set thsBook = ThisWorkbook
    j = 5 'บรรทัดที่ 5 คอลัมภ์ที่ 1 ชื่อไฟล์ที่นำไปแสดง
    
    Do While fileName <> ""
    Set tempBook = Workbooks.Open(directory & fileName)
    With thsBook.Sheets("ป.1-1")
        .Cells(j, "a") = tempBook.Name
        .Cells(j, "d").Resize(1, 12).Value = _
            tempBook.Sheets("ปก").Range("f14:o14").Value
        .Cells(j, "o").Resize(1, 4).Value = _
            tempBook.Sheets("ปก").Range("c19:f19").Value
        .Cells(j, "t").Resize(1, 4).Value = _
            tempBook.Sheets("ปก").Range("l19:o19").Value
    End With
    j = j + 1
    tempBook.Close False
    fileName = Dir()
Loop
       
    Application.ScreenUpdating = True
    'MsgBox ("รับข้อมูล...จาก Directory " & Sheets("ปก").Range("c1").Value & " เรียบร้อยแล้วครับ")
End Sub
You do not have the required permissions to view the files attached to this post.
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#8

Post by aueijung »

ทำได้แล้วครับ แต่จะทำอย่างไรครับ จะให้ชื่อไฟล์ที่อยู่เซลล์ A5 ชีท ป.1-1 ตรงกับรหัสวิชาเซลล์ B5 ชีท ป.1-1 ครับอาจารย์

Code: Select all

Do While fileName <> ""
    Set tempBook = Workbooks.Open(directory & fileName)
    With thsBook.Sheets("ป.1-1")
        .Cells(j, "a") = tempBook.Name
        .Cells(j, "d").Resize(1, 8).Value = _
            tempBook.Sheets("ปก").Range("f14:m14").Value
        .Cells(j, "l").Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("n14:o14").Value
        .Cells(j, "m").Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("p14:q14").Value
            
         .Cells(j, "o").Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("c14:e14").Value
            
        .Cells(j, "q").Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("c19:d19").Value
        .Cells(j, "r").Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("e19:f19").Value
        .Cells(j, "s").Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("g19:h19").Value
         .Cells(j, "t").Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("i19:j19").Value
            
        .Cells(j, "v").Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("l19:m19").Value
        .Cells(j, "w").Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("n19:o19").Value
        .Cells(j, "x").Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("p19:q19").Value
         .Cells(j, "y").Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("r19:s19").Value
    End With
    j = j + 1
    tempBook.Close False
    fileName = Dir()
Loop
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: VBA ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#9

Post by snasui »

:D จะให้ตรงกันก็ต้องวางที่ A6 ครับ ไม่ใช่ไปวางที่ A5

และหากวางที่ A6 ไม่ได้ก็ให้อธิบายมาว่าเหตุใดจึงวางไม่ได้ หรือแจ้งมาโดยละเอียดว่ามีเงื่อนไขการพิจารณาอย่างไรว่าให้วาตรงนั้นวางตรงนี้ จึงจะตอบได้ครับ
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#10

Post by aueijung »

:mrgreen: ใช่ๆ ครับอาจารย์
ถ้าชื่อไฟล์มีอัขระ ค11101-1.xlsm ตรงกันกับรหัสวิชา ค11101 ก็ต้องวางที่เซลล์ A6
ถ้าชื่อไฟล์มีอัขระ ง11101-1.xlsm ตรงกันกับรหัสวิชา ง11101 ก็ต้องวางที่เซลล์ A12
ถ้าชื่อไฟล์มีอัขระ จ11101-1.xlsm ตรงกันกับรหัสวิชา จ11101 ก็ต้องวางที่เซลล์ A14
ถ้าชื่อไฟล์มีอัขระ ท11101-1.xlsm ตรงกันกับรหัสวิชา ท11101 ก็ต้องวางที่เซลล์ A5
ฯลฯ
จนครบทั้งหมดในโฟลเด้อนั้นๆ ถ้าไม่ตรงกันก็ไม่ต้องวาง จนกว่าจะเจอรหัสวิชาที่ตรงกันจึงจะวางข้อมูล หรือออกจากการวางค่าเมื่อไม่มีไฟล์ในโฟลเด้อ D:\ปพ.5\ปีการศึกษา2557\ประถม\เทอม1-2\ป.1-1\ ครับอาจารย์
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: VBA ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#11

Post by snasui »

:D ประกาศตัวแปรเพิ่มเป็น

Code: Select all

Dim bookStr As String, rw As Integer
จากนั้นปรับการ Loop เป็นด้านล่างครับ

Code: Select all

Do While fileName <> ""
    Set tempBook = Workbooks.Open(directory & fileName)
    bookStr = VBA.Left(tempBook.Name, 6)
    On Error Resume Next
    With thsBook.Sheets("ป.1-1")
        rw = Application.Match(bookStr, .Range("b5:b10000"), 0) - 1
        If Err <> 0 Then
            MsgBox "File " & tempBook.Name & " not found in column B."
            Err = 0
        Else
            .Cells(j + rw, "a") = tempBook.Name
            .Cells(j + rw, "d").Resize(1, 8).Value = _
                tempBook.Sheets("ปก").Range("f14:m14").Value
            .Cells(j + rw, "l").Resize(1, 1).Value = _
                tempBook.Sheets("ปก").Range("n14:o14").Value
            .Cells(j + rw, "m").Resize(1, 1).Value = _
                tempBook.Sheets("ปก").Range("p14:q14").Value
            
            .Cells(j + rw, "o").Resize(1, 1).Value = _
                tempBook.Sheets("ปก").Range("c14:e14").Value
            
            .Cells(j + rw, "q").Resize(1, 1).Value = _
                tempBook.Sheets("ปก").Range("c19:d19").Value
            .Cells(j + rw, "r").Resize(1, 1).Value = _
                tempBook.Sheets("ปก").Range("e19:f19").Value
            .Cells(j + rw, "s").Resize(1, 1).Value = _
                tempBook.Sheets("ปก").Range("g19:h19").Value
            .Cells(j + rw, "t").Resize(1, 1).Value = _
                tempBook.Sheets("ปก").Range("i19:j19").Value
            
            .Cells(j + rw, "v").Resize(1, 1).Value = _
                tempBook.Sheets("ปก").Range("l19:m19").Value
            .Cells(j + rw, "w").Resize(1, 1).Value = _
                tempBook.Sheets("ปก").Range("n19:o19").Value
            .Cells(j + rw, "x").Resize(1, 1).Value = _
            tempBook.Sheets("ปก").Range("p19:q19").Value
            .Cells(j + rw, "y").Resize(1, 1).Value = _
                tempBook.Sheets("ปก").Range("r19:s19").Value
        End If
    End With
    'j = j + 1
    tempBook.Close False
    fileName = Dir()
Loop
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#12

Post by aueijung »

:cp: ได้แล้วครับอาจารย์ สุดยอดเลยครับ ขอบพระคุณมากๆครับอาจารย์ ผมอยากทำ Excel ให้เก่งๆ เหมือนอาจารย์จังเลยครับ ต้องทำหรือเตรียมตัวอย่างไรบ้างครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: VBA ดึงคะแนนข้ามไฟล์มาแสดงตามชื่อรายวิชา

#13

Post by snasui »

:D ลองอ่านที่ผมเคยเขียนถึงตัวเองไว้ที่นี่ครับ http://www.snasui.com/viewtopic.php?t=2014 :mrgreen:

ปัจจุบันหากทำไฟล์ไว้แจกบางไฟล์จะมีการป้องกันเอาไว้บ้างเพื่อไม่ให้ผู้ไม่หวังดีนำไปหาประโยชน์เชิงเศรษฐกิจ
Post Reply