Page 1 of 1

ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Thu Oct 25, 2012 4:47 pm
by lumidoll
อยากได้สูตร vba ใน excel ในการ Copy ข้อมูลค่ะ จากตัวอย่างที่ส่งมา ต้องการให้ Column N copy รหัสลงมาทุกบรรทัดของข้อความ และเมื่อเริ่ม ข้อความใหม่ให้ copy รหัสใหม่ของข้อความนั้นลงมา
เช่น XL4560 ต้อง copy ลงมาอีก 3 บรรทัด
AK4505 ต้อง copy ลงมาอีก 3 บรรทัด
SK3900 ต้อง copy ลงมาอีก 5 บรรทัด
ข้่อมูลมีจำนวนมาก ต้องการนำไปจัดเรียงใหม่ในอีก Sheet ค่ะ Code อื่นเขียนได้แล้วค่ะ แต่ติดอยู่แค่อันนี้อันเดียว รบกวนด้วยนะคะ

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Thu Oct 25, 2012 4:55 pm
by snasui
:D ลองเขียนมาเองก่อนครับ เขียนไม่เป็นก็ลองบันทึก Macro มาดูก่อนติดตรงไหนค่อยถามกันตามกฎข้อ 5 ด้านบนครับ สำหรับไฟล์แนบควรเป็น .xlsm เนื่องจากต้องการใช้ Macro จึงควรแนบไฟล์ที่สามารถแนบ Macro ได้ครับ

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Thu Oct 25, 2012 11:51 pm
by nattasiray
ทำการบันทึกแมโครตามขั้นตอนนี้่

1 ไปที่ Status bar มุมซ้ายล่างของหน้าต่างไมโครซอฟต์เอ็กเซล
2 คลิกปุ่มบันทึกแมโคร
3 ตั้งชื่อ FillDataIntoBlankCell
4 คลิก OK
5 คลิกเซลล์ N3
6 กดแป้น Ctrl+* เพื่อเลือกตารางข้อมูล
7 กดแป้น Ctrl+G เพื่อเรียกกรอบโต้ตอบ Go to
8 คลิกปุ่ม Special...
9 คลิกที่ Blank
10 คลิกปุ่ม OK
11 พิมพ์เครื่องหมาย =
12 กดแป้นเลื่อนเคอร์เซอร์ขึ้น 1 ครั้ง
13 กดแป้น Ctrl+Enter
14 กดแป้น Ctrl+* เพื่อเลือกตารางข้อมูล
15 กดแป้น Ctrl+C
16 คลิกขวาที่เซลล์ N3
17 คลิกเลือก Paste Special
18 คลิกเลือก Values
19 กดแป้น ESC
20 คลิกปุ่ม Stop ที่ Status bar มุมซ้ายล่างของหน้าต่างไมโครซอฟต์เอ็กเซล

การดูโค้ด
กดแป้น Alt+F8
คลิกชื่อแมโคร FillDataIntoBlankCell
คลิกปุ่ม Edit
ตัดต่อโค้ดเอาเองครับ เพราะโค้ดที่ได้จากการบันทึกแมโครยังมีโค้ดที่ไม่จำเป็นต่อการใช้งานอยู่

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

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Mon Oct 29, 2012 9:42 am
by lumidoll
File ใหญ่มากค่ะ เกิน 300 kb ทำอย่างไรดีคะ zip ไปได้หรือเปล่า

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Mon Oct 29, 2012 10:16 am
by snasui
:D ไฟล์ตัวอย่างไม่ควรใหญ่ถึงขนาดนั้นครับ อ่านกฎข้อ 4 ด้านบนประกอบครับ :roll:

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Mon Oct 29, 2012 5:33 pm
by lumidoll
ส่ง File ที่เป็น .xlsm มาให้แล้วค่ะ Sheet Control มีการเขียน Code มาให้แล้วค่ะ
Sheet Data เป็นข้่อมูลที่ Load มาค่ะ
ส่วน sheet Template เป็นข้อมูลที่ได้หลังการ run vba แล้ว
ช่องสีเหลืองคือต้องการให้ข้อมูลด้านบนถูก copy มาวาง ตามบรรทัดที่ว่าง
แล้วเมื่อเจอข้อมูลใหม่ก็ให้ Copy ข้อมูลนั้นต่อลงมา ไปเรื่อย ๆ
แต่ตอนนี้ พอเขียน vba แล้่วข้อมูลดึงมาแค่บรรทัดเดียวเท่านั้น
รบกวนด้วยนะคะ

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Mon Oct 29, 2012 9:02 pm
by snasui
:D Code ที่เขียนไว้แล้วชื่ออะไร อยู่ที่ Module ไหนครับ

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Tue Oct 30, 2012 8:12 am
by lumidoll
Private Sub CmdData_Click()
If r = 0 Then
r = 20000
End If


Sheet2.Range("A1", "BR" & r).ClearFormats

Dim n As Long

n = Sheet2.Range("O1:O2").Cells.Insert

r = 24

For i = 1 To 20000

If Trim(Sheet2.Cells(i, 1)) <> "" And Trim(Sheet2.Cells(i, 7)) <> "" And Trim(Sheet2.Cells(i, 19)) <> "" And Len(Trim(Sheet2.Cells(i, 15))) = 6 Then

Sheet2.Cells(r, 15) = Sheet2.Cells((r - 1), 15)

r = r + 1

End If
Next
End Sub

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Tue Oct 30, 2012 10:01 am
by snasui
:lol: Code ทียกมานั้นไม่ใช่ครับ ที่ถูกคือตามด้านล่างและผมได้ปรับให้แล้ว ลองทดสอบดูครับ

Code: Select all

Private Sub CmdStart_Click()
    
    Sheet3.Cells(1, 1) = "Doc Date"
    Sheet3.Cells(1, 2) = "Payee Name"
    Sheet3.Cells(1, 3) = "Register No"
    Sheet3.Cells(1, 4) = "Product"
    Sheet3.Cells(1, 5) = "Amount"
       
    
    Sheet3.Range("A1", "E1").HorizontalAlignment = xlCenter
    Sheet3.Range("A1", "E1").Interior.Color = RGB(0, 160, 198)
    Sheet3.Range("A1", "E1").Font.Bold = True
    
    r = 2
    
    For i = 1 To 20000 Step 1
        If Trim(Sheet2.Cells(i, 1)) <> "" And Trim(Sheet2.Cells(i, 7)) <> "" And Trim(Sheet2.Cells(i, 19)) <> "" And Len(Trim(Sheet2.Cells(i, 1))) = 16 And Trim(Sheet2.Cells(i, 1)) <> "Transaction Date" Then
            Sheet3.Cells(r, 1) = Mid(Sheet2.Cells(i, 1), 1, 10)
            Sheet3.Cells(r, 2) = Trim(Sheet2.Cells(i, 7))
            Sheet3.Cells(r, 3) = Trim(Sheet2.Cells(i, 15))
            If Sheet3.Cells(r, 3) = "" Then
                Sheet3.Cells(r, 3) = Sheet3.Cells(r, 3).End(xlUp)
            End If
            Sheet3.Cells(r, 4) = Trim(Sheet2.Cells(i, 19))
            Sheet3.Cells(r, 5) = Trim(Sheet2.Cells(i, 22))
            
                  
            r = r + 1
            
        End If
      Next
    End Sub
สำหรับการ Post Code ให้แสดงเป็น Code เพื่อสะดวกในการอ่านและการ Copy ไปใช้ดูตัวอย่างที่นี่ครับ http://www.snasui.com/viewtopic.php?f=3&t=1187

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Tue Oct 30, 2012 10:32 am
by lumidoll
ขอบคุณมากเลยค่ะ จะลองดูนะคะ

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Tue Oct 30, 2012 11:06 am
by lumidoll
ได้แล้วค่ะ ขอบพระคุณมากเลย และต้องขอโทษด้วยนะคะ
ยังใหม่อยู่ค่ะ กะลังเรียนรู้ บางอย่างอาจไม่ตรงตามคำขอเท่าไหร่

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Tue Oct 30, 2012 11:27 am
by snasui
:D
lumidoll wrote:บางอย่างอาจไม่ตรงตามคำขอเท่าไหร่
หากเขียนมาเองก็ควรทราบครับว่า Code ไหนต้องการจะทำอะไร

Code ที่ถามควรเป็น Code ที่เขียนมาเองแล้วติดปัญหาครับ เพื่อเป็นการให้เกียรติและปฏิบัติตามกฎของฟอรัม พึงระวังในการนำ Code ที่ไม่เกี่ยวกับที่เป็นปัญหามาถามครับ

Code ที่ถามควรเป็น Code ที่เขียนมาเองแล้วติดปัญหา

Posted: Tue Oct 30, 2012 11:40 am
by lumidoll
Code ที่ถามเป็น Code ที่เขียนเองแล้วติดปัญหาค่ะ แต่บังเอิญไม่ได้เรียนทางด้านนี้โดยตรง
จบบัญชีมาค่ะ แต่มาศึกษาเอง เปิดหนังสือบ้างอ่านใน Internet บ้างค่ะ
Code ที่ให้ตัวอย่างไป คืออยากให้ Code ปรับข้อมูลที่ฐานข้อมูลก่อนค่ะ ค่อยนำไปที่
Sheet Template (คือ Copy วางที่ฐานข้อมูลเลย) แต่ที่อาจารย์ (ขออนุญาตเรียกแบบนี้นะคะ) เขียนมาผลขอมันไป
ปรากฎที่ Sheet Template เลย ซึ่งดิฉันเองก็สับสนว่าจะเขียนให้ผลออกมาที่ไหนถึงจะดีที่สุด
เลยเลือกจัดการฐานข้อมูลก่อน จึงจะนำไปที่ Template แต่ของอาจารย์ง่ายกว่าเยอะเลย

ขอบคุณอีกครั้งค่ะ และอาจจะมีถามมารบกวนอีกนะคะ

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Tue Oct 30, 2012 12:03 pm
by snasui
:D รับทราบครับ ขอชื่นชมในความพยายามครับ ผมจบบัญชีทั้งปริญญาตรีและปริญญาโท ไม่ได้จบคอมพิวเตอร์และไม่เคยเรียนการเขียนโปรแกรมกับท่านใดหรือกับสถาบันใดเช่นกันครับ :P

Re: ขอสูตร vba ใน excel การ copy ข้อมูล

Posted: Tue Oct 30, 2012 12:17 pm
by lumidoll
เก่งมาก ๆ เลยค่ะ เคยเอาโจทย์นี้ไปถามวิทยากรที่มาสอน Excel ให้กับบริษัทฯ
เค้าให้คำตอบไม่ได้ ดิฉันเป็นมือใหม่หัดเขียน ขอฝากเนื้อฝากตัวด้วยค่ะ