: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

ขอคำแนะนำ การวนลูป หลายชั้น

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
chatana_tiangam
Member
Member
Posts: 4
Joined: Wed Jan 06, 2016 10:57 am

ขอคำแนะนำ การวนลูป หลายชั้น

#1

Post by chatana_tiangam »

รบกวนขอคำแนะนำค่ะ

ทำการวนลูปโดยการดึงค่าจาก sheet3-cell ที่ b2 มาแสดงที่ sheet2-cell ที่ A2
แล้วทำการวนลูปหาค่าโดยดึงจาก sheet1 ข้อมูลแถบสีฟ้ามาแสดงที่ sheet2 แถบสีฟ้า
ไล่ไปเรื่อย ๆจนจบข้อมูลที่มีอยู่ไม่ว่ากี่บรรทัดก็ตาม แต่พอวนรอบสอง ต้องเป็นข้อมูล
ที่มาจาก sheet3-cell ที่ b3 ข้อมูลที่แสดงออกมาทีแต่มาแสดงที่ sheet2-cell ที่ A2 เท่านั้น
แต่ข้อมูลที่ดึงมาจาก sheet1ไม่มาด้วย จึงไม่แน่ใจว่าใส่ Loop หรือ ใช้ if ผิดจุดหรือเปล่า

ถ้าจะแก้ไขจะต้องปรับตรงไหนบ้างค่ะ
ขอบพระคุณค่ะ

Code: Select all

Sub search2()
    i = 2
    o = 2
    j = 2
    
 Do
    Sheets("Sheet2").Range("a2").Value = Sheets("Sheet3").Cells(o, 2)
    Do
        If Range("a2") = Sheets("Sheet1").Cells(i, 1) Then
            For x = 1 To 7
             Sheets("Sheet2").Cells(j, x + 1) = Sheets("Sheet1").Cells(i, x + 1)
            Next
            j = j + 1
        End If
            i = i + 1
    Loop Until Sheets("Sheet1").Cells(i, 1) = ""
    Sheets("Sheet2").Range("a2:o500").ClearContents
    o = o + 1
    Loop Until Sheets("Sheet3").Cells(o, 2) = ""
  
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: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ขอคำแนะนำ การวนลูป หลายชั้น

#2

Post by snasui »

:D จากตัวอย่างที่ให้มา ช่วยแสดงผลลัพธ์ที่ต้องการหากว่า Code ทำงานถูกต้องมาด้วย จะได้เข้าใจตรงกันครับ
chatana_tiangam
Member
Member
Posts: 4
Joined: Wed Jan 06, 2016 10:57 am

Re: ขอคำแนะนำ การวนลูป หลายชั้น

#3

Post by chatana_tiangam »

ทำการแนบไฟล์ที่จะให้แสดงผลให้แล้วค่ะ
ขอบพระคุณค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: ขอคำแนะนำ การวนลูป หลายชั้น

#4

Post by DhitiBank »

สวัสดีครับ

ขอสอบถามเพิ่มเติมครับ ผมไม่แน่ใจว่าสิ่งที่ต้องการคืออะไรระหว่าง 2 อย่างต่อไปนี้ครับ:

1. เมื่อใส่ค่าเลขที่ใบสั่งซื้อใน Sheet2 เซลล์ A2 แล้วให้โค้ดเรียกรายการสินค้าของใบสั่งซื้อนั้นๆ ใน Sheet1 มาแสดงใน Sheet2 หรือว่า

2. ต้องการสั่งรันโค้ดแล้วให้ผลลัพธ์แสดงอย่างในรูปด้านล่างนี้ครับ
test.png
You do not have the required permissions to view the files attached to this post.
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: ขอคำแนะนำ การวนลูป หลายชั้น

#5

Post by DhitiBank »

หากต้องการให้แสดงอย่างในรูป ลองรันโค้ดนี้ครับ

Code: Select all

Public Sub Search_II()
    Dim r As Range, vPO As Variant _
            , l2 As Long, l3 As Long, i As Long _
            , m As Integer, n As Integer
            
    With Sheets("sheet2")
        .Range("a2:h" & .Rows.Count).Clear
    End With
    
    'Find total row of PO
    With Sheets("sheet3")
        l3 = .Range("b" & .Rows.Count).End(xlUp).Row
    End With
    
    'Loop...start
    For i = 2 To l3
        With Sheets("sheet2")
            vPO = Sheets("sheet3").Cells(i, 2).Value
            l2 = .Range("b" & .Rows.Count).End(xlUp).Row + 1
            .Cells(l2, 1).Value = vPO
            .Cells(l2, 1).Interior.Color = .Cells(1, 1).Interior.Color
        End With
        With Sheets("sheet1")
            Set r = .Range("a1")
            m = WorksheetFunction.CountIf(.Range("a:a"), vPO)
            n = 0
                Do While n < m
                    Set r = .Range("a:a").Find(What:=vPO, After:=r, LookIn:=xlValues _
                        , lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext _
                        , MatchCase:=False)
                    r.Offset(0, 1).Resize(1, 7).Copy
                    l2 = Sheets("sheet2").Range("b" & Sheets("sheet2").Rows.Count). _
                            End(xlUp).Row + 1
                    Sheets("sheet2").Cells(l2, 2).PasteSpecial xlPasteValues
                    Sheets("sheet2").Cells(l2, 2).PasteSpecial xlPasteFormats
                    n = n + 1
                Loop
        End With
    Next i
    Application.CutCopyMode = False
End Sub
ที่โค้ดยาวไปหน่อยเพราะเผื่อกรณีรายการสินค้าใน Sheet1 ของใบสั่งซื้อเดียวกันไม่ได้เรียงติดกันผมเลยใช้คำสั่ง Find ดักไว้ครับ และหากข้อมูลจริงมีเยอะมากก็อาจใส่คำสั่ง
Application.Calculation=xlCalculationManual ก่อนเริ่มลูป และ
Application.Calculation=xlCalculationAutomatic ตอนจบลูป
เข้าไปด้วยเพื่อให้โค้ดทำงานเร็วขึ้นครับ
chatana_tiangam
Member
Member
Posts: 4
Joined: Wed Jan 06, 2016 10:57 am

Re: ขอคำแนะนำ การวนลูป หลายชั้น

#6

Post by chatana_tiangam »

ต้องการให้ออกแบบตามรูปค่ะ เพราะใบสั่งซื้อที่ทำอยู่มีรายการมากกว่านี้ และรายละเอียดแต่ละรายการกว่านี้ ตอนแรกว่าจะออกเป็นรายรายการ แต่ก็พบว่ายังดึงข้อมูลออกมาไม่ครบ
จากโค้ดขอนำไปใช้ลองดู ถ้าได้ผลอย่างไรจะแจ้งกลับอีกครั้งค่ะ ขอบพระคุณค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ขอคำแนะนำ การวนลูป หลายชั้น

#7

Post by snasui »

:D อีกตัวอย่าง Code ครับ

Code: Select all

Sub search2()
  Sheets("Sheet2").Range("a2:o500").ClearContents
    o = 2
    Do
       Sheets("Sheet2").Range("b" & Rows.Count).End(xlUp).Offset(1, -1) _
           .Value = Sheets("Sheet3").Cells(o, 2)
       i = 2
       j = Sheets("Sheet2").Range("b" & Rows.Count).End(xlUp).Offset(1, -1).Row
       Do
           If Sheets("Sheet2").Range("a" & Rows.Count).End(xlUp) = Sheets("Sheet1").Cells(i, 1) Then
               For x = 1 To 7
                    Sheets("Sheet2").Cells(j, x + 1) = Sheets("Sheet1").Cells(i, x + 1)
               Next
               j = j + 1
           End If
            i = i + 1
       Loop Until Sheets("Sheet1").Cells(i, 1) = ""
       o = o + 1
    Loop Until Sheets("Sheet3").Cells(o, 2) = ""
End Sub
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: ขอคำแนะนำ การวนลูป หลายชั้น

#8

Post by DhitiBank »

:thup: ขอบคุณอาจารย์มากครับ การสั่งให้คัดลอกค่าด้วย = เร็วกว่าการสั่งให้ copy-->paste มากจริงๆ
chatana_tiangam
Member
Member
Posts: 4
Joined: Wed Jan 06, 2016 10:57 am

Re: ขอคำแนะนำ การวนลูป หลายชั้น

#9

Post by chatana_tiangam »

ขอบคุณสำหรับทุกคำแนะนำค่ะ code ทั้งสองสามารถทำงานได้อย่างดีค่ะ แถมยังได้ความรู้จากการใช้โค้ดใหม่ๆ ด้วย
ขอบพระคุณค่ะ :D :D
Post Reply