: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

การเขียน code VBA เพื่อ copy ข้อมูล

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

การเขียน code VBA เพื่อ copy ข้อมูล

#1

Post by natthaporn »

คำถาม ต้องการ copy ข้อมูลจาก sheet "data1" ถึง "data12"
โดยเลือกเงื่อนไขจาก sheet"report" range "B2"
โดยมี target อยู่ที่เดียวกัน คือ sheet"report" range "B5:Z111"
ซึ่ง code ดังกล่าวสามารถทำงานได้ตามที่ต้องการ แต่อยากจะรบกวนอาจารย์
ช่วยแนะนำ code ที่สั้นและรวบรัดกว่านี้คะ
หมายเหตู ตอนนี้ดิฉันกำลังฝึกการเขียน code VBA เพื่อนำมาใช้กับงานที่ทำอยู่คะ

ขอบคุณคะ

If Sheets("Report").Range("B2") = "Data1" Then
Sheets("Data1").Range("Data1x").Copy
Range("Target").PasteSpecial xlPasteValues
Application.CutCopyMode = False

ElseIf Sheets("Report").Range("B2") = "Data2" Then
Sheets("Data2").Range("Data2x").Copy
Range("Target").PasteSpecial xlPasteValues
Application.CutCopyMode = False

ElseIf Sheets("Report").Range("B2") = "Data3" Then
Sheets("Data3").Range("Data3x").Copy
Range("Target").PasteSpecial xlPasteValues
Application.CutCopyMode = False

ElseIf Sheets("Report").Range("B2") = "Data4" Then
Sheets("Data4").Range("Data4x").Copy
Range("Target").PasteSpecial xlPasteValues
Application.CutCopyMode = False

ElseIf Sheets("Report").Range("B2") = "Data5" Then
Sheets("Data5").Range("Data5x").Copy
Range("Target").PasteSpecial xlPasteValues
Application.CutCopyMode = False

ElseIf…..

Else
Sheets("Report").Range("B2") = "Data12"
Sheets("Data12").Range("Data12x").Copy
Range("Target").PasteSpecial xlPasteValues
Application.CutCopyMode = False

End If

End Sub
Attachments
code VBA เพื่อ copy ข้อมูล.xlsx
(9.82 KiB) Downloaded 60 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#2

Post by snasui »

:D แนบไฟล์ที่ได้เขียน Code ไว้แล้วใน VBE พร้อมข้อมูลตัวอย่างมาด้วยจะได้ทดสอบได้ครับ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#3

Post by natthaporn »

แนบ file มาให้แล้วคะ เป็นข้อมูลจริงแต่ตัดรายละเอียดอื่น ๆ ออก ส่วน code ที่ส่งมาครั้งแรกเป็นตัวอย่างคะ
Attachments
VBA Copy.xls
(296 KiB) Downloaded 79 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#4

Post by snasui »

:D ลองปรับเป็นตามด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
        Sheets(Sheets("ARECL").Range("E2").Value) _
            .Range(Sheets("ARECL").Range("E2").Value & "x").Copy
        Range("Target").PasteSpecial xlPasteValues
        Application.CutCopyMode = False
End Sub
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#5

Post by natthaporn »

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

Sheets(Sheets("ARECL").Range("E2").Value) _
.Range(Sheets("ARECL").Range("E2").Value & "x").Copy
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#6

Post by snasui »

:D จาก Code

Sheets(Sheets("ARECL").Range("E2").Value) _
.Range(Sheets("ARECL").Range("E2").Value & "x").Copy

Sheets("ARECL").Range("E2").Value แทนชื่อชีท
Range(Sheets("ARECL").Range("E2").Value & "x" แทนชื่อของ Range Name

Sheets("ARECL").Range("E2").Value หมายถึง ค่าในเซลล์ E2 ของชีท "ARECL"
Sheets("ARECL").Range("E2").Value & "x" หมายถึงนำค่าในเซลล์ E2 ของชีท "ARECL" มาเชื่อมกับ x เพื่อให้แสดงเป็น Range Name ที่กำหนดไว้ก่อนหน้านี้
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#7

Post by natthaporn »

ดิฉันต้องพยายามกว่าครึ่งวันที่จะเข้าระบบได้
ก่อนอื่นต้องขอบคุณสำหรับคำแนะนำของอาจารย์คะ และดิฉันมีคำถามเพิ่มเติมคะ (พร้อมแนบ file คะ)
1. ต้องการดึงข่อมูลจาก sheet "V1" range "B3:B15" โดยใช่ combobox ดิฉันลองเขียน code ตามที่อาจารย์
post ไว้เมื่อวันที่ 8/1/2012 เวลา 09.28 แต่ไม่สามารถ run ได้ ซึ่งดิฉันคิดว่าอาจจะไม่ใช่ประเด็นเดียวกันก็เลย run ไม่ได้
(เนื่องจากดิฉันอยากทดลองใช้ comcobox จึงไม่ใช้ data validation

2. ต้องการดึงข่อมูลจาก sheet "FSE1" range"C5:C7" โดยใช่เงื่อนไขตาม combobox โดย
ถ้าที่ combobox = Jan ให้ข้อมูล copy มาไว้ที่ column "D5:D7"
ถ้าที่ combobox = Feb ให้ข้อมูล copy มาไว้ที่ column "E5:E7"
ถ้าที่ combobox = Mar ให้ข้อมูล copy มาไว้ที่ column "F5:F7"
รบกวนอาจารย์ช่วยแนะนำ code ด้วยคะ เพราะ code ที่ดิฉันเขียนก็มีลักษณะคล้ายแบบเดิม คือ มี Target 12 Target
ทำให้ code ยาวมากคะ ดังนั้น ดิฉันจึงทดลองนำ code ที่อาจารย์แนะนำมาลองใช้ดู

การที่ดิฉันสนใจเรื่องการเขียน code เนื่องจากงานที่ดิฉันทำอยู่มี data ขนาดใหญ่มากบางครั้งต้อง replace ข้อมูลหลายหมื่น cell
บาง sheet เป็นสูตรแบบ array (เพราะต้องดึงข้อมูลแบบหลายเงื่อนไข) ทำให้ file มีขนาดใหญ่มาก ซึ่งในกรณีหลังนี้ดิฉันจะรบกวน
อาจารย์อีกครั้งหนึ่งคะ
Attachments
VBA Copy 1 to 3.xls
(109 KiB) Downloaded 34 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#8

Post by snasui »

:D กรณีที่ใช้ Validation ทำได้ให้เลือกใช้ Validation ดีกว่าครับ จะได้ง่ายต่อการใช้งานและการแก้ไข หากจะใช้ Control อื่น ๆ ก็ต้องเขียน Code เพิ่ม เพราะต้องส่งค่ากลับไปกลับมา ทำให้เสียเวลาในการจัดทำครับ

สำหรับการถามตอบ VBA จำเป็นที่จะต้องเขียน Code มาก่อนแล้วถามเฉพาะที่ติดปัญหา และต้องแจ้งด้วยว่า Code ที่มีปัญหานั้นอยู่ใน Module ใด ชื่อว่า Procedure ใด เพื่อจะเข้าถึงข้อมูลและปัญหาได้โดยไว
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#9

Post by natthaporn »

ก่อนอื่นต้องขอโทษด้วยที่ตอบอาจารย์ช้าไป เพราะดิฉันเพิ่งแก้ปัญหาการเข้าระบบได้คะ ดิฉันได้แนบ file ตัวอย่างมาให้แล้วคะ
Attachments
VBA Copy 1 to 12.xlsm
(56.06 KiB) Downloaded 30 times
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#10

Post by bank9597 »

:D ผมยังงงกับบางคำถามครับ

ลองเอาโค๊ดสั่งบันทึกข้อมูลไปดูก่อนครับว่าใช้ได้หรือไม่ ส่วนปัญหาอื่นๆ ค่อยทยอยถามไปเรื่อยๆครับ

ลองปรับโค๊ดสั่งบันทึกข้อมูลเป็น :ard:

Code: Select all

Private Sub CommandButton1_Click()
If Sheets("Data").Range("C2") = "R1" Then
    Call Record_R1
End If
If Sheets("Data").Range("C2") = "R2" Then
    Call Record_R2
End If
If Sheets("Data").Range("C2") = "R3" Then
    Call Record_R3
End If
    
End Sub

Sub Record_R1()

Sheets("Data").Range("Source").Copy
    Sheets("R1").Range("C5").PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
Sub Record_R2()

Sheets("Data").Range("Source").Copy
    Sheets("R2").Range("C5").PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
Sub Record_R3()

Sheets("Data").Range("Source").Copy
    Sheets("R3").Range("C5").PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
Attachments
VBA Copy 1 to 12.xlsm
(57.78 KiB) Downloaded 75 times
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#11

Post by natthaporn »

ดิฉันลองเปลี่ยน code ตามที่คุณ bank9597 แนะนำแล้ว ติด error คะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#12

Post by snasui »

:D ติด Error อย่างไร Procedure ใด บรรทัดใด ช่วยแจ้งรายละเอียดด้วยครับ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#13

Post by natthaporn »

ดิฉันต้องขอโทษด้วยคะ เนื่องจาก
1. ดิฉันเปิด file ผิดคะ เพราะดิฉัน click open file หลายครั้ง และยังไม่ได้กด enable (file นี้เคยเป็น V2003) และดิฉันเพิ่งเปลี่ยนเป็น 2010
2. ดิฉันยังไม่คุ้นเคยกับ google chrome คะ เพิ่งเริ่มใช้เมื่อสักครู่นี้เอง
และดิฉันได้ทดลองใหม่แล้ว code คุณbank9597 สามารถ run ได้คะ แต่ดิฉันอยากจะรบกวนเพิ่มเติมขอให้ย่อสูตรได้ไหมคะ เพราะ sheet "Rx" มีถึง 12 sheet คะ ซึ่ง code ดังกล่าวนี้ดีมากสำหรับคนเพิ่งหัดเขียน code แบบดิฉํน เข้าใจง่ายดี เพียงแต่ดิฉันอยากได้ความรู้เพิ่มเติมว่า ถ้า code เดิมเป็นแบบนี้ แล้วเราจะย่อสูตรดังกล่าวนี้ได้อย่างไรคะ

ขอบคุณมากคะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#14

Post by snasui »

:D ลองปรับปรุงมาเองก่อนครับ ติดตรงไหนค่อยมาถามกันครับ พยายามฝึกทำเองก่อน ไม่ควรถามต่อเนื่องกันไปจนกว่าจะได้พยายามแล้วครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#15

Post by bank9597 »

ดิฉันยังไม่คุ้นเคยกับ google chrome คะ เพิ่งเริ่มใช้เมื่อสักครู่นี้เอง
ใช้ง่ายดีครับ ผมใช้ตลอดและไม่หนักเครื่องเท่าไหร่

ให้เปลี่ยนคำว่าสูตร เป็น โค๊ดน่ะครับ สำหรับ VBA แล้ว คำว่าสูตรจะไม่เกี่ยวข้องเลย จะมีแต่คำว่าโค๊ดเท่านั้น ทั้งนี้เพื่อให้ง่ายต่อการเข้าใจของผู้ตอบครับ


ส่วนการย่อโค๊ดให้สั้นนั้น ทำได้ยากครับ เพราะแยกกันเก็บคนละชีทกัน ยิ่งชีทมากก็ยิ่งต้องเพิ่มเงื่อนไขไป ต่อให้ผมรวมโค๊ดไว้ในที่เดียวกัน มันก็ยาวอยู่เป็นธรรมดาครับ

เว้นแต่เราจะมีความสามรถในการเขียนโค๊ดเก่งๆครับ

แล้วผมจะลองดูให้อีกครั้งครับ ระหว่างนี้คงมีท่านอื่นๆ เข้ามาช่วยดูให้อีกครับ
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: การเขียน code VBA เพื่อ copy ข้อมูล

#16

Post by natthaporn »

ขอบคุณทุกท่านมากคะ ดิฉันรู้สึกดีมากเลยคะที่ปัญหาต่างที่ดิฉันหนักใจมาตลอดเกี่ยวกับเรื่องการจัดการ file ที่มีขนาดใหญ่มาก ๆ ได้รับแก้ปัญหาเสียทีคะ
Post Reply