: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

การนำข้อมูลจากไฟล์.csv ให้ต่อจากแถวสุดท้ายที่มีข้อมูล

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
User avatar
tigerwit
Bronze
Bronze
Posts: 485
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

การนำข้อมูลจากไฟล์.csv ให้ต่อจากแถวสุดท้ายที่มีข้อมูล

#1

Post by tigerwit »

จากไฟล์ที่แนบมมา
ต้องการนำข้อมูลจากไฟล์.csv ให้ต่อจากแถวสุดท้ายที่มีข้อมูล
ต้องปรับโค๊ดอย่างไรครับ

Code: Select all

Sub Import()
  Dim fileToOpen As Variant
  Dim fileFilterPattern As String
  Dim wsMaster As Worksheet
  Dim wbTextImport As Workbook
  '
    Application.ScreenUpdating = False
        If MsgBox("คุณต้องการนำเข้าผลการเรียน ใช่หรือไม่?", 36, "ยืนยันการนำเข้าผลการเรียน") = 6 Then
               fileToOpen = Application.GetOpenFilename(Title:="เปิดไฟล์ .csv เพื่อนำเข้าข้อมูล", FileFilter:="Text Files (*.txt; *.csv),*.txt;*.csv")
        End If
        If fileToOpen = False Then
                MsgBox "คุณไม่ได้เลือกไฟล์ที่จะนำเข้า", vbOKOnly + vbInformation, "ยกเลิกการนำเข้าข้อมูล"
       Exit Sub
        Else
            Workbooks.Open Filename:=fileToOpen, UpdateLinks:=0, local:=True
            Set wbTextImport = ActiveWorkbook
            Set wsMaster = ThisWorkbook.ActiveSheet
                    wbTextImport.Worksheets(1).Range("A1:N45").Copy
                        Range("F" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
                    wbTextImport.Worksheets(1).Range("O1:P45").Copy
                       Range("U" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
                    wbTextImport.Worksheets(1).Range("Q1:AD45").Copy
                        Range("Z" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
                    wbTextImport.Worksheets(1).Range("AE1:AF45").Copy
                        Range("AO" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
                    Application.CutCopyMode = False
                    wbTextImport.Close False
    Range("F6").Select
       MsgBox "นำเข้าคะแนนเรียบร้อยแล้ว"
         End If
    Application.ScreenUpdating = True
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: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การนำข้อมูลจากไฟล์.csv ให้ต่อจากแถวสุดท้ายที่มีข้อมูล

#2

Post by snasui »

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

Code: Select all

'Other code
Else
    Workbooks.Open Filename:=fileToOpen, UpdateLinks:=0, local:=True
    Set wbTextImport = ActiveWorkbook
    Set wsMaster = ThisWorkbook.ActiveSheet
    
    wbTextImport.Worksheets(1).Range("A1:N45").Copy
    wsMaster.Range("F" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
    
    wbTextImport.Worksheets(1).Range("O1:P45").Copy
    wsMaster.Range("U" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
    
    wbTextImport.Worksheets(1).Range("Q1:AD45").Copy
    wsMaster.Range("Z" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
    
    wbTextImport.Worksheets(1).Range("AE1:AF45").Copy
    wsMaster.Range("AO" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
'Other code
User avatar
tigerwit
Bronze
Bronze
Posts: 485
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: การนำข้อมูลจากไฟล์.csv ให้ต่อจากแถวสุดท้ายที่มีข้อมูล

#3

Post by tigerwit »

ขอบคุณครับได้ผลตามต้องการแล้วครับ
ขอสอบถามเพิ่มเติมในกระทู้นี้
กรณีที่ต้องการเลือกช่วงข้อมูลที่จะคัดลอก จากคลอลัมน์ A ถึง คลอลัมน์ N
โดยให้เลือกถึงแถวสุดท้ายที่มีข้อมูล (ยึดข้อมูลของคลอลัมน์ A)
ต้องปรับโค๊ดนี้อย่างไรครับ

Code: Select all

Sub test()
    Range(Range("A1"), Range("N1").End(xlDown)).Select
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: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การนำข้อมูลจากไฟล์.csv ให้ต่อจากแถวสุดท้ายที่มีข้อมูล

#4

Post by snasui »

:D สามารถทำให้ง่ายโดยกำหนดตัวแปรขึ้นมา 1 ตัวแล้วกำหนดค่าให้ตัวแปรนั้นด้วยค่าบรรทัดสุดท้ายของคอลัมน์ที่ต้องการจากนั้นค่อยนำไปใช้งาน ดังตัวอย่างด้านล่างครับ

Code: Select all

Dim rw As Long
With Worksheets("Sheet1")
    rw = .Range("a" & .Rows.Count).End(xlUp).Row
    .Range("N1:N" & rw).Select
End With
User avatar
tigerwit
Bronze
Bronze
Posts: 485
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: การนำข้อมูลจากไฟล์.csv ให้ต่อจากแถวสุดท้ายที่มีข้อมูล

#5

Post by tigerwit »

สอบถามกรณีที่เรานำเข้าข้อมูลมาต่อกันลงไปเรื่อยๆ โดยให้ตรวจสอบว่า ในคลอลัมน์ B มีค่าว่างหรือไม่
ถ้ามีค่าวาง ให้ยกเลิกการนำเข้ามูล จากโค๊ด ต้องปรับแก้อย่างไรครับ

Code: Select all

Sub ImPortToLastrows()
  Dim fileToOpen As Variant
  Dim fileFilterPattern As String
  Dim wsMaster As Worksheet
  Dim wbTextImport As Workbook
  Dim rw As Long
  Dim rg As Long
  '
    Application.ScreenUpdating = False
        If MsgBox("คุณต้องการนำผลการเรียนจากห้อง 2 มาต่อท้ายห้อง 1 ใช่หรือไม่?", 36, "ยืนยันการนำผลการเรียนมารวมเป็นห้องเดียว") = 6 Then
               fileToOpen = Application.GetOpenFilename(Title:="เปิดไฟล์ .csv เพื่อนำเข้าข้อมูล", FileFilter:="Text Files (*.txt; *.csv),*.txt;*.csv")
        
        End If
        If fileToOpen = False Then
                MsgBox "คุณไม่ได้เลือกไฟล์ที่จะนำเข้า", vbOKOnly + vbInformation, "ยกเลิกการนำเข้าข้อมูล"
       Exit Sub

       rg = wsMaster.Range("B" & Rows.Count).End(xlUp).Row
       If Range("B" & rg).Value = "" Then
            MsgBox "ไม่มีนักเรียนให้นำเข้าคะแนน", vbOKOnly + vbInformation, "ยกเลิกการนำเข้าข้อมูล"
            Exit Sub
        End If

        Else
            Workbooks.Open Filename:=fileToOpen, UpdateLinks:=0, local:=True
            Set wbTextImport = ActiveWorkbook
            Set wsMaster = ThisWorkbook.ActiveSheet

                With wbTextImport.Worksheets(1)
                    rw = .Range("a" & .Rows.Count).End(xlUp).Row
                    .Range("A1:N" & rw).Copy
                    wsMaster.Range("F" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues

                    .Range("O1:P" & rw).Copy
                    wsMaster.Range("U" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
                    
                    .Range("Q1:AD" & rw).Copy
                    wsMaster.Range("Z" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
                    
                    .Range("AE1:AF" & rw).Copy
                     wsMaster.Range("AO" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues

               End With
                    Application.CutCopyMode = False
                    wbTextImport.Close False
                    Range("F6").Select
       End If
    Application.ScreenUpdating = True
           MsgBox "นำเข้าคะแนนเรียบร้อยแล้ว"
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: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การนำข้อมูลจากไฟล์.csv ให้ต่อจากแถวสุดท้ายที่มีข้อมูล

#6

Post by snasui »

:D กรุณาอธิบายมาอย่างละเอียดว่าคอลัมน์ B ของไฟล์ไหนเนื่องจากส่งมาสองไฟล์คือไฟล์โปรแกรมกับไฟล์ข้อมูล จะได้เข้าใจตรงกันครับ
User avatar
tigerwit
Bronze
Bronze
Posts: 485
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: การนำข้อมูลจากไฟล์.csv ให้ต่อจากแถวสุดท้ายที่มีข้อมูล

#7

Post by tigerwit »

คลอลัมน์B จากไฟล์ 12.xlsb ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การนำข้อมูลจากไฟล์.csv ให้ต่อจากแถวสุดท้ายที่มีข้อมูล

#8

Post by snasui »

:D ตัวอย่างการปรับ Code จะเป็นตามด้านล่างครับ

Code: Select all

'Other code
If MsgBox("คุณต้องการนำผลการเรียนจากห้อง 2 มาต่อท้ายห้อง 1 ใช่หรือไม่?", 36, "ยืนยันการนำผลการเรียนมารวมเป็นห้องเดียว") = 6 Then
       fileToOpen = Application.GetOpenFilename(Title:="เปิดไฟล์ .csv เพื่อนำเข้าข้อมูล", FileFilter:="Text Files (*.txt; *.csv),*.txt;*.csv")
End If
If fileToOpen = False Then
    MsgBox "คุณไม่ได้เลือกไฟล์ที่จะนำเข้า", vbOKOnly + vbInformation, "ยกเลิกการนำเข้าข้อมูล"
    Exit Sub
Else
    Set wsMaster = ThisWorkbook.ActiveSheet
    rg = wsMaster.Range("B" & Rows.Count).End(xlUp).Row
    If Range("B" & rg).Value = "" Then
        MsgBox "ไม่มีนักเรียนให้นำเข้าคะแนน", vbOKOnly + vbInformation, "ยกเลิกการนำเข้าข้อมูล"
        Exit Sub
    End If
'Other code
การตรวจสอบบรรทัดสุดท้ายแล้วกำหนดค่าให้กับตัวแปร rg จะต้องมั่นใจว่าโปรแกรมสามารถชี้ไปยังบรรทัดนั้นได้จริง เนื่องจากพบว่าคอลัมน์นั้นเป็นสูตรซึ่งหากมีการคัดลอกเผื่อไว้ก็จะไม่สามารถเข้าถึงบรรทัดที่มีข้อมูลล่าสุดได้จริง จำเป็นต้องหาวิธีแก้ไขมาเอง ติดแล้วค่อยถามกันต่อครับ
Post Reply