: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

copy ข้ามชีท (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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

copy ข้ามชีท (VBA)

#1

Post by Benmore »

Code: Select all

Sub Button1_Click()
 Sheets("การเบิก").Range("A3:H1000").Copy Sheets("การรับ").Range("A3")
End Sub
ถ้าต้องการให้ copy ข้อมูลโดยมีเงื่อไขว่าเอาแค่ข้อมูลที่มี Status เป็นรับแล้ว ต้องเพิ่มตรงไหนค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
puriwutpokin
Guru
Guru
Posts: 3693
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: copy ข้ามชีท (VBA)

#2

Post by puriwutpokin »

ปรับเป็นตามนี้ครับ

Code: Select all

Sub Button1_Click()
Dim rAll As Range, r As Range
With Sheets("การเบิก")
    Set rAll = .Range("h3", .Range("h" & .Rows.Count).End(xlUp))
    For Each r In rAll
        If InStr(r, "รับแล้ว") Then
            r.Offset(0, -7).Resize(1, 8).Copy
            With .Application.Sheets("การรับ")
                .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
                Application.CutCopyMode = False
            End With
        End If
    Next r
End With
End Sub
:shock: :roll: :D
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: copy ข้ามชีท (VBA)

#3

Post by Benmore »

puriwutpokin wrote:ปรับเป็นตามนี้ครับ

Code: Select all

Sub Button1_Click()
Dim rAll As Range, r As Range
With Sheets("การเบิก")
    Set rAll = .Range("h3", .Range("h" & .Rows.Count).End(xlUp))
    For Each r In rAll
        If InStr(r, "รับแล้ว") Then
            r.Offset(0, -7).Resize(1, 8).Copy
            With .Application.Sheets("การรับ")
                .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
                Application.CutCopyMode = False
            End With
        End If
    Next r
End With
End Sub
ถ้าให้เอาเฉพาะข้อมูลใหม่ ไม่เอาข้อมูลที่ซ้ำกัน ต้องแก้ไขแบบไหนค่ะ
User avatar
puriwutpokin
Guru
Guru
Posts: 3693
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: copy ข้ามชีท (VBA)

#4

Post by puriwutpokin »

ลองแนบไฟล์ตัวอย่าง พร้อมโค้ดมาดูครับ และอธิบายว่าซ้ำจากส่วนไหน เงื่อนไขใดบ้างครับ เพื่อนๆสมาชิกจะได้ทดสอบให้ครับ
:shock: :roll: :D
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: copy ข้ามชีท (VBA)

#5

Post by Benmore »

puriwutpokin wrote:ลองแนบไฟล์ตัวอย่าง พร้อมโค้ดมาดูครับ เพื่อนๆสมาชิกจะได้ทดสอบให้ครับ

Code: Select all

Sub Button14_Click()
Dim rAll As Range, r As Range
With Sheets("การเบิก")
    Set rAll = .Range("h3", .Range("h" & .Rows.Count).End(xlUp))
    For Each r In rAll
        If InStr(r, "ได้รับแล้ว") Then
            r.Offset(0, -7).Resize(1, 8).Copy
            With .Application.Sheets("การรับ")
                .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
                Application.CutCopyMode = False
            End With
        End If
    Next r
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: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: copy ข้ามชีท (VBA)

#6

Post by snasui »

:D ไฟล์ที่จะแนบ Code ได้จะต้องเป็น .xlsm เป็นอย่างน้อยครับ ลองแนบมาใหม่ ถ้าหากไฟล์นี้ไม่ใช่ไฟล์โปรแกรมก็ให้แนบไฟล์โปรแกรมมาด้วยครับ
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: copy ข้ามชีท (VBA)

#7

Post by Benmore »

exc.xlsm
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: copy ข้ามชีท (VBA)

#8

Post by snasui »

:D จะพิจารณา Emp_ID กับ Name หากซ้ำจะไม่นำไปแสดงครับ

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

Code: Select all

With Sheets("การเบิก")
    Set rAll = .Range("h3", .Range("h" & .Rows.Count).End(xlUp))
    For Each r In rAll
        If InStr(r, "รับแล้ว") And Application.CountIfs( _
            Worksheets("การรับ").Range("a3:a" & Rows.Count), r.Offset(0, -7).Value, _
            Worksheets("การรับ").Range("b3:b" & Rows.Count), r.Offset(0, -6).Value) = 0 Then
            r.Offset(0, -7).Resize(1, 8).Copy
            With .Application.Sheets("การรับ")
                .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0) _
                    .PasteSpecial xlPasteValues
                Application.CutCopyMode = False
            End With
        End If
    Next r
End With
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: copy ข้ามชีท (VBA)

#9

Post by Benmore »

ลองนำโค้ดที่แนะนำไปแก้แล้ว พอรันก็ไม่มีอะไรเกิดขึ้นเลยค่ะ เป็นเพราะอะไรค่ะ :shock:
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: copy ข้ามชีท (VBA)

#10

Post by snasui »

:D ควรทดลองกับไฟล์ที่ส่งมาถามว่าได้ผลหรือไม่ อย่างไร

ไฟล์ที่แนบมาล่าสุดข้อมูลอยู่ชีตใด Code อยู่ที่ Procedure ใด ชื่ออะไร ควรตัดมาเฉพาะที่เกี่ยวข้องเท่านั้นจะได้เข้าถึงปัญหาโดยไวครับ
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: copy ข้ามชีท (VBA)

#11

Post by Benmore »

ทำได้แล้ว ขอบคุณมากค่ะ
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: copy ข้ามชีท (VBA)

#12

Post by Benmore »

ขอสอบถามเพิ่มเติมค่ะ
ถ้าต้องการลบข้อมูลในชีทการเบิก แล้วให้ข้อมูลในชีทการรับลบไปด้วยต้องเพิ่มโค้ดตรงไหนค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
puriwutpokin
Guru
Guru
Posts: 3693
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: copy ข้ามชีท (VBA)

#13

Post by puriwutpokin »

ปรับเป็น

Code: Select all

Sub Button1_Click()
Application.ScreenUpdating = False
With Sheets("การเบิก")
    Set rAll = .Range("h3", .Range("h" & .Rows.Count).End(xlUp))
    For Each r In rAll
        If InStr(r, "รับแล้ว") And Application.CountIfs( _
            Worksheets("การรับ").Range("a3:a" & Rows.Count), r.Offset(0, -7).Value, _
            Worksheets("การรับ").Range("b3:b" & Rows.Count), r.Offset(0, -6).Value) = 0 Then
            r.Offset(0, -7).Resize(1, 8).Copy
            With .Application.Sheets("การรับ")
                .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0) _
                    .PasteSpecial xlPasteValues
                Application.CutCopyMode = False
            End With
            r.Offset(0, -7).Resize(1, 8).Delete Shift:=xlUp
        End If
    Next r
End With
Application.ScreenUpdating = True
End Sub
:shock: :roll: :D
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: copy ข้ามชีท (VBA)

#14

Post by Benmore »

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

Re: copy ข้ามชีท (VBA)

#15

Post by snasui »

Benmore wrote:ขอสอบถามเพิ่มเติมค่ะ
ถ้าต้องการลบข้อมูลในชีทการเบิก แล้วให้ข้อมูลในชีทการรับลบไปด้วยต้องเพิ่มโค้ดตรงไหนค่ะ
:D มีวิธีการลบอย่างไร เป็นการลบด้วยมือหรือลบด้วย Code หากลบด้วย Code ช่วยแนบ Code ที่ได้เขียนสำหรับการลบข้อมูลมาด้วยครับ
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: copy ข้ามชีท (VBA)

#16

Post by Benmore »

Code: Select all

Sub Button1_Click()
Application.ScreenUpdating = False
With Sheets("การเบิก")
    Set rAll = .Range("h3", .Range("h" & .Rows.Count).End(xlUp))
    For Each r In rAll
        If InStr(r, "รับแล้ว") And Application.CountIfs( _
            Worksheets("การรับ").Range("a3:a" & Rows.Count), r.Offset(0, -7).Value, _
            Worksheets("การรับ").Range("b3:b" & Rows.Count), r.Offset(0, -6).Value) = 0 Then
            r.Offset(0, -7).Resize(1, 8).Copy
            With .Application.Sheets("การรับ")
                .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0) _
                    .PasteSpecial xlPasteValues
                Application.CutCopyMode = False
            End With
            r.Offset(0, -7).Resize(1, 8).Delete Shift:=xlUp
        End If
    Next r
End With
Application.ScreenUpdating = True
End Sub
ลองใช้โค้ดนี้แล้วค่ะ แต่มันเป็นการ cut ข้อมูลจากชีทการเบิกไปยังชีทการรับ แต่ที่ต้องการคือ ข้อมูลในชีทการเบิกที่มีสถานะเป็นมารับแล้ว จะถูกคัดลอกไปยังชีทการรับ แต่ถ้าข้อมูลในชีทการเบิกที่มีสถานะเป็นมารับแล้วถูกลบออกไปข้อมูลในชีทการรับก็ต้องถูกลบไปด้วยค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: copy ข้ามชีท (VBA)

#17

Post by snasui »

:D Code ตามโพสต์ #16 ไม่มีการ Cut มีแต่การคัดลอกไปวางแล้วลบรายการที่นำไปวาง ก่อนที่จะวางมีการตรวจสอบก่อนว่าไม่มีรายการนั้นในชีต รับแล้ว และเมื่อไม่มีจึงไม่สามารถที่จะลบจากรายการที่ไม่มีได้

หากไม่ใช่ตามวรรคบน ช่วยทำไฟล์ตัวอย่างมาใหม่ ชี้ให้เห็นว่าข้อมูลเติมก่อนดำเนินการเป็นอย่างไร หลังดำเนินการเป็นอย่างไร จะได้สะดวกต่อการทำความเข้าใจครับ
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: copy ข้ามชีท (VBA)

#18

Post by Benmore »

Ex. ข้อมูล ชีท การเบิก
รหัส 0008 นาย ก เบิกเลื้อ1ตัว สถานะ มารับแล้ว
รหัส 0009 นาย ข เบิกเลื้อ2ตัว สถานะ มารับแล้ว
รหัส 0003 นาย ค เบิกเลื้อ4ตัว สถานะ ไม่มารับ
รหัส 0002 นาย ง เบิกเลื้อ5ตัว สถานะ มารับแล้ว

คัดลอกแล้วไปยังชีท การรับ
:ard:
ชีท การรับ
รหัส 0008 นาย ก เบิกเลื้อ1ตัว สถานะ มารับแล้ว
รหัส 0009 นาย ข เบิกเลื้อ2ตัว สถานะ มารับแล้ว
รหัส 0002 นาย ง เบิกเลื้อ5ตัว สถานะ มารับแล้ว

เมื่อ ข้อมูลในชีทการเบิกของนาย ก ถุกลบออกไปข้อมูลในชีทการรับของนาย ก ก็ถูกลบไปด้วย
Ex.
ชีท การเบิก

รหัส 0009 นาย ข เบิกเลื้อ2ตัว สถานะ มารับแล้ว
รหัส 0003 นาย ค เบิกเลื้อ4ตัว สถานะ ไม่มารับ
รหัส 0002 นาย ง เบิกเลื้อ5ตัว สถานะ มารับแล้ว

ชีท การรับ

รหัส 0009 นาย ข เบิกเลื้อ2ตัว สถานะ มารับแล้ว
รหัส 0002 นาย ง เบิกเลื้อ5ตัว สถานะ มารับแล้ว
User avatar
puriwutpokin
Guru
Guru
Posts: 3693
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: copy ข้ามชีท (VBA)

#19

Post by puriwutpokin »

ลองดูตามโค้ดนี้ครับ

Code: Select all

Sub Button1_Click()
Application.ScreenUpdating = False
Dim i As Long
With Sheets("การเบิก")
    For i = 100 To 1 Step -1
If .Range("h" & i).Value = "รับแล้ว" And Application.CountIfs( _
            Worksheets("การรับ").Range("a3:a" & Rows.Count), .Range("h" & i).Offset(0, -7).Value, _
            Worksheets("การรับ").Range("b3:b" & Rows.Count), .Range("h" & i).Offset(0, -6).Value) > 0 Then
            .Range("h" & i).Offset(0, -7).Resize(1, 8).Delete Shift:=xlUp
        End If
    Next i
   With Sheets("การรับ")
 .Range("a3:h" & Application.CountIf(.Range("a3:a" & .Rows.Count), "<>") + 2).ClearContents
    End With
    For i = 1 To 100
If .Range("h" & i).Value = "รับแล้ว" Then
      .Range("h" & i).Offset(0, -7).Resize(1, 8).Copy
             With .Application.Sheets("การรับ")
               .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0) _
                   .PasteSpecial xlPasteValues
                Application.CutCopyMode = False
            End With
       End If
    Next i
End With
End Sub
:shock: :roll: :D
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: copy ข้ามชีท (VBA)

#20

Post by Benmore »

ลองเอาโค้ดไปแก้ไขตามที่บอกแล้วค่ะ แต่เมื่อลบข้อมูลในชีทการเบิก ข้อมูลในชีทการรับก็จะเพิ่มข้อมูลที่เราลบจากชีทการเบิกค่ะ
You do not have the required permissions to view the files attached to this post.
Post Reply