: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 ส่งข้อมูลเข้า Workbook อื่น ใน sheet "คะแนน1" ซึ่งลงข้อมูลไม่ครบ

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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 ส่งข้อมูลเข้า Workbook อื่น ใน sheet "คะแนน1" ซึ่งลงข้อมูลไม่ครบ

#1

Post by aueijung »

เรียน อาจารย์ครับ ผมมีโค๊ด VBA แล้วเกิดปัญหาคือ ไฟล์ ดึงจปส.-2-2563-ม.4-1-SendMarkToPP5 - TEST.xlsm ข้อมูลในชีท จปสคะแนนสอบกลางภาค ส่งข้อมูลจากปุ่ม ส่งคะแนน Miterm2 เข้า ปพ.5 แล้วข้อมูลก็เข้า Workbook อื่น ใน Drive D:\ปพ.5\ปีการศึกษา2563\มัธยม\เทอม2\ม.4-1 ของ sheet "คะแนน1" ในแต่ละไฟล์ ซึ่งลงข้อมูลไม่ครบตามไฟล์ที่มีปัญหาคือ ไฟล์ ส31103-1.xlsm ในไฟล์นี้ ถ้าเราต้องการแก้ปัญหาโดยให้เช็คว่า ถ้า คอลัมภ์ AJ7 ได้ลงคะแนนไปแล้ว ก็ให้ข้ามมาคอลัมภ์มา AK7 โดยให้เช็ค Match ที่กำหนด แถว G3:AF3 ในชีท จปสคะแนนสอบกลางภาค ด้วย กระผมต้องปรับโค๊ดอย่างไรครับ
Module18

Code: Select all

Sub SendMarkMitterm2ToPP5_Click()
   Dim p, directory As String, fileName As String
    Dim sheet As Worksheet, j As Integer
    Dim tempBook As Workbook, thsBook As Workbook
    Dim bookStr As String, rw As Integer
    Application.ScreenUpdating = False
    p = Range("R1")
    directory = Sheets(p).Range("D1").Value

    fileName = Dir(directory & "*.xl??")
    Set thsBook = ThisWorkbook
    j = 7
    
Do While fileName <> ""
    Set tempBook = Workbooks.Open(directory & fileName)
    bookStr = VBA.Left(tempBook.Name, 6)
    On Error Resume Next
    With thsBook.Sheets(p)
        rw = Application.Match(bookStr, .Range("G2:AF2"), 0) - 1
        If Err <> 0 Then
            MsgBox "File " & tempBook.Name & " not found in Rows 5."
            Err = 0
        Else
        
            With tempBook.Sheets("คะแนน1")
                .Range("AJ7:AJ62").Value = _
                    thsBook.Worksheets("จปสคะแนนสอบกลางภาค").Cells(6, j + rw).Resize(55, 1).Value
            End With
            
          
        End If
    End With
        'r = r + 1
        'j = j + 1
    	tempBook.Close True
      '  tempBook.Close False
        fileName = Dir()
Loop
       
    Application.ScreenUpdating = True
    MsgBox ("ส่งคะแนนเข้า ปพ.5 Directory " & Sheets(p).Range("D1").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: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: VBA ส่งข้อมูลเข้า Workbook อื่น ใน sheet "คะแนน1" ซึ่งลงข้อมูลไม่ครบ

#2

Post by snasui »

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

Re: VBA ส่งข้อมูลเข้า Workbook อื่น ใน sheet "คะแนน1" ซึ่งลงข้อมูลไม่ครบ

#3

Post by aueijung »

เรียนอาจารย์ครับ มี workbook ที่มีชื่อเหมือนกันดังภาพนี้ครับ
Image
คือข้อมูลวางตำแหน่งที่ถูกต้อง ตามวิชา สังคมศึกษา ศาสนาและวัฒนธรรม ฉ.1 คอลัมภ์ AJ7 ข้อมูลลงไฟล์ ส31103-1.xlsm แต่ วิชา สังคมศึกษา ศาสนาและวัฒนธรรม ฉ.2 คอลัมภ์ AK7 ไม่มีข้อมูลลงไฟล์เดียวกัน ส31103-1.xlsm (ไฟล์เดียวกัน ลงแต่ คอลัมภ์ AJ7 แต่ข้อมูล ไม่ลงคอลัมภ์ AK7 ของไฟล์เดียวกัน เราต้องแก้ไขโค๊ดอย่างไรครับอาจารย์)
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: VBA ส่งข้อมูลเข้า Workbook อื่น ใน sheet "คะแนน1" ซึ่งลงข้อมูลไม่ครบ

#4

Post by snasui »

:D ชื่อไฟล์เหมือนกันก็ย่อมจะต้องนำคอลัมน์แรกมาใช้เพราะใช้ฟังก์ชั่น Match ในการหาคอลัมน์ หากจะให้ได้คอลัมน์ถัดไปจะต้องสร้างเงื่อนไขมารองรับเพิ่มเติมว่าต้องใช้กี่คอลัมน์ เช่นนี้เป็นต้นครับ

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

Code: Select all

dim c as integer
'...
rw = Application.Match(bookStr, .Range("G2:AF2"), 0) - 1
c = application.countif(.Range("G2:AF2"),bookStr)
If Err <> 0 Then
    MsgBox "File " & tempBook.Name & " not found in Rows 5."
    Err = 0
Else

With tempBook.Sheets("คะแนน1")
    .Range("AJ7:AJ62").resize(,c).Value = _
        thsBook.Worksheets("จปสคะแนนสอบกลางภาค").Cells(6, j + rw).Resize(55, c).Value
End With
'...
แต่ชื่อไฟล์จะต้องอยู่ติดกัน ไม่เช่นนั้นต้องเปลี่ยนเป็นการ Loop เข้าไปหาแทนการ Match ครับ
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA ส่งข้อมูลเข้า Workbook อื่น ใน sheet "คะแนน1" ซึ่งลงข้อมูลไม่ครบ

#5

Post by aueijung »

ขอบพระคุณมากครับอาจารย์ ผมเริ่มเข้าใจวิธีการทำงานจากที่อาจารย์ให้ความรู้เพิ่มขึ้นเรื่อยๆ แล้วครับ แต่มีเรื่องสงสัยอีกประการครับอาจารย์ครับ คือถ้าเรามีข้อมูลต้นทางนักเรียนบางคนมีคะแนน เป็นค่า 0 คะแนนของบางรายวิชา เราจะข้ามค่าข้อมูล 0 ไปวางคะแนนของคนต่อไป ด้วยการเช็คค่า AJ8:AJ62 ว่า ถ้ามีค่าข้อมูลเป็น 0 คะแนน ให้ข้าม ไม่วางค่า 0 คะแนนให้นักเรียนคนนั้น เพื่อที่จะให้คุณครูประจำวิชา ไปตามเช็คคะแนนกับนักเรียนคนนั้นๆ เอง (คะแนน 0 คือ นักเรียนขาดสอบ,ลาออก เราจะข้ามการวางเมื่อนักเรียนได้ 0 คะแนนอย่างไรครับผม)
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: VBA ส่งข้อมูลเข้า Workbook อื่น ใน sheet "คะแนน1" ซึ่งลงข้อมูลไม่ครบ

#6

Post by snasui »

:D เพื่อให้ง่าย ให้วางลงมาทั้งหมดแล้วค่อย Loop เข้าไป Clear ค่า 0 ทิ้งครับ

จาก Code ที่ผมตอบไป เราทราบอยู่แล้วว่าวางข้อมูลในช่วงไหน สามารถ Loop เข้าไปในช่วงข้อมูลนั้นเพื่อ Clear ค่าที่เป็น 0 ทิ้งไป

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

Re: VBA ส่งข้อมูลเข้า Workbook อื่น ใน sheet "คะแนน1" ซึ่งลงข้อมูลไม่ครบ

#7

Post by aueijung »

อาจารย์ครับ ผมลองปรับเป็น

Code: Select all

'...
With tempBook.Sheets("คะแนน1")
    .Range("AJ7:AJ62").resize(,c).Value = _
        thsBook.Worksheets("จปสคะแนนสอบกลางภาค").Cells(6, j + rw).Resize(55, c).Value
                        With Cells
                                .Replace "0", ""
                                .SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
                        End With
End With
'...
ผลคือ
คนที่ได้ 0 จะได้ค่า Blank ซึ่งถูกต้องครับ ได้ค่าว่าง
แต่
คนที่ได้ 10 จะได้คะแนน 1 คะแนนแทน
คนที่ได้ 20 จะได้คะแนน 2 คะแนนแทน
คนที่ได้ 30 จะได้คะแนน 3 คะแนนแทน
คนที่ได้ 40 จะได้คะแนน 4 คะแนนแทน
คนที่ได้ 50 จะได้คะแนน 5 คะแนนแทน
คนที่ได้ 60 จะได้คะแนน 6 คะแนนแทน
ครับผม
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: VBA ส่งข้อมูลเข้า Workbook อื่น ใน sheet "คะแนน1" ซึ่งลงข้อมูลไม่ครบ

#8

Post by snasui »

:D แค่เปลี่ยนค่า 0 เป็นเซลล์ว่าง ไม่ใช่ให้ลบเซลล์ทิ้งครับ

ตัวอย่างการปรับ Code ให้ Clear ค่า 0 ทิ้งและ Clear เฉพาะพื้นที่ที่วางข้อมูลในครั้งนั้น ๆ ไม่ใช่ Clear ทั้งชีตครับ

Code: Select all

dim c as integer
dim r as range
'...
rw = Application.Match(bookStr, .Range("G2:AF2"), 0) - 1
c = application.countif(.Range("G2:AF2"),bookStr)
If Err <> 0 Then
    MsgBox "File " & tempBook.Name & " not found in Rows 5."
    Err = 0
Else

With tempBook.Sheets("คะแนน1")
    .Range("AJ7:AJ62").resize(,c).Value = _
        thsBook.Worksheets("จปสคะแนนสอบกลางภาค").Cells(6, j + rw).Resize(55, c).Value
    for each r in .Range("AJ7:AJ62").resize(,c)
        if r.value = 0 then r.clearcontents
    next r
End With
'...
aueijung
Member
Member
Posts: 109
Joined: Thu May 30, 2013 12:03 am

Re: VBA ส่งข้อมูลเข้า Workbook อื่น ใน sheet "คะแนน1" ซึ่งลงข้อมูลไม่ครบ

#9

Post by aueijung »

:thup: ใช่ครับอาจารย์ พอผมมาเปิดไฟล์ดูอีกที พบว่า ไฟล์ผมเละเลยครับ :lol: :lol: :lol: :tt: :tt: :tt: เลข 0 เต็มกระดาน ขอหัวเราะให้กับตรรกะอันน้อยนิดของผมครับอาจารย์ ^^
ขอบพระคุณอาจารย์มากๆ ครับผม ที่คอยชี้แนะกระผมครับ
Post Reply