: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 Copy ข้อมูลต่อลงแถวไปเรื่อยๆยังไงครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
chinnapong
Member
Member
Posts: 21
Joined: Wed Aug 08, 2018 8:10 pm

กำหนดVba Copy ข้อมูลต่อลงแถวไปเรื่อยๆยังไงครับ

#1

Post by chinnapong »

Code: Select all

Sub test()
    Columns("A:E").Select
    Selection.Copy
    Sheets("Sheet2").Select
    Columns("A:A").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    Sheets("Sheet1").Select
    Application.CutCopyMode = False
    Range("A1").Select
End Sub
อยากทราบกำหนดค่ายังไงครับ เมื่อมีข้อมูลใหม่ทั้งหมดของ Sheet1 แล้วจาก Sheet1 Copy ไปยัง Sheet2 ที่มีข้อมูลอยู่แล้วนั้นให้ต่อแถวลงมาข้างล้างครับเรื่อยๆครับ และเมื่อSheet2 มีข้อมูลให้นับ หัวข้อ No ให้ + เป็นตัวเลขเรียงกันไปเรื่อยด้วยครับ
Image
ขอบคุณล่วงหน้าครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: กำหนดVba Copy ข้อมูลต่อลงแถวไปเรื่อยๆยังไงครับ

#2

Post by snasui »

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

Code: Select all

'Other code
Dim rngAll As Range
Dim j As Long, r As Range
Dim i As Integer, k As Integer
With Sheets("Sheet1")
    Set rngAll = .Range("e2", .Range("a" & .Rows.Count).End(xlUp))
    i = rngAll.Rows.Count
End With
With Sheets("Sheet2")
    If .Range("a2").Value = "" Then
        j = 0
    Else
        j = .Range("a" & .Rows.Count).End(xlUp).Value
    End If
    With .Range("a" & .Rows.Count).End(xlUp)
        .Offset(1, 1).Resize(i, 5).Value = rngAll.Value
        For k = 1 To i
           .Offset(k, 0).Value = k + j
        Next k
    End With
End With
'Other code
chinnapong
Member
Member
Posts: 21
Joined: Wed Aug 08, 2018 8:10 pm

Re: กำหนดVba Copy ข้อมูลต่อลงแถวไปเรื่อยๆยังไงครับ

#3

Post by chinnapong »

snasui wrote: Tue Oct 13, 2020 7:58 pm :D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
Dim rngAll As Range
Dim j As Long, r As Range
Dim i As Integer, k As Integer
With Sheets("Sheet1")
    Set rngAll = .Range("e2", .Range("a" & .Rows.Count).End(xlUp))
    i = rngAll.Rows.Count
End With
With Sheets("Sheet2")
    If .Range("a2").Value = "" Then
        j = 0
    Else
        j = .Range("a" & .Rows.Count).End(xlUp).Value
    End If
    With .Range("a" & .Rows.Count).End(xlUp)
        .Offset(1, 1).Resize(i, 5).Value = rngAll.Value
        For k = 1 To i
           .Offset(k, 0).Value = k + j
        Next k
    End With
End With
'Other code
ขอบคุณครับผมแต่ผมเจอปัญหาคือเมื่อ Sheet1 มีค่าว่าง มันเอาหัวตารางมาด้วย ถ้าจะไม่เอาหัวตารางของ Sheet1 มาด้วยทำยังไงครับ รูปแนบครับ
Image
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: กำหนดVba Copy ข้อมูลต่อลงแถวไปเรื่อยๆยังไงครับ

#4

Post by snasui »

:D กรุณาปรับ Code มาเองก่อน หากยังติดปัญหาให้แนบไฟล์ล่าสุดที่ได้ปรับ Code เอาไว้เองแล้วมาด้วยจะได้ตอบต่อไปจากนั้นครับ
chinnapong
Member
Member
Posts: 21
Joined: Wed Aug 08, 2018 8:10 pm

Re: กำหนดVba Copy ข้อมูลต่อลงแถวไปเรื่อยๆยังไงครับ

#5

Post by chinnapong »

snasui wrote: Tue Oct 13, 2020 8:44 pm :D กรุณาปรับ Code มาเองก่อน หากยังติดปัญหาให้แนบไฟล์ล่าสุดที่ได้ปรับ Code เอาไว้เองแล้วมาด้วยจะได้ตอบต่อไปจากนั้นครับ
ผมลองปรับแล้วครับอาจารย์ ปัญหาไม่ยอมต่อลงบรรทัดสุดท้ายครับ กับไม่รันนัมเบอร์ครับ กับไม่เอาค่าจากชีท 1 ที่ซ้ำกันมารวมกันกับชีท2ด้วยครับ
ผมเองไม่เก่ง VBA ยังไม่ค่อยเข้าใจครับรบกวนด้วยครับ
ขอบคุณครับ
ตัวอย่าง code :|

Code: Select all

Sub test()
Dim rngAll As Range
Dim j As Long, r As Range
Dim i As Integer, k As Integer
With Sheets("Sheet1")
    Range("A2:J2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Set rngAll = .Range("j2", .Range("a" & .Rows.Count).End(xlUp))
    i = rngAll.Rows.Count
End With
With Sheets("Sheet2")
    Sheets("Sheet2").Select
    Range("B2").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    If .Range("a2").Value = "" Then
        j = 0
    Else
        j = .Range("a" & .Rows.Count).End(xlUp).Value
    End If
    With .Range("a" & .Rows.Count).End(xlUp)
        .Offset(1, 1).Resize(i, 11).Value = rngAll.Value
        For k = 1 To i
           .Offset(k, 0).Value = k + j
        Next k
    End With
    Sheets("Sheet1").Select
End With
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: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: กำหนดVba Copy ข้อมูลต่อลงแถวไปเรื่อยๆยังไงครับ

#6

Post by snasui »

chinnapong wrote: Sat Oct 24, 2020 12:14 pm ลองปรับแล้วครับอาจารย์ ปัญหาไม่ยอมต่อลงบรรทัดสุดท้ายครับ
:D ลบข้อมูลใน Sheet2 ทิ้งให้หมดก่อน เหลือไว้เฉพาะหัวคอลัมน์ครับ

สำหรับการปรับ Code เมื่อ Sheet1 ไม่มี Data คือตามด้านล่าง เมื่อลบข้อมูลตามวรรคก่อนแล้วแก้ไข Code ตามด้านล่างแล้วให้ทดสอบดูใหม่ครับ

Code: Select all

'Other code
With Sheets("Sheet1")
    If .Range("a2").Value = "" Then Exit Sub
    Set rngAll = .Range("j2", .Range("a" & .Rows.Count).End(xlUp))
    i = rngAll.Rows.Count
End With
'Other code
chinnapong wrote: Sat Oct 24, 2020 12:14 pm ไม่เอาค่าจากชีท 1 ที่ซ้ำกันมารวมกันกับชีท2ด้วยครับ
รวมคอลัมน์ไหนบ้าง เขียนไว้แล้วหรือไม่ ถ้ายังไม่เขียนให้เขียนมาเองก่อน ได้เท่าไรก็เท่านั้นแต่จะต้องสอดคล้องกับคำถามครับ
chinnapong
Member
Member
Posts: 21
Joined: Wed Aug 08, 2018 8:10 pm

Re: กำหนดVba Copy ข้อมูลต่อลงแถวไปเรื่อยๆยังไงครับ

#7

Post by chinnapong »

chinnapong wrote: Sat Oct 24, 2020 12:14 pm รวมคอลัมน์ไหนบ้าง เขียนไว้แล้วหรือไม่ ถ้ายังไม่เขียนให้เขียนมาเองก่อน ได้เท่าไรก็เท่านั้นแต่จะต้องสอดคล้องกับคำถามครับ
อ้างอิงจากเมื่อ Sheet1 Column D ตั้งแต่แถวที่ 2 ลงไป ถ้า Sheet2 Column E แถวที่ 2ลงไปมีข้อมูลของ Sheet1 Column D อยู่แล้วให้เอาค่าต่อไปของ Sheet1 Column D ที่ไม่ซ้ำกันเอาข้อมูลมาใส่ Sheet2
ขอแนวทาง Code ตัวอย่างพอจับเดาทางด้วยครับ
ขอบคุณครับ
Image
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: กำหนดVba Copy ข้อมูลต่อลงแถวไปเรื่อยๆยังไงครับ

#8

Post by snasui »

:D กรณีนี้ต้องแก้ไข Code เดิมแทบทั้งหมดเพราะเป็นการ Loop เช็คไปทีละบรรทัด ซึ่งตัวอย่างที่ผมเขียนให้ไปนั้นเป็นการนำข้อมูลใน Sheet1 ไปวางใน Sheet2 พร้อมกันทีเดียวทุกบรรทัด โดยไม่สนใจว่ามีค่าซ้ำหรือไม่ ทั้งนี้เนื่องจากไม่ได้แจ้งมาด้วยว่าหากมีรายการนั้นใน Sheet2 แล้วจะไม่นำรายการนั้นไปวางต่อท้ายข้อมูลใน Sheet2 อีก

Code ด้านล่างนี้เป็นตัวอย่างการ Loop ข้อมูลไปวางแบบเช็ครายบรรทัด หากยังไม่มีรายการนั้นใน Sheet2 ให้นำไปวางต่อท้ายข้อมูลเดิมและให้ลำดับที่ข้อมูลด้วย

Code: Select all

Dim rngAll As Range
Dim j As Long, r As Range
Dim k As Integer
With Sheets("Sheet1")
    If .Range("a2").Value = "" Then Exit Sub
    Set rngAll = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
End With
With Sheets("Sheet2")
    If .Range("a2").Value = "" Then
        j = 0
    Else
        j = .Range("a" & .Rows.Count).End(xlUp).Value
    End If
    For Each r In rngAll
        If Application.CountIf(.Range("e:e"), r.Offset(0, 3).Value) = 0 Then
            j = j + 1
            With .Range("a" & .Rows.Count).End(xlUp)
                .Offset(1, 1).Resize(1, 10).Value = r.Resize(1, 10).Value
                .Offset(1, 0).Value = j
            End With
        End If
    Next r
End With
chinnapong
Member
Member
Posts: 21
Joined: Wed Aug 08, 2018 8:10 pm

Re: กำหนดVba Copy ข้อมูลต่อลงแถวไปเรื่อยๆยังไงครับ

#9

Post by chinnapong »

snasui wrote: Sun Oct 25, 2020 8:20 am :D กรณีนี้ต้องแก้ไข Code เดิมแทบทั้งหมดเพราะเป็นการ Loop เช็คไปทีละบรรทัด ซึ่งตัวอย่างที่ผมเขียนให้ไปนั้นเป็นการนำข้อมูลใน Sheet1 ไปวางใน Sheet2 พร้อมกันทีเดียวทุกบรรทัด โดยไม่สนใจว่ามีค่าซ้ำหรือไม่ ทั้งนี้เนื่องจากไม่ได้แจ้งมาด้วยว่าหากมีรายการนั้นใน Sheet2 แล้วจะไม่นำรายการนั้นไปวางต่อท้ายข้อมูลใน Sheet2 อีก

Code ด้านล่างนี้เป็นตัวอย่างการ Loop ข้อมูลไปวางแบบเช็ครายบรรทัด หากยังไม่มีรายการนั้นใน Sheet2 ให้นำไปวางต่อท้ายข้อมูลเดิมและให้ลำดับที่ข้อมูลด้วย

Code: Select all

Dim rngAll As Range
Dim j As Long, r As Range
Dim k As Integer
With Sheets("Sheet1")
    If .Range("a2").Value = "" Then Exit Sub
    Set rngAll = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
End With
With Sheets("Sheet2")
    If .Range("a2").Value = "" Then
        j = 0
    Else
        j = .Range("a" & .Rows.Count).End(xlUp).Value
    End If
    For Each r In rngAll
        If Application.CountIf(.Range("e:e"), r.Offset(0, 3).Value) = 0 Then
            j = j + 1
            With .Range("a" & .Rows.Count).End(xlUp)
                .Offset(1, 1).Resize(1, 10).Value = r.Resize(1, 10).Value
                .Offset(1, 0).Value = j
            End With
        End If
    Next r
End With
:thup: ขอบคุณครับอาจารย์ พอจะมีการอธิบายการทำงานของ code แต่ละบรรทัดได้ไหมครับ หรือแหล่งความรู้เริ่มต้นเบสิกเขียน VBA
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: กำหนดVba Copy ข้อมูลต่อลงแถวไปเรื่อยๆยังไงครับ

#10

Post by snasui »

:D ลองค่อย ๆ ศึกษาตาม Link นี้ viewtopic.php?f=9&t=411

เริ่มที่หัวข้อ 208 เป็นต้นไปเฉพาะที่เกี่ยวข้องกับ VBA ครับ
Post Reply