: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

ดึงข้อมูลที่ค้นหาของทุก Sheet

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Arm_anucha
Member
Member
Posts: 47
Joined: Tue Jul 04, 2017 2:57 pm

ดึงข้อมูลที่ค้นหาของทุก Sheet

#1

Post by Arm_anucha »

มีข้อส่งสัยครับว่าสามารถทำได้แบบนี้หรือเปล่าแบบนี้
Database ของทุก sheet จะเป็นแบบ Table และไม่สามารถรวม Database เป็น Sheet เดียวได้ต้องแยก
1. มีรูปแบบวันที่ของแต่ละ sheet วันที่เดียวกัน
2. มีรูปแบบครั้งที่ของแต่ละ Sheet เหมือนกัน
อยากจะให้เมื่อพิมพ์ที่ Sheet แสดงข้อมูลที่ A4 จะเป็นวันที่หรือครั้งที่ก็ได้ แล้วให้ข้อมูลมาแสดงทั้งหมดตัวอย่างคำตอบอยู่ในไฟล์
สามารถทำได้หรือเปล่าครับ โดยใช้สูตรในส่วนที่ไม่มีข้อมูลให้เป็น - แทน
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: ดึงข้อมูลที่ค้นหาของทุก Sheet

#2

Post by DhitiBank »

ชีท ก.4 และ ก.5 ไม่มีคอลัมน์ "ครั้งที่" หรือครับ? หากไม่มีแสดงว่าไม่ต้องค้นหาจากสองชีทนี้ใช่หรือเปล่าครับ
Arm_anucha
Member
Member
Posts: 47
Joined: Tue Jul 04, 2017 2:57 pm

Re: ดึงข้อมูลที่ค้นหาของทุก Sheet

#3

Post by Arm_anucha »

ก.4 และ ก.5 ไม่มีคอรัมน์ "ครั้งที่" ครับ แต่ให้หาจากวันที่แทนแบบนี้ครับ โดยไม่ต้องมีคอลัมน์ "ครั้งที่" ก็ได้ครับ
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: ดึงข้อมูลที่ค้นหาของทุก Sheet

#4

Post by snasui »

:D การค้นหาข้อมูลจากหลายคอลัมน์และแต่ละชีตมีหัวคอลัมน์ไม่เหมือนกันต้องพึ่ง VBA เข้ามาจัดการ ลองเขียนมาเองก่อน ติดตรงไหนค่อยถามกันต่อครับ
Arm_anucha
Member
Member
Posts: 47
Joined: Tue Jul 04, 2017 2:57 pm

Re: ดึงข้อมูลที่ค้นหาของทุก Sheet

#5

Post by Arm_anucha »

ลองเขียนดูแล้วครับตอนนี้ติดตรงที่ว่า
1. จะทำให้หัวข้อข้อมูล Database ตรงกับหัวข้อของ sheet "แสดงข้อมูล" อย่างไร
2. อยากจะให้ค้นหา all sheet ตอนนี้ทำได้แค่ 1 sheet เท่านั้นครับ
3. จำทำอย่างไรให้เมื่อพิมที่ A4 พิมพ์ข้อมูลที่จะหาเป็นอะไรก็ได้อย่างเช่น 1/6/2018 , 1 , ก1 ไก่ , ส1
ตัวอย่างคำตอบอยู่ที่ sheet "ตย คำตอบ" ครับ

Code: Select all

Sub seachdara()
Dim ws As Worksheet
Dim lastrow As Long
Dim count As Integer

lastrow = Sheets("ก1").Cells(Rows.count, 1).End(xlUp).Row
Sheet6.Range("B6:Q200").ClearContents
count = 0
Dim p As Long
p = 5
For x = 1 To lastrow
    If Sheets("ก1").Cells(x, 1) = Sheet6.Range("A4") Then
        Sheet6.Cells(p, 2) = Sheets("ก1").Cells(x, 1)
        Sheet6.Cells(p, 3) = Sheets("ก1").Cells(x, 2)
        Sheet6.Cells(p, 4) = Sheets("ก1").Cells(x, 3)
        Sheet6.Cells(p, 5) = Sheets("ก1").Cells(x, 4)
        Sheet6.Cells(p, 6) = Sheets("ก1").Cells(x, 5)
        Sheet6.Cells(p, 7) = Sheets("ก1").Cells(x, 6)
        p = p + 1
        count = count + 1
  End If
  If Sheets("ก1").Cells(x, 1 + 1) = Sheet6.Range("A4") Then
        Sheet6.Cells(p, 2) = Sheets("ก1").Cells(x, 1)
        Sheet6.Cells(p, 3) = Sheets("ก1").Cells(x, 2)
        Sheet6.Cells(p, 4) = Sheets("ก1").Cells(x, 3)
        Sheet6.Cells(p, 5) = Sheets("ก1").Cells(x, 4)
        Sheet6.Cells(p, 6) = Sheets("ก1").Cells(x, 5)
        Sheet6.Cells(p, 7) = Sheets("ก1").Cells(x, 6)
        p = p + 1
        count = count + 1
  End If
    Next x
End Sub
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: ดึงข้อมูลที่ค้นหาของทุก Sheet

#6

Post by DhitiBank »

ลองปรับโค้ดแบบนี้ครับ แนวคิดคือ
- เริ่มลูปแต่ละชีท
- ในแต่ละชีทก็ให้เริ่มลูปแต่ละแถวในคอลัมน์วันที่
- เมื่อพบวันที่ตรงก็ให้เริ่มลูปหัวคอลัมน์เทียบกันระหว่างหัวคอลัมน์ชีทรายงานกับชีทฐานข้อมูล

โค้ดนี้เขียนสำหรับการค้นหาด้วยวันที่อย่างเดียว สำหรับการหาด้วยครั้งที่ลองปรับดูครับ

Code: Select all

Sub test()
Dim wsResult As Worksheet, ws As Worksheet, l As Long, _
    r1 As Range, r2 As Range, r3 As Range, _
    rRow As Range, rCol As Range, rColHead As Range
    Set wsResult = ActiveSheet
    Set rColHead = wsResult.Range("b4:q4")
    
    wsResult.Range("b5:q2000").ClearContents
    l = 5
    
    '~~> เริ่มลูปแต่ละชีท
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name Like "ก*" Then
            Set rRow = ws.Range("a2", ws.Range("a" & Rows.count).End(xlUp))
            Set rCol = ws.Range("b1", ws.Range("aa1").End(xlToLeft))
            '~~> เริ่มลูปแต่ละแถว
            For Each r1 In rRow
                If r1.Value = wsResult.Range("a4").Value Then
                    '~~>หากเจอวันที่ตรงก็เช็คว่าคอลัมน์อะไร
                    For Each r2 In rCol
                        For Each r3 In rColHead
                            If r2.Value = r3.Value Then
                                wsResult.Cells(l, r3.Column).Value = _
                                    ws.Cells(r1.Row, r2.Column).Value
                                Exit For
                            End If
                        Next r3
                    Next r2
                    l = l + 1
                End If
            Next r1
        End If
    Next ws
End Sub
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ส่วนการใช้สูตร คงต้องเอาข้อมูลทั้งหมดในฐานข้อมูลมารวมในชีทเดียวกันก่อนเพราะหัวตารางเรียงไม่เหมือนกัน แล้วค่อยเขียนสูตรดึงข้อมูลมาไว้ในชีทรายงานอีกทีครับ ลองดูตัวอย่างในไฟล์แนบ ขั้นตอนการทำคร่าวๆ คือ
- สร้างชีทใหม่ (กรณีนี้คือ sheet1) แล้วคัดลอกหัวตารางในชีทรายงานมาวางไว้ในชีทนี้
- พิมพ์ชื่อชีทฐานข้อมูลทั้งหมดลงไป เขียนสูตรนับข้อมูลในแต่ละชีท
- เขียนสูตรดึงข้อมูลในแต่ละชีทฐานข้อมูลมาไว้ใน sheet1

แต่วิธีนี้มีข้อจำกัดหลายอย่างครับ เช่น
- ไม่เหมาะกับข้อมูลจำนวนมาก เพราะจะคำนวณช้า
- หากเพิ่มชีท ต้องพิมพ์ชื่อชีทเพิ่มเข้าไปใน sheet1 และคัดลอกสูตรเผื่อลงไปอีก
- อาจงงได้ และอาจเผลอไปลบสูตรบางที่
You do not have the required permissions to view the files attached to this post.
Arm_anucha
Member
Member
Posts: 47
Joined: Tue Jul 04, 2017 2:57 pm

Re: ดึงข้อมูลที่ค้นหาของทุก Sheet

#7

Post by Arm_anucha »

ขอบคุณครับเดียวจะลองนำไปปรับใช้ดูครับ
ขอถามนิดนึงตรง
If ws.Name Like "ก*" Then
ถ้านำไปใช้จริงอันนี้ต้องเปลี่ยนเป็นอะไรครับอย่างชื่อชีทแต่ละชีทไม่เหมือนกัน
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: ดึงข้อมูลที่ค้นหาของทุก Sheet

#8

Post by DhitiBank »

เงื่อนไขตรงนั้นมีไว้เพื่อเลือกเฉพาะชีทที่เป็นฐานข้อมูลครับ เวลาคำสั่งลูปมาเจอชีทรายงานจะได้ข้ามไปเลย แต่หากชื่อชีทฐานข้อมูลไม่มีรูปแบบที่เหมือนกัน ก็ให้เปลี่ยนเป็น "ชื่อของ ws ไม่ตรงกับชื่อชีทรายงาน" ก็ได้ครับ เช่น

ชีทรายงานชื่อ "Report" ก็ปรับโค้ดเป็น
If ws.Name <> "Report" then
Post Reply