: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 เพื่อหา Conditionของ Column และ 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
sarapao555
Member
Member
Posts: 4
Joined: Thu Aug 06, 2015 5:58 am

สอบถามเขียน Code เพื่อหา Conditionของ Column และ Copy ทั้งแถว ครับ

#1

Post by sarapao555 »

สวัสดีครับ
ผมได้ลองเขียน Code Macro ของ Excel ดูครับ
1.มีไฟล์ข้อมูลชื่อไฟล์ data อยากจะค้นหาเลขในคอลัม B โดยใช้เงื่อนที่กำหนดครับ เช่น >0
2.แล้วทำการ Copy ทั้งแถว มา Paste ไปยัง Sheet2 ของอีกไฟล์ ชื่อไฟล์ Book1 ครับ

แต่ลองเขียนแล้ว Loop ไม่หมุนครับ
นี่ Code ครับ

Code: Select all

Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+r
'
Windows("data.xlsx").Activate

Dim i As Integer

For i = 1 To 1000

If Cells(i, 2).Value > 0 Then

Windows("data.xlsx").Activate
Rows(i).Select
Selection.Copy

Windows("Book1.xlsx").Activate
Worksheets("Sheet2").Activate

Rows(i).Select
ActiveSheet.Paste
Application.CutCopyMode = False

End If

Next i

End Sub

จากลองทดสอบว่าใช้ Loop ถูกต้องไหม
โดยใช้ Code นี้ครับ

Code: Select all

Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+r
'
Windows("data.xlsx").Activate

Dim i As Integer
Dim x As Integer

For i = 1 To 1000

If Cells(i, 2).Value > 0 Then
Windows("data.xlsx").Activate
Rows(i).Select
Selection.Copy

Windows("Book1.xlsx").Activate
Worksheets("Sheet2").Activate

x = i + 1
Rows(x).Select
ActiveSheet.Paste
Application.CutCopyMode = False

End If

Next i

End Sub
ปรากฎว่า Copy + Paste ได้ครับ Loop หมุน
แต่แถวเคลื่อนเพิ่มมา 1 แถว ครับ

พอดีผมเป็นมือใหม่ เริ่มหัดเขียนcode ครับ
อยากจะรบกวนขอคำแนะนำด้วยครับ ว่าควรจะดัดแปลงแก้ไข Code ยังไงให้ Loop หมุนได้ แถวไม่เคลื่อน ครับ
ขอบคุณครับ
Attachments
Book1.xlsx
ไฟล์ Book1
(8.16 KiB) Downloaded 7 times
data.xlsx
ไฟล์ data
(8.89 KiB) Downloaded 7 times
Last edited by sarapao555 on Sat Aug 08, 2015 11:20 pm, edited 1 time in total.
sarapao555
Member
Member
Posts: 4
Joined: Thu Aug 06, 2015 5:58 am

Re: สอบถามเขียน Code เพื่อหา Conditionของ Column และ Copy ทั้งแถว ครับ

#2

Post by sarapao555 »

รูปภาพประกอบ ครับ
ขอโทษจริงๆ ครับ ใส่รูปไปพร้อมตั้งกระทู้แต่พอกดแล้วเพิ่มไม่ได้ ครับ
Attachments
book1_1.jpg
book1_1.jpg (68.31 KiB) Viewed 113 times
ไฟล์ data_1.jpg
ไฟล์ data_1.jpg (90.6 KiB) Viewed 113 times
ไม่หมุน Loop.JPG
ไม่หมุน Loop.JPG (64.33 KiB) Viewed 113 times
sarapao555
Member
Member
Posts: 4
Joined: Thu Aug 06, 2015 5:58 am

Re: สอบถามเขียน Code เพื่อหา Conditionของ Column และ Copy ทั้งแถว ครับ

#3

Post by sarapao555 »

รูปสุดท้าย ครับ
Attachments
book1 เคลื่อน1แถว_1.jpg
book1 เคลื่อน1แถว_1.jpg (76.72 KiB) Viewed 113 times
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: สอบถามเขียน Code เพื่อหา Conditionของ Column และ Copy ทั้งแถว ครับ

#4

Post by DhitiBank »

ไม่พบมาโครในไฟล์ Book1 ครับ หากจะใส่มาโครด้วยต้องบันทึกไฟล์เป็นนามสกุล xlsm หรือ xlsb ครับ

สำหรับโค้ด หากทำงานกับไฟล์หลายไฟล์ควรใส่ parent ในการอ้างอิงตำแหน่งด้วยครับ ลองปรับเป็นแบบนี้ครับ

Code: Select all

Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+r
'
Windows("data.xlsx").Activate

Dim i As Integer
Dim x As Integer

For i = 1 To 1000
        If Workbooks("data.xlsx").Sheets(1).Cells(i, 2).Value > 0 Then
                Windows("data.xlsx").Activate
                Rows(i).Select
                Selection.Copy
                
                Windows("Book1.xlsx").Activate
                Worksheets("Sheet2").Activate
                
                x = i
                Rows(x).Select
                ActiveSheet.Paste
                Application.CutCopyMode = False
        End If
Next i
End Sub
sarapao555
Member
Member
Posts: 4
Joined: Thu Aug 06, 2015 5:58 am

Re: สอบถามเขียน Code เพื่อหา Conditionของ Column และ Copy ทั้งแถว ครับ

#5

Post by sarapao555 »

สวัสดีครับ
ขอบคุณมาก นะครับ สามารถ วนLoop ได้แล้วครับ แถวไม่เคลื่อนครับ

ต้องขออภัยจริงๆ ที่ไม่ได้ใส่ Macro ไปด้วยในไฟล์ Book1 ครับ
ผมได้ทำการใส่ Macro1 ไว้ในไฟล์ Book1.xlsm ครับ
อยากจะอัพโหลดไปแก้ไฟล์เก่า แต่ไม่เห็นปุ่มกดให้แก้ไขครับ
เลยขออนุญาต อัพโหลดไฟล์ในโพสต์ตอบกระทู้นี้นะครับ
Attachments
Book1.xlsm
วนลูปไม่ได้
(12.51 KiB) Downloaded 4 times
Book1.xlsm
วนลูปแล้วแถวเคลื่อนไป1 แถว
(12.48 KiB) Downloaded 13 times
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: สอบถามเขียน Code เพื่อหา Conditionของ Column และ Copy ทั้งแถว ครับ

#6

Post by bank9597 »

ลองดูโค๊ดนี้ครับ วางใน Book1.xlsm

Code: Select all

Option Explicit

Public Sub FindByCon()
    Dim MainWB As Workbook
    Dim DataWB As Workbook
    Dim objSheet As Worksheet
    Dim objDesSheet As Worksheet
    Dim objDesRange As Range
    Dim lngDataLastRow As Long
    Dim lngMainLastRow As Long
    Dim objRange As Range
    
    Set MainWB = Workbooks("Book1")
    Set DataWB = Workbooks("data")
    Set objSheet = DataWB.Sheets("Sheet1")
    Set objDesSheet = MainWB.Sheets("Sheet2")
    lngDataLastRow = f_LastRow("data", "Sheet1", "B")
    
    Set objDesRange = objSheet.Range("B4:B" & lngDataLastRow)
    
    For Each objRange In objDesRange
        If objRange > 0 Then
            objRange.Offset(0, 0).Resize(1, 4).Copy
            lngMainLastRow = f_LastRow("Book1", "Sheet2", "A") + 1
            objDesSheet.Range("A" & lngMainLastRow).PasteSpecial xlPasteValues
        End If
    Next objRange
    
    Set objSheet = Nothing
    Set objDesSheet = Nothing
    Set objRange = Nothing
    Set objDesRange = Nothing
    Set DataWB = Nothing
    Set MainWB = Nothing
    
End Sub

Public Function f_LastRow(ByVal strWBook As String, ByVal strSheet As String, ByVal strRange As String) As Long
        f_LastRow = Workbooks(strWBook).Worksheets(strSheet).Range(strRange & Workbooks(strWBook).Worksheets(strSheet).Rows.Count).End(xlUp).Row
End Function
เปิดไฟล์ Data ขึ้นมา Run Code "FindByCon"
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
Post Reply