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

เซลล์ 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

ขอบพระคุณค่ะอาจารย์ ได้ตรงตามต้องการแล้วค่ะ
อาจารย์คะ Code นี้ดึงค่าโดยใช้หัวคอลัมน์เหมือนกันกับเซลล์ต้นแหล่ง หากเราต้องการดึงค่าจากต้นแหล่งโดยดึงมาใช้ไม่ทุกคอลัมน์ สามารถคีย์หัวคอลัมน์ให้เหมือนได้ไหมคะ
Re: ขอช่วยเรื่องสูตรดึงข้อมูลตามเงื่อนไขค่ะ
Posted: Fri Aug 15, 2014 6:50 pm
by snasui

เพื่อป้องกันปัญหาให้เขียนให้เหมือนกัน ดึงมาแล้วใช้ไม่ทุกคอลัมน์ค่อยนำมาประยุกต์ใช้ต่อ เช่น ดึงมาก่อนทั้งหมด คอลัมน์ใดไม่ใช้ให้ลบทิ้ง เช่นนี้เป็นต้น หรือหากไม่ต้องการลบก็ให้เปลี่ยนวิธีการเป็นเขียน 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

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 ค่ะ

การดึงข้อมูลด้วยสูตรไม่ควรดึงตาม Range ที่เขียนมา ไม่เช่นนั้นจะคำนวณช้ามาก ควรปรับให้เป็นช่วงข้อมูลที่ใช้จริง
ลองตามนี้ครับ
ที่ไฟล์ สมุดงาน3.xlsm ชีท Form
- เซลล์ 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 ลงด้านล่าง
- เซลล์ 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

ขอบพระคุณค่ะอาจารย์ ได้คำตอบตรงตามต้องการแล้วค่ะ
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

แนบไฟล์มาด้วยจะได้ช่วยทดสอบได้ การ 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

ปรับสูตรที่ 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

ขอบคุณอาจารย์มากๆเลยค่ะ ได้คำตอบไวแท้และได้ตรงตามต้องการแล้วค่ะ
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

ผมทดสอบไฟล์แนบแล้วไม่พบว่าผิดพลาดครับ