: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 & Paste ข้อมูลเฉพาะบรรทัดที่มีค่าที่ต้องการ

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
napaporn.a
Member
Member
Posts: 9
Joined: Sat Sep 17, 2011 10:12 pm

Copy & Paste ข้อมูลเฉพาะบรรทัดที่มีค่าที่ต้องการ

#1

Post by napaporn.a »

รบกวนสอบถามค่ะ
หากต้องการเขียน code ที่ copy & Paste เฉพาะบรรทัดที่มีค่าที่ต้องการต้องเขียน code อย่างไรคะ
เช่น มีค่าตามตารางที่ 1.

ตารางที่ 1.
ID Name Position
1111 AAAA Manager
2222 BBBB Manager
3333 CCCC Admin
4444 DDDD Admin
5555 EEEE Admin
6666 FFFF Asst. Manager
7777 GGGG Asst. Manager
8888 HHHH Admin
9999 IIII Admin

ต้องการ copy ข้อมูลของ row ที่มีค่า position เท่ากับ "Manager" และ "Asst. Manager" มาต่อข้อมูลบรรทัดสุดท้าย
ของตารางที่ 1. แล้วเปลี่ยน position เป็น "Head Office" ได้ค่าตามตารางที่ 2.

ID Name Position
1111 AAAA Manager
2222 BBBB Manager
3333 CCCC Admin
4444 DDDD Admin
5555 EEEE Admin
6666 FFFF Asst. Manager
7777 GGGG Asst. Manager
8888 HHHH Admin
9999 IIII Admin
1111 AAAA Head Office
2222 BBBB Head Office
6666 FFFF Head Office
7777 GGGG Head Office

ต้องเขียน code อย่างไรคะ
รบกวนด้วยนะคะ
ขอบคุณค่ะ :D
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: Copy & Paste ข้อมูลเฉพาะบรรทัดที่มีค่าที่ต้องการ

#2

Post by snasui »

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

Code: Select all

Sub PasteData()
Dim r As Range, ra As Range
Set ra = ActiveSheet.Range("C2", _
    ActiveSheet.Range("C2").End(xlDown))
For Each r In ra
    If r = "Manager" Or r = "Asst. Manager" Then
        Range("A2").End(xlDown).Offset(1, 0).Resize(1, 3) _
            = r.Offset(0, -2).Resize(1, 3).Value
        Range("C2").End(xlDown) = "Head Office"
    End If
Next r
End Sub
napaporn.a
Member
Member
Posts: 9
Joined: Sat Sep 17, 2011 10:12 pm

Re: Copy & Paste ข้อมูลเฉพาะบรรทัดที่มีค่าที่ต้องการ

#3

Post by napaporn.a »

รบกวนสอบถามเพิ่มเติมค่ะ
Range("A2").End(xlDown).Offset(1, 0).Resize(1, 3) _
= r.Offset(0, -2).Resize(1, 3).Value
หมายความว่าอะไรเหรอคะ รบกวนอธิบายค่ะ อยากเข้าใจ code มากขึ้นค่ะ
napaporn.a
Member
Member
Posts: 9
Joined: Sat Sep 17, 2011 10:12 pm

Re: Copy & Paste ข้อมูลเฉพาะบรรทัดที่มีค่าที่ต้องการ

#4

Post by napaporn.a »

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

ID Name Position
1111 AAAA Manager
2222 BBBB Manager
3333 CCCC Admin
4444 DDDD Admin
5555 EEEE Admin
6666 FFFF Asst. Manager
7777 GGGG Asst. Manager
8888 HHHH Admin
9999 IIII Admin
A111 AAAA Head Office
B222 BBBB Head Office
F666 FFFF Head Office
G777 GGGG Head Office

เปลี่ยนตัวแรกของ ID จาก 1 เป็น A จาก 2 เป็น B จาก 6 เป็น F จาก 7 เป็น G ค่ะ
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: Copy & Paste ข้อมูลเฉพาะบรรทัดที่มีค่าที่ต้องการ

#5

Post by snasui »

napaporn.a wrote:Range("A2").End(xlDown).Offset(1, 0).Resize(1, 3) _
= r.Offset(0, -2).Resize(1, 3).Value
หมายความว่าอะไรเหรอคะ
เป็นการกำหนดค่าให้กับ Range("A2").End(xlDown).Offset(1, 0).Resize(1, 3) ว่าให้มีค่าเท่ากับค่าใน r.Offset(0, -2).Resize(1, 3)

Range("A2").End(xlDown).Offset(1, 0).Resize(1, 3) หมายถึง

จาก Range("A2") ให้ไปยังตัวที่อยู่ด้านล่างสุดในคอลัมน์เดียวกันแล้วเลื่อนจากตัวล่างสุดลงไปอีก 1 เซลล์จากนั้นปรับขนาดเป็นสูง 1 เซลล์ กว้าง 3 เซลล์
napaporn.a wrote:และถ้าต้องการเปลี่ยนผลลัพธ์ที่ได้เป็นดังตาราง ต้องแก้ไข code ส่วนไหนคะ
ลองทำดูแล้วแต่ไม่สำเร็จ รบกวนด้วยนะคะ

ID Name Position
...
B222 BBBB Head Office
F666 FFFF Head Office
G777 GGGG Head Office

เปลี่ยนตัวแรกของ ID จาก 1 เป็น A จาก 2 เป็น B จาก 6 เป็น F จาก 7 เป็น G ค่ะ
ลองส่ง Code ที่ลองทำเองแล้วมาดูกันครับ จะได้ปรับต่อไปจากนั้น
napaporn.a
Member
Member
Posts: 9
Joined: Sat Sep 17, 2011 10:12 pm

Re: Copy & Paste ข้อมูลเฉพาะบรรทัดที่มีค่าที่ต้องการ

#6

Post by napaporn.a »

ลองเขียนแบบนี้ ได้ผลออกมาแล้วค่ะ
run แล้วรู้สึกว่าช้าๆ ไม่แน่ใจว่าจะมีวิธีที่ทำให้การ run เร็วกว่านี้หรือเปล่าคะ

Sub PasteData()
Dim r As Range, ra As Range

Set ra = ActiveSheet.Range("E20", _
ActiveSheet.Range("E20").End(xlDown))

For Each r In ra

If r = "Manager" Or r = "Asst. Manager" Then
Range("A2").End(xlDown).Offset(1, 0).Resize(1, 3) _
= r.Offset(0, -2).Resize(1, 3).Value
Range("C2").End(xlDown) = "Head Office"

lcode = Left(Range("A2").End(xlDown), 1)
rcode = Right(Range("A2").End(xlDown), 3)

If lcode = "1" Then
Range("A2").End(xlDown) = "A" & rcode
Else
If lcode = "2" Then
Range("A2").End(xlDown) = "B" & rcode
Else
If lcode = "6" Then
Range("A2").End(xlDown) = "F" & rcode
Else
If lcode = "7" Then
Range("A2").End(xlDown) = "G" & rcode
End If
End If
End If
End If
End If
Next r
End Sub
ขอบคุณค่ะ
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: Copy & Paste ข้อมูลเฉพาะบรรทัดที่มีค่าที่ต้องการ

#7

Post by snasui »

:D ลองดู Code ตามด้านล่างครับว่าเร็วกว่าเดิมหรือไม่

Code: Select all

Sub PasteData()
Dim r As Range, ra As Range, s As Range
Set ra = Range("C2", Range("C2").End(xlDown))
For Each r In ra
    If r = "Manager" Or r = "Asst. Manager" Then
        Range("A2").End(xlDown).Offset(1, 0).Resize(1, 3) _
            = r.Offset(0, -2).Resize(1, 3).Value
        Range("C2").End(xlDown) = "Head Office"
        Set s = r.End(xlDown).Offset(0, -2)
        Select Case Left(s, 1)
            Case 1: s = "A" & Right(s, 4)
            Case 2: s = "B" & Right(s, 4)
            Case 6: s = "F" & Right(s, 4)
            Case 7: s = "G" & Right(s, 4)
        End Select
    End If
Next r
End Sub
napaporn.a
Member
Member
Posts: 9
Joined: Sat Sep 17, 2011 10:12 pm

Re: Copy & Paste ข้อมูลเฉพาะบรรทัดที่มีค่าที่ต้องการ

#8

Post by napaporn.a »

ขอบคุณนะคะ ทำได้เรียบร้อยแล้วค่ะ :D
Post Reply