Page 1 of 2

ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Thu Aug 14, 2014 7:57 pm
by suka
เรียนอาจารย์และท่านผู้รู้ค่ะ

ขอรบกวนช่วยเรื่องสูตรดึงข้อมูลจากตัวอย่างไฟล์แนบดึงรายการตามเลขที่ในเซลล์ B4 Sheet1 มาแสดงที่เซลล์ G4:O8 Sheet1
ตามจำนวนลำดับที่มีในคอลัมน์ F Sheet2 มาจนครบรายการแล้วค่อยดึงรายการถัดไปในเซลล์ B5:B10 Sheet1 ต่อหากมีค่าในเซลล์นั้นๆมาแสดงต่อค่ะ ค่าที่ต้องการตามไฟล์แนบเซลล์ G11:O14 ค่ะ

ขอบคุณค่ะ

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Thu Aug 14, 2014 9:28 pm
by bank9597
ค้นหาสองเงื่อนไข ลองใช้ VBA ดูครับ

Code: Select all

Sub Macro1()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")

    ws2.Range("D1:M5").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=ws2.Range( _
        "D1:M1"), CopyToRange:=ws1.Range("F10"), Unique:=False
End Sub

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Fri Aug 15, 2014 8:40 am
by suka
ขอบคุณมากๆค่ะคุณ bank9597 ขอโหลดไฟล์เพื่อศึกษาได้ผลอย่างไรมาแจ้งผลนะคะ

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Fri Aug 15, 2014 5:25 pm
by suka
ขอช่วยเรื่องปรับ Code ด้านล่างนี้ค่ะ ตัวอย่างไฟล์แนบต้องการดึงตามเลขที่บันทึกที่มีในเซลล์ B4:B10 มาแสดงที่เซลล์ F11:O ค่าที่ต้องการได้ระบายสีเหลืองที่เซลล์ G4:O8 ค่ะ ขอบคุณค่ะ

Code: Select all

Sub Macro2()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")

    ws2.Range("D1:M100").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=ws2.Range( _
"D1:M1"), CopyToRange:=ws1.Range("F10:O100"), Unique:=False
End Sub

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Fri Aug 15, 2014 6:08 pm
by snasui
:D เซลล์ B3 ใน Sheet1 จะต้องคีย์ให้เหมือนกันกับเซลล์ D1 ของ Sheet2

จากนั้นปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Sub Macro0()
    Sheets("Sheet1").Range("F10:O10000").ClearContents
    Sheets("Sheet2").Columns("D:M").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("B3:B10"), CopyToRange:=Range("F10"), Unique:=False
End Sub

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Fri Aug 15, 2014 6:46 pm
by suka
:thup: ขอบพระคุณค่ะอาจารย์ ได้ตรงตามต้องการแล้วค่ะ

อาจารย์คะ Code นี้ดึงค่าโดยใช้หัวคอลัมน์เหมือนกันกับเซลล์ต้นแหล่ง หากเราต้องการดึงค่าจากต้นแหล่งโดยดึงมาใช้ไม่ทุกคอลัมน์ สามารถคีย์หัวคอลัมน์ให้เหมือนได้ไหมคะ

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Fri Aug 15, 2014 6:50 pm
by snasui
:D เพื่อป้องกันปัญหาให้เขียนให้เหมือนกัน ดึงมาแล้วใช้ไม่ทุกคอลัมน์ค่อยนำมาประยุกต์ใช้ต่อ เช่น ดึงมาก่อนทั้งหมด คอลัมน์ใดไม่ใช้ให้ลบทิ้ง เช่นนี้เป็นต้น หรือหากไม่ต้องการลบก็ให้เปลี่ยนวิธีการเป็นเขียน VBA เพื่อเลือกข้อมูลมาเองตามต้องการครับ

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Fri Aug 15, 2014 7:27 pm
by suka
ขอบคุณค่ะอาจารย์ และ คุณ bank9597 ด้วยนะคะที่คอยช่วยเหลือมอบความรู้ให้ค่ะ จากกระทู้นี้น่าจะได้นำไปปรับใช้ได้อีกมากค่ะ

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Tue Aug 19, 2014 5:33 pm
by suka
ขอช่วยเรื่องปรับ Code Macro2 นี้ค่ะ ตัวอย่างไฟล์แนบสมุดงาน.3 สามารถดึงข้อมูลจากไฟล์สมุดงาน3S มาแสดงชีท Form เซลล์G2:QG2:Q10000 ได้ตามต้องการค่ะ แต่พอตั้งค่าไฟล์สมุดงาน3S เป็นแบบไฟล์แชร์ Code ด้านล่างนี้ไม่สามารถใช้ได้ค่ะ หากต้องการใช้กับแชร์ไฟล์ต้องปรับโค๊ดนี้อย่างไรคะ ขอบคุณค่ะ

Code: Select all

Sub Macro2()
    Dim woShare As Workbook
    Dim formBook As Workbook
    Set formBook = ThisWorkbook
    Set woShare = Workbooks("สมุดงาน3S.xlsx")
        formBook.Sheets("Form").Range("G2:Q10000").ClearContents
        woShare.Sheets("Sheet1").Columns("D:N").AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=Range("B3:B10"), CopyToRange:=Range("G3"), Unique:=False
         formBook.Sheets("Form").Columns("N:N").Select
         Selection.Delete Shift:=xlToLeft
End Sub

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Tue Aug 19, 2014 5:51 pm
by snasui
:D Workbook ที่แชร์ไว้มีข้อจำกัดในการทำ Filter โดยไม่อนุญาตให้ทำ Advanced Filter กรณี่เช่นนี้คงต้องเปลียนวิธีการดึงข้อมูลแทนการใช้ Advanced Filter ครับ

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Tue Aug 19, 2014 6:50 pm
by suka
อาจารย์คะ ขอรบกวนช่วยเป็นสูตรดึงแทนได้ไหมคะ

จากไฟล์แนบบต้องการดึงข้องมูลจากไฟล์สมุดงาน3S คอลัมน์ D:J และ L:N มาแสดงที่ไฟล์สมุดงาน.3 ชีท Form เซลล์ G4:Q1000 ตามเงื่อนไขเซลล์B4:B10 หากเลขที่ตรงกับเซลล์ D2 ไฟล์สมุดงาน3S ให้นำค่า D2:J1048576 ทุกรายการที่เข้าเงื่อนไขมา ที่ไฟล์สมุดงาน.3 ชีท Form เซลล์ G4:Q1000 ค่ะ

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Tue Aug 19, 2014 7:03 pm
by snasui
suka wrote:หากเลขที่ตรงกับเซลล์ D2 ไฟล์สมุดงาน3S ให้นำค่า D2:J1048576 ทุกรายการที่เข้าเงื่อนไขมา ที่ไฟล์สมุดงาน.3 ชีท Form เซลล์ G4:Q1000 ค่ะ
:D การดึงข้อมูลด้วยสูตรไม่ควรดึงตาม Range ที่เขียนมา ไม่เช่นนั้นจะคำนวณช้ามาก ควรปรับให้เป็นช่วงข้อมูลที่ใช้จริง

ลองตามนี้ครับ

ที่ไฟล์ สมุดงาน3.xlsm ชีท Form
  1. เซลล์ F4 คีย์สูตร

    Code: Select all

    =IFERROR(SMALL(IF(ISNUMBER(MATCH("~"&[สมุดงาน3S.xlsx]Sheet1!D$2:D$11,$B$4:$B$10&"",0)),ROW([สมุดงาน3S.xlsx]Sheet1!$D$2:$D$11)-ROW([สมุดงาน3S.xlsx]Sheet1!$C$2)+1),ROWS(F$4:F4)),"")
    Ctrl+Shift+Enter > Copy ลงด้านล่าง
  2. เซลล์ G4 คีย์

    Code: Select all

    =IF($F4="","",INDEX([สมุดงาน3S.xlsx]Sheet1!$D$2:$N$11,$F4,MATCH(G$3,[สมุดงาน3S.xlsx]Sheet1!$D$1:$N$1,0)))
    Enter > Copy ไปด้านขวาและลงด้านล่าง

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Tue Aug 19, 2014 7:50 pm
by suka
:thup: ขอบพระคุณค่ะอาจารย์ ได้คำตอบตรงตามต้องการแล้วค่ะ

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Wed Aug 20, 2014 4:23 pm
by suka
อาจารย์คะ ได้นำสูตรที่อาจารย์ให้ไปลองใช้กับไฟล์ตัวอย่างได้ผลตามต้องการดังรูปแนบรูปที่ 1

พอนำสูตรไปใช้กับไฟล์จริงรูปที่ 2 ตรงศรชี้ไม่มีข้อมูลทำไมไม่เป็นค่าว่างดังรูปที่ 1 คะ สูตรที่ใช้กับรูปที่ 2 สูตรล่างนี้ค่ะไม่ทราบมีผิดจุดใดบ้างค่ะ

เซลล์ F4 คีย์สูตร

Code: Select all

=IFERROR(SMALL(IF(ISNUMBER(MATCH("~"&[Ph_BookShare.xlsx]Sheet1!F$2:F$10000,$B$3:$B$50&"",0)),ROW([Ph_BookShare.xlsx]Sheet1!F$2:F$10000)-ROW([Ph_BookShare.xlsx]Sheet1!$E$2)+1),ROWS(P$3:P3)),"")
Ctrl+Shift+Enter > Copy ลงด้านล่าง
เซลล์ G4 คีย์

Code: Select all

=IF($P3="","",INDEX([Ph_BookShare.xlsx]Sheet1!$F$2:$AG$10000,$P3,MATCH(Q$2,[Ph_BookShare.xlsx]Sheet1!$F$1:$AG$1,0)))

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Wed Aug 20, 2014 5:43 pm
by snasui
:D แนบไฟล์มาด้วยจะได้ช่วยทดสอบได้ การ Capture ภาพ ควรจะ Capture ข้อมูลเดียวกัน

แถบสีเหลืองในภาพที่ 1 อยู่ในคอลัมนใดของภาพที่ 2 ครับ :?:

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Wed Aug 20, 2014 7:04 pm
by suka
อาจารย์คะ แนบตัวอย่างไฟล์มาให้อาจารย์ช่วยทดสอบค่ะที่ Form เซลล์ F6:AB10 ไม่มีข้อมูลเพื่อดึงทำไมไม่เป็นเซลล์วางค่ะ

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Wed Aug 20, 2014 7:12 pm
by snasui
:D ปรับสูตรที่ F4 เป็นด้านล่างครับ

Code: Select all

=IFERROR(SMALL(IF([Ph_BookShare.xlsx]Sheet1!E$2:E$10000<>"",IF(ISNUMBER(MATCH([Ph_BookShare.xlsx]Sheet1!E$2:E$10000,$B$4:$B$10,0)),ROW([Ph_BookShare.xlsx]Sheet1!E$2:E$10000)-ROW([Ph_BookShare.xlsx]Sheet1!$D$2)+1)),ROWS(F$4:F4)),"")
Ctrl+Shift+Enter > Copy ลงด้านล่าง

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Wed Aug 20, 2014 7:32 pm
by suka
:thup: ขอบคุณอาจารย์มากๆเลยค่ะ ได้คำตอบไวแท้และได้ตรงตามต้องการแล้วค่ะ

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Sat Aug 23, 2014 10:29 am
by suka
เรียนถามเรื่อง Code ค่ะ
Code ที่เป็นปัญหา .Range("AA2:BB2").Resize(.Range("BC1")).Copy ไม่สามารถใช้ร่วมกับโค๊ดทั้งชุดได้ค่ะ
ความตัองการให้โค๊ดนำข้อมูลไปวางที่ชีท Sheet1 ไฟล์ Paid_BookShare ฟ้องตามรูปแนบค่ะ แต่ใช้โค๊ดเดิม .Range("A2:J2").Copy นี้สามารถวางข้อมูลได้ ต้องการปรับใช้ .Range("AA2:BB2").Resize(.Range("BC1")).Copy นี้ค่ะ

Code: Select all

With formBook.Sheets("TemBilling")
         '.Range("A2:J2").Copy
        .Range("AA2:BB2").Resize(.Range("BC1")).Copy
         wbShare.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp) _
        .Offset(1, 0).PasteSpecial xlPasteValues
     End With
Code ทั้งชุดค่ะ

Code: Select all

Sub BeenArPay()
    Dim wbShare As Workbook
    Dim wb As Workbook ' declare wb as workbook
    Dim wdShare As Workbook
    Dim wkShare As Workbook
    Dim formBook As Workbook
    Dim wdShareOpen As Boolean
    Dim wkShareOpen As Boolean
    Dim rSource As Range
    Dim rTarget As Range
    Dim rs As Range
    Dim rt As Range
    Dim rk As Range
    Dim i As Double
    Set formBook = ThisWorkbook
    Set wbShare = Workbooks("Paid_BookShare.xlsx")
    Set wkShare = Workbooks("MyPay_BookShare.xlsx")
    For Each wb In Workbooks ' loop wb not loop wdShare
        If wb.Name = "Ph_BookShare.xlsx" Then
            wdShareOpen = True
        End If
    Next wb
    If Not wdShareOpen Then
        ChDir "\\Server\DATA (E)\My P S  Project.xls\PS.BookShare\AR.ÃкºÅ١˹Õé"
        Workbooks.Open Filename:="\\Server\DATA (E)\My P S  Project.xls\PS.BookShare\AR.ÃкºÅ١˹Õé\Ph_BookShare.xlsx"
    End If
    Set wdShare = Workbooks("Ph_BookShare.xlsx") 'set wdShare after open not before open
    With formBook.Sheets("Form")
        Set rSource = .Range("B3:B50")
    End With
    With wdShare.Sheets("Sheet1")
        Set rTarget = .Range("f2", .Range("f" & Rows.Count).End(xlUp))
    End With
    With formBook.Sheets("Form")
        i = (.Range("L4") + .Range("M11") + .Range("M12"))
        If i <> .Range("J12") Then
            MsgBox "â»Ã´µÃǨ¨Ó¹Ç¹à§Ô¹áÅкѹ·Ö¡ãËÁè"
            Exit Sub
        End If
    End With
    Application.Calculation = xlCalculationManual
    For Each rs In rSource
        For Each rt In rTarget
           If rt = rs Then rt.Offset(0, 28).Resize(, 2) = "Y"
        Next rt
    Next rs
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = False
    Set rt = wbShare.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
    With formBook.Sheets("TemBilling")
         '.Range("A2:J2").Copy
        .Range("AA2:BB2").Resize(.Range("BC1")).Copy
         wbShare.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp) _
        .Offset(1, 0).PasteSpecial xlPasteValues
     End With
    With formBook.Sheets("TemBilling")
        .Range("A11:F11").Copy
        wbShare.Sheets("Report").Range("A" & Rows.Count).End(xlUp) _
        .Offset(1, 0).PasteSpecial xlPasteValues
    End With
     
    Application.ScreenUpdating = False
    If Sheets("Form").Range("J4") = "à§Ô¹Ê´" Then
        Set rk = wkShare.Sheets("Cash").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
        With formBook.Sheets("TemBilling")
            .Range("A20:N20").Copy
            wkShare.Sheets("Cash").Range("A" & Rows.Count).End(xlUp) _
            .Offset(1, 0).PasteSpecial xlPasteValues
        End With
    Else
        Set rk = wkShare.Sheets("Check").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
        With formBook.Sheets("TemBilling")
            .Range("A20:N20").Copy
            wkShare.Sheets("Check").Range("A" & Rows.Count).End(xlUp) _
            .Offset(1, 0).PasteSpecial xlPasteValues
        End With
    End If
    formBook.Save
    wdShare.Save
    wkShare.Save
    wdShare.Save
    'formBook.Sheets("Form").Range("H1,L4:N4,N11:N12").ClearContents
    With formBook.Sheets("Form")
        .Range("K4") = .Range("K4") + 1
        .Range("M2") = .Range("M2") + 1
        .Range("N2") = .Range("N2") + 1
    End With
   Application.ScreenUpdating = True
End Sub

Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ

Posted: Sat Aug 23, 2014 10:43 am
by snasui
:D ผมทดสอบไฟล์แนบแล้วไม่พบว่าผิดพลาดครับ