:!: โปรดทราบ Image
    1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ดครับ Image
    2. การสมัครสมาชิกเพื่อโพสต์คำถาม ดาวน์โหลดไฟล์แนบไปศึกษา ทำตามขั้นตอนด้านล่างครับ
      1. สมัครสมาชิก ดูขั้นตอนตาม Link นี้ครับ => สมัครสมาชิก กรณีลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่นี่ครับ => Reset รหัสผ่านImage
      2. Login เข้าระบบโดยคลิก Login ตรงมุมขวาบนของหน้านี้ Image กรณีมีปัญหาในการเข้าใช้งาน คลิก Link นี้เพื่อแจ้งผู้ดูแลระบบครับ => ติดต่อผู้ดูแลระบบ
    3. เมื่อ Login แล้วสามารถกำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษได้ที่ Link นี้ครับ => ตั้งค่าส่วนตัว Image
    4. วิธีการตั้งและตอบกระทู้ดูได้ที่ Link นี้ครับ => วิธีการตั้งและตอบกระทู้ Image
    5. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ Link นี้ครับ => จัดรูปแบบตัวอักษร และสามารถกำหนดขนาดตัวอักษรใน Browser ได้ที่นี่ครับ ==> กำหนดขนาดตัวอักษรใน Browser Image

copy ข้ามชีท (VBA)

ฟอรั่มถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถาม-ตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบ ต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. อธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. ควรแนบตัวอย่างไฟล์มาที่ฟอรั่มนี้เพื่อเพิ่มความสะดวกในการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่น นอกจากนี้ไม่ควรแนบไฟลที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. สำหรับคำถามเกี่ยวกับ VBA ให้ลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน ควรโพสต์ Code ให้แสดงเป็น Code เพื่อสะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. แจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

copy ข้ามชีท (VBA)

#1

Postby Benmore » Wed Nov 01, 2017 9:43 am

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
Gold
Gold
Posts: 1010
Joined: Fri Jan 04, 2013 9:49 pm

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

#2

Postby puriwutpokin » Wed Nov 01, 2017 1:46 pm

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

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
:roll: สูตรที่ต้องกด Ctrl+Shift+Enter เพื่อให้สูตร Array นั้นทำงาน

Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

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

#3

Postby Benmore » Wed Nov 01, 2017 2:41 pm

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
Gold
Gold
Posts: 1010
Joined: Fri Jan 04, 2013 9:49 pm

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

#4

Postby puriwutpokin » Wed Nov 01, 2017 4:15 pm

ลองแนบไฟล์ตัวอย่าง พร้อมโค้ดมาดูครับ และอธิบายว่าซ้ำจากส่วนไหน เงื่อนไขใดบ้างครับ เพื่อนๆสมาชิกจะได้ทดสอบให้ครับ
:roll: สูตรที่ต้องกด Ctrl+Shift+Enter เพื่อให้สูตร Array นั้นทำงาน

Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

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

#5

Postby Benmore » Wed Nov 01, 2017 4:20 pm

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: 22369
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#6

Postby snasui » Wed Nov 01, 2017 10:28 pm

:D ไฟล์ที่จะแนบ Code ได้จะต้องเป็น .xlsm เป็นอย่างน้อยครับ ลองแนบมาใหม่ ถ้าหากไฟล์นี้ไม่ใช่ไฟล์โปรแกรมก็ให้แนบไฟล์โปรแกรมมาด้วยครับ

Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

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

#7

Postby Benmore » Thu Nov 02, 2017 8:30 am

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: 22369
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#8

Postby snasui » Thu Nov 02, 2017 8:25 pm

: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

Postby Benmore » Thu Nov 02, 2017 10:12 pm

ลองนำโค้ดที่แนะนำไปแก้แล้ว พอรันก็ไม่มีอะไรเกิดขึ้นเลยค่ะ เป็นเพราะอะไรค่ะ :shock:
You do not have the required permissions to view the files attached to this post.

User avatar
snasui
Site Admin
Site Admin
Posts: 22369
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#10

Postby snasui » Thu Nov 02, 2017 10:21 pm

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

ไฟล์ที่แนบมาล่าสุดข้อมูลอยู่ชีตใด Code อยู่ที่ Procedure ใด ชื่ออะไร ควรตัดมาเฉพาะที่เกี่ยวข้องเท่านั้นจะได้เข้าถึงปัญหาโดยไวครับ

Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

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

#11

Postby Benmore » Thu Nov 02, 2017 10:47 pm

ทำได้แล้ว ขอบคุณมากค่ะ

Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

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

#12

Postby Benmore » Tue Nov 07, 2017 9:53 am

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

User avatar
puriwutpokin
Gold
Gold
Posts: 1010
Joined: Fri Jan 04, 2013 9:49 pm

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

#13

Postby puriwutpokin » Tue Nov 07, 2017 10:39 am

ปรับเป็น

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
:roll: สูตรที่ต้องกด Ctrl+Shift+Enter เพื่อให้สูตร Array นั้นทำงาน

Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

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

#14

Postby Benmore » Tue Nov 07, 2017 1:16 pm

ลองเอาโค้ดไปปรับแล้วค่ะ แต่มันเป็นว่าเมื่อกดปุ่ม แล้วข้อมูลที่รับแล้วถูก 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: 22369
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#15

Postby snasui » Tue Nov 07, 2017 6:37 pm

Benmore wrote:ขอสอบถามเพิ่มเติมค่ะ
ถ้าต้องการลบข้อมูลในชีทการเบิก แล้วให้ข้อมูลในชีทการรับลบไปด้วยต้องเพิ่มโค้ดตรงไหนค่ะ


:D มีวิธีการลบอย่างไร เป็นการลบด้วยมือหรือลบด้วย Code หากลบด้วย Code ช่วยแนบ Code ที่ได้เขียนสำหรับการลบข้อมูลมาด้วยครับ

Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

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

#16

Postby Benmore » Wed Nov 08, 2017 4:18 pm

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: 22369
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#17

Postby snasui » Wed Nov 08, 2017 6:41 pm

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

หากไม่ใช่ตามวรรคบน ช่วยทำไฟล์ตัวอย่างมาใหม่ ชี้ให้เห็นว่าข้อมูลเติมก่อนดำเนินการเป็นอย่างไร หลังดำเนินการเป็นอย่างไร จะได้สะดวกต่อการทำความเข้าใจครับ

Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

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

#18

Postby Benmore » Thu Nov 09, 2017 8:17 am

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
Gold
Gold
Posts: 1010
Joined: Fri Jan 04, 2013 9:49 pm

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

#19

Postby puriwutpokin » Thu Nov 09, 2017 3:07 pm

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

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
:roll: สูตรที่ต้องกด Ctrl+Shift+Enter เพื่อให้สูตร Array นั้นทำงาน

Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

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

#20

Postby Benmore » Thu Nov 09, 2017 8:38 pm

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


Return to “Excel”

Who is online

Users browsing this forum: Google [Bot], Yahoo [Bot] and 27 guests