: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

การค้นหาและแทนค่า

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

การค้นหาและแทนค่า

#1

Post by Bafnet »

สวัสดีครับอาจารย์
อาจารย์คงสบายดีนะครับวันนี้มีเรื่องจะรบกวนขอคำแนะนำหน่อยครับ

1.คือผมต้องการตรวจหาคำว่า"รวมดอกเบี้ย" และ"รวมต้นเงิน" ในข้อมูลที่อยู่ในคอลัมน์ A
หากพบให้แสดงค่าที่กำหนดในคอลัมน์ B
2.ปัจจุบันผมใช้ สูตรที่ตำแหน่ง B6 = RIGHT(A6,10) เพื่อหาคำที่ต้องการ
3.จากนั้นต้องแปลงค่าอีกครั้ง ที่ C6 ด้วยสูตร C6=IF(B6="วมดอกเบี้ย",2,IF(B6="รวมต้นเงิน",1,0))
ซึ่งในการทำงานจริงๆผมไปเขียนสูตรใน VB ใช้การ Loop ด้วย Do..Until
ซึ่งจากวิธีของผมเมื่อโหลดไฟล์ข้อมูลมา ต้องใช้สามขั้นตอน คือ หาโดยการตัดคำ,ใช้ iF เพื่อแปลงค่าตามเงื่อนไข ,เพื่อใช้กรองข้อมูลและตัดข้อมูล

จึงอยากเรียนถามอาจารย์ว่าที่ตำแหน่ง B6 มีสูตรใดบ้างที่สามารถค้นหาคำที่เราต้องการในคอลัมน์ A6
แล้วแทนค่าตามที่เรากำหนดได้เลย และสามารถซ้อนเงื่อนไขคำที่ต้องการหาได้มากกว่า 1 คำ
เช่นในกรณีนี้ ผมต้องหาคำว่า "รวมดอกเบี้ย" และ"รวมต้นเงิน"

ขอคำแนะนำด้วยครับ :roll:
You do not have the required permissions to view the files attached to this post.
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การค้นหาและแทนค่า

#2

Post by Bafnet »

อาจารย์ครับ ผมพยายามได้ในระดับหนึ่งแล้วครับ
ดังนี้...
=IF(ISNUMBER(FIND("รวมดอกเบี้ย",A6)),SUBSTITUTE(A6,A6,2),IF(ISNUMBER(FIND("รวมต้นเงิน",A6)),SUBSTITUTE(A6,A6,1),"0"))
ก็ใช้ได้ครับ
หรือมีสั้นกว่านี้อีกหรือเปล่าครับ.
ทุกครั้งที่คิดๆๆๆๆไม่ออกเป็นนานสองนาน
พอตัดสินใจถามอาจารย์ทีไร ก็คิกออกทุกทีในระดับหนึ่ง
สงสัยจะกลัวอาจารย์ :D
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การค้นหาและแทนค่า

#3

Post by snasui »

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

เซลล์ B6 คีย์

=IFERROR(MATCH(SUBSTITUTE(A6,"สัญญารวม",""),{"ต้นเงิน","ดอกเบี้ย"},0),0)

Enter > Copy ลงด้านล่าง
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การค้นหาและแทนค่า

#4

Post by Bafnet »

ขอบคุณครับ
รบกวนอาจารย์อธิบายสูตรเพื่อให้ความรู้หน่อยครับว่าถ้าแปลเป็นแบบไทยๆ
สูตรนี้ให้ความหมายการสั่งงานอย่างไรครับ
=IFERROR(MATCH(SUBSTITUTE(A6,"สัญญารวม",""),{"ต้นเงิน","ดอกเบี้ย"},0),0)
:roll:
ค่า1 และ 2 ที่ได้มาทั้งที่ไม่มีการระบุตัวเลขดังกล่าว เป็นเพราะ
เกิดจากการเขียนลำดับ "ต้นเงิน","ดอกเบี้ย" ใช่หรือไม่ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การค้นหาและแทนค่า

#5

Post by snasui »

:D จากสูตร

=IFERROR(MATCH(SUBSTITUTE(A6,"สัญญารวม",""),{"ต้นเงิน","ดอกเบี้ย"},0),0)

หมายถึง หาก MATCH(SUBSTITUTE(A6,"สัญญารวม",""),{"ต้นเงิน","ดอกเบี้ย"},0) เป็นค่าผิดพลาดให้แสดงผลลัพธ์เป็น 0

จาก MATCH(SUBSTITUTE(A6,"สัญญารวม",""),{"ต้นเงิน","ดอกเบี้ย"},0)

หมายถึง ให้หาว่า SUBSTITUTE(A6,"สัญญารวม","") อยู่ในลำดับที่เท่าไรของ {"ต้นเงิน","ดอกเบี้ย"}

จาก SUBSTITUTE(A6,"สัญญารวม","")

หมายถึง ให้เปลี่ยนคำว่า "สัญญารวม" ในเซลล์ A6 ให้เป็นค่าว่าง

สำหรับการแทนค่าสูตรให้แทนค่าตามที่ผมอธิบายมาจากล่างขึ้นไปด้านบน
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การค้นหาและแทนค่า

#6

Post by Bafnet »

ขอบคุณมากครับอาจารย์สำหรับคำอธิบาย
มีอีกเรื่องที่อยากขอคำแนะนำจากอาจารย์ครับ ก็ยังคงเป็นความเกี่ยวเนื่องกับการค้นหา
คือไปเห็นงานที่เขาเขียนกับ visual basic โดยตรง
ในกรณีที่ลูกค้าหนึ่งคนมีเงินกู้หลายสัญญา แล้วเขาสามารถดูที่ยอดรวมของแต่ละคน
เช่นสนใจลูกค้ารายใหญ่ที่มีหนี้เงินกู้เกิน 1,000,000 บาท ระบบก็จะกรองรายชื่อลูกค้าที่มีหนี้ทุกสัญญารวมกันเกินหนึ่งล้านให้ทันที
ผมอยากเรียนถามว่า ใน vb มีวิธีเขียนคำสั่งที่จะกรองผลข้อมูลลักษณะดังกล่าวได้มั๊ย
ทุกวันนี้ ผมกรองได้เป็นรายสัญญา คือสนใจได้เฉพาะสัญญาตามวงเงินหนี้ที่ระบุ เช่นสนใจหนี้ 400,000 บาท มันก็กรองให้เฉพาะสัญญาที่มีหนี้ 400,000 บาท
ไม่สามารถมองภาพหนี้รวมของแต่ละคน
อาจารย์พอจะแนะนำคำสั่ง หรือตัวอย่างที่ผมพอจะศึกษาเป็นแนวทางได้สักหน่อยนะครับ
ผมแนบไฟล์ข้อมูลมาให้ด้วยครับ CIF คือรหัสลูกค้า Loan คือหนี้เงินกู้ ลูกค้าบางรายอาจมีมากกว่าหนึ่งสัญญา
เช่นผมสนใจหนี้เงินกู้เกิน 700,000 บาท ลูกค้าที่มีหนี้เงินกู้มากกว่าหนึ่งสัญญา แต่รวมกันเกิน 700,000 บาท จะไม่พบข้อมูลลูกค้ารายหนี้
ทำให้พลาดโอกาสในการดูแลติดตาม
คำสั่งที่ผมใช้ค้นหา(ได้เฉพาะรายสัญญามองภาพรวมไม่ได้)
' ตามต้นเงิน

Code: Select all

  If OptionButton13.Value = True And OptionButton8.Value = True And TextBox11.Value = "" And TextBox14.Value = "" And TextBox12.Value <> "" And TextBox13.Value <> "" Then   'ตามวงเงินคงเหลือ
  On Error Resume Next
   With Workbooks("CIM.xlsm").Worksheets("LN001")
Set ri = .Range(.Range("A1"), .Range("AD65536") _
    .End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
With Workbooks("CIM.xlsm").Worksheets("Report")
Set ry = Workbooks("CIM.xlsm").Worksheets("Report").Range("A1")
End With
Sheet6.Activate
cri = TextBox12.Value
crx = TextBox13.Value
Sheet6.Activate
ActiveSheet.Range("A:AD").AutoFilter Field:=16, Criteria1:=">" & cri, _
        Operator:=xlAnd, Criteria2:="<=" & crx
           ri.Select
       ri.Copy: ry.PasteSpecial xlPasteValues
       Application.CutCopyMode = False
              Sheet6.Activate
       Sheet6.ShowAllData
       Sheet17.Activate
       Sheet17.Range("CA1").Formula = "=COUNTA(A:A)-1"
        TextBox6.Value = Sheet17.Range("CA1").Value
               Sheet17.Range("CA2").Formula = "=SUM(P:P)"
              TextBox7.Value = Sheet17.Range("CA2").Value
        Sheet17.Activate
        Sheet17.Range("A1").Value = "CIF"
        Sheet17.Range("B1").Value = "ID"
        Columns("A:N").Select
Selection.EntireColumn.AutoFit
           MsgBox "เรียกรายงานสำเร็จ", vbOKOnly, "CIM 360"

  End If
อาจารย์คงเข้าใจผลที่ผมต้องการสอบถาม เขียนไปเขียนมากลัวอาจารย์งง
ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การค้นหาและแทนค่า

#7

Post by Bafnet »

สวัสดีครับอาจารย์
หลังจากสอบถามอาจารย์ และไปนั่งคิดหาวิธีทำต่อ
ก็ได้ขั้นตอนในแบบของผมดังนี้
1.หาระเบียนที่ต่างกันก่อนจากรหัสลูกค้าในคอลัมน์A:A และไปวางไว้ ที่คอลัมน์ AA
2.ใช้ Do...Until loop เพื่อหายอดหนี้รวมของแต่ละรหัส(A:A) และรวมยอดหนี้รวมในคอลัมน์(B:B) จากสูตร =SUMIF(A:A, AA1, B:B)
ทำให้ทราบยอดหนี้รวมของแต่ละรหัส
3.ส่งผลที่ได้ไปเก็บไว้ในชีทฐานข้อมูลใหม่
4.เมื่อผู้ใช้งานสนใจจำนวนยอดหนี้เท่าไร ก็คัดกรองการชีทข้อ 3 เพื่อได้รหัสลูกค้าตามจำนวนเงินที่ต้องการ
5.นำรหัสลูกค้าที่ได้ไปกรองจากฐานข้อมูลหนี้คงเหลือรายสัญญา ให้ระบบเลือกเฉพาะรหัสลูกค้าที่ระบุ
จะแสดงผลเป็นรายสัญญาของลูกค้านั้นๆที่มีหนี้รวมกันตามจำนวนเงินที่ผู้ใช้โปรแกรมสนใจ

Code: Select all

Sheet6.Activate
    Range("A:A").Select
    Range("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
        "AG:AG"), Unique:=True

      With Workbooks("CIM.xlsm").Worksheets("Cimx")’sheet 6
 r = 2
Do Until Sheet6.Cells(r, 33).Value = ""
 Sheet6.Cells(r, 34).Formula = [u]"=SUMIF(A:A," & Sheet6.Cells(r, 33).Address & ",B:B)" 'สูตรนี้ไม่ทราบเขียนถูกหรือไม่[/u]
   r = r + 1
 frmcalculator.TextBox1.Value = r - 2
     DoEvents
Loop
    End With  
Sheet10.Range(A:A).value =  Sheet6.Range(AG:AG).value 'รหัสลูกค้าที่ไม่ซ้ำ
Sheet10.Range(B:B).value =  Sheet6.Range(AH:AH).value 'หนี้รวม

ขั้นตอนการค้นหาเพื่อให้ได้รหัสลูกค้าตามที่ช่วงจำนวนเงินที่กำหนด
On Error Resume Next
   With Workbooks("CIM.xlsm").Worksheets("LN002")
Set ri = .Range(.Range("A1"), .Range("AD65536") _
    .End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
With Workbooks("CIM.xlsm").Worksheets("transfer")
Set ry = Workbooks("CIM.xlsm").Worksheets("transfer").Range("A1")
End With
Sheet10.Activate
cri = TextBox23.Value
crx = TextBox24.Value
Sheet10.Activate
ActiveSheet.Range("A:B").AutoFilter Field:=2, Criteria1:=">" & cri, _
        Operator:=xlAnd, Criteria2:="<=" & crx
           ri.Select
       ri.Copy: ry.PasteSpecial xlPasteValues
       Application.CutCopyMode = False
              Sheet10.Activate
       Sheet10.ShowAllData

ขั้นตอนนำรหัสที่ต่างกันไปค้นหาจากหน้าข้อมูลหนี้คงเหลืออีกครั้งหนึ่ง
On Error Resume Next
   With Workbooks("CIM.xlsm").Worksheets("LN001")
Set ri = .Range(.Range("A1"), .Range("AD65536") _
    .End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
With Workbooks("CIM.xlsm").Worksheets("Report")
Set ry = Workbooks("CIM.xlsm").Worksheets("Report").Range("A1")
End With
Sheet6.Activate
cri = Sheet11.Range(A:A).value [u]'ข้อมูลรหัสลุกค้าที่ต่างกันจาก Sheet transfer ไม่ทราบว่าสามารถกำหนดเงื่อนไขเป็นช่วงข้อมูลอย่างนี้ได้มั๊ย[/u]
Sheet6.Activate
ActiveSheet.Range("A:AD").AutoFilter Field:=13, Criteria1:= cri  [u] อันนี้ก็ให้คัดกรองตามเงื่อนไขไม่ทราบระบุถูกหรือไม่[/u]
           ri.Select
       ri.Copy: ry.PasteSpecial xlPasteValues
       Application.CutCopyMode = False
              Sheet10.Activate
       Sheet10.ShowAllData
อาจารย์มีข้อแนะนำอย่างไรครับ โปรดชี้แนะด้วยครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การค้นหาและแทนค่า

#8

Post by snasui »

:D หาก Code ที่เขียนมานั้นให้คำตอบที่ถูกต้องแล้วก็สามาถใช้ได้ ยกเว้นจะมีปัญหาอื่นใดตามมาครับ
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การค้นหาและแทนค่า

#9

Post by Bafnet »

สวัสดีครับอาจารย์ ติดปัญหาแล้วครับหลังจากได้ลงมือทำ :roll:

หลังจากที่ได้รหัสลูกค้าตามวงเงินรวมที่เราต้องการแล้ว ติดปัญหา
ตรงส่งค่าเหล่านี้ไปกรอง ที่ผ่านมาเคยกำนดค่าตัวเดียว หรือค้นหาจำนวนมากกว่า น้อยกว่า
ลองบันทึกมาโคร ว่าเวลาเราติ๊กเลือกรายการที่ต้องการจากตัวกรองจะเป็นเช่นไร
พอดูมาโครก็มีแค่นี้ครับ ActiveSheet.Range("$N$1:$P$417").AutoFilter Field:=1 :roll:
ได้พยายามแล้ว รบกวนแนะนำหน่อยครับ

Code: Select all

Private Sub CommandButton18_Click()
Dim ry As Range
Dim ri As Range
Dim ro As Range
Dim rx As Range
Dim cra As Range
Dim cri As String
Dim crx As String
Dim cro As String
Dim cry As String

If frmloan.OptionButton31.Value = False And frmloan.OptionButton30.Value = False Then
MsgBox "โปรดเลือกเงื่อนไขตามวงเงินกู้หรือหนี้คงเหลือ", vbOKOnly, "CIM 360"
Exit Sub
End If
If frmloan.TextBox27.Value = "" And frmloan.TextBox28.Value = "" Then
MsgBox "โปรดระบุจำนวนเงินตามที่ต้องการ", vbOKOnly, "CIM 360"
Exit Sub
End If
Application.ScreenUpdating = False
Sheet17.Range("A:BZ").Value = ""
frmloan.TextBox32.Text = ""
frmloan.TextBox33.Text = ""
frmloan.TextBox36.Text = ""
Sheet26.Range("A:C").Value = ""
Sheet10.Range("Z98").Value = "FILE B"
'หนี้รายคนตามวงเงิน
If frmloan.OptionButton31.Value = True And frmloan.OptionButton30.Value = False And frmloan.TextBox35.Value = "" And frmloan.TextBox27.Value <> "" And frmloan.TextBox28.Value = "" Then 
'การค้นหาตามวงเงินกู้รายคน
  On Error Resume Next
   With Workbooks("CIM.xlsm").Worksheets("transfer")
Set ri = .Range(.Range("A1"), .Range("C80000") _
    .End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
   With Workbooks("CIM.xlsm").Worksheets("LN001")
Set ro = .Range(.Range("A1"), .Range("AF80000") _
    .End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
With Workbooks("CIM.xlsm").Worksheets("Rest")
Set rx = Workbooks("CIM.xlsm").Worksheets("Rest").Range("A1")
End With
With Workbooks("CIM.xlsm").Worksheets("Report")
Set ry = Workbooks("CIM.xlsm").Worksheets("Report").Range("A1")
End With
Sheet25.Activate
cri = TextBox27.Value
Sheet25.Activate
Sheet25.Range("A:C").AutoFilter
ActiveSheet.Range("A:C").AutoFilter Field:=2, Criteria1:=">=" & cri
           ri.Select
       ri.Copy: rx.PasteSpecial xlPasteValues
       Application.CutCopyMode = False
       Sheet25.Activate
       Sheet25.ShowAllData  'ขั้นตอนนี้ทุกอย่างโอเคครับ

 Sheet6.Activate 'ขั้นตอนจะนำรหัสลูกค้าที่ได้จากขั้นตอนแรก ข้อมูลอยู่ใน sheet Rest Range("A:A")
cra = Sheet26.Range("A:A").Value 'เมื่อรัน เกิด bug ระบบมองว่า cra ="" ,Nothing
Sheet6.Range("A:AF").AutoFilter
Sheet6.Range("A:AF").AutoFilter Field:=1, Criteria1:=cra  'การกำหนดเงื่อนไขผิด
         
           ro.Select
       ro.Copy: ry.PasteSpecial xlPasteValues
       Application.CutCopyMode = False
       Sheet6.Activate
       Sheet6.ShowAllData
       Sheet17.Activate
       Sheet17.Range("CA1").Formula = "=COUNTA(A:A)-1"
       Sheet17.Range("CA2").Formula = "=SUM(O:O)"
       Sheet17.Range("CA3").Formula = "=SUM(IF(FREQUENCY(A:A,A:A)>0,1))"
        TextBox32.Value = Sheet17.Range("CA3").Value
        TextBox36.Value = Sheet17.Range("CA1").Value
        TextBox33.Value = Sheet17.Range("CA2").Value
        Sheet17.Activate
        Sheet17.Range("A1").Value = "CIF"
        Sheet17.Range("B1").Value = "ID"
           MsgBox "เรียกรายงานสำเร็จครับ", vbOKOnly, "CIM 360"
  End If
  

            If Sheet17.Range("A2").Value = "" Then
  MsgBox "ไม่พบรายงานตามเงื่อนไขที่ระบุ", vbOKOnly, "CIM 360"
  End If
End Sub 
รบกวนด้วยครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การค้นหาและแทนค่า

#10

Post by snasui »

:D แนบไฟล์ที่ได้ Update ล่าสุดมาด้วย ชี้ให้เห็นว่าปัญหาคืออะไร ต้องการคำตอบเป็นอย่างไร จะได้ช่วยทดสอบได้ครับ
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การค้นหาและแทนค่า

#11

Post by Bafnet »

ได้ครับ งั้นเดี๋ยวลงมือสร้างไฟล์เฉพาะกิจก่อนครับ
เนื่องจากไฟล์งานตัวจริง เป็นไฟล์ขนาดใหญ่
ขอบคุณครับ :thup:
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การค้นหาและแทนค่า

#12

Post by Bafnet »

ทำเสร็จแล้วครับ
รบกวนอาจารย์ด้วยนะครับ :roll:
ในการทดสอบนี้สนใจลูกค้าที่มีวงเงินกู้เกิน 1000000 บาท(หนึ่งล้านบาท)ครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การค้นหาและแทนค่า

#13

Post by snasui »

:D ลองปรับ Code ส่วนที่เป็นปัญหาตามด้านล่างครับ

Code: Select all

'Other code
Set cra = Sheet5.Range("A1", Sheet5.Range("A60000").End(xlUp))
Sheet1.Range("A:G").AdvancedFilter Action:=xlFilterInPlace, criteriarange:=cra
'Other code
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การค้นหาและแทนค่า

#14

Post by Bafnet »

ขอบคุณมากครับอาจารย์
ขอเรียนถามต่อหน่อยนะครับ
จากการสังเกตุเมื่อรันคำสั่ง จะไม่เห็นตัวกรอง(ที่เป็นรูปลูกศรตรงหัวคอลัมม์ค้างอยู่ที่ Sheet LN001
จากฟอร์มอาจารย์จะเห็นว่า ผมมี TextBox สำหรับระบุหน่วย ซึ่งอยู่ที่คอลัมน์ B
เราสามารถซ้อนสองเงื่อนไขได้ไหมครับ คือสนใจสองเงื่อนไขพร้อมกัน
เช่นลูกค้าที่เกิน 1,000,000 บาท และเป็นลูกค้าของหน่วย 3206 เป็นต้น
crx = TextBox35.Value
ActiveSheet.Range("A:G").AutoFilter Field:=2, Criteria1:=crx
ได้ทดลองใสเงื่อนไข ทั้งก่อนและหลัง ต่อจากคำสั่งที่อาจารย์ชี้แนะมา
พบว่า
Sheet1.Activate
Sheet1.Range("A:G").AutoFilter
crx = TextBox35.Value
ActiveSheet.Range("A:G").AutoFilter Field:=2, Criteria1:=crx
Set cra = Sheet5.Range("A1", Sheet5.Range("A60000").End(xlUp))
Sheet1.Range("A:G").AdvancedFilter Action:=xlFilterInPlace, criteriarange:=cra
จะได้ผลคือลูกค้าตามวงเงิน ไม่แยกว่าหน่วยตามที่ระบุ
Sheet1.Activate
Sheet1.Range("A:G").AutoFilter
crx = TextBox35.Value
Set cra = Sheet5.Range("A1", Sheet5.Range("A60000").End(xlUp))
Sheet1.Range("A:G").AdvancedFilter Action:=xlFilterInPlace, criteriarange:=cra
ActiveSheet.Range("A:G").AutoFilter Field:=2, Criteria1:=crx
ถ้านำไปต่อท้ายก็จะได้ผลคือ ได้เฉพาะหน่วยที่ระบุโดยไม่สนใจตัวเงิน

จะเขียนประยุกต์อย่างไรดีครับ เพื่อได้ทั้งสองเงื่อนไข
เมตตาด้วยครับ :oops:
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การค้นหาและแทนค่า

#15

Post by snasui »

:D Filter ที่ผมใช้นั้นเป็น Advanced Filter ไม่ใช่ Auto Filter

การที่เป็น Advanced Filter มันสามารถที่จะ Filter พร้อมกันได้หลายเงื่อนไข และเงื่อนไขของ Advanced Filter ควรจะแยกออกมาต่างหากในพื้นที่ใด ๆ มีหัวคอลัมน์ให้เรียบร้อย

ยกตัวอย่าง ในชีท rest เซลล์ A1:B1 คือ (2)เลขรหัสทะเบียนลูกค้า และ (12)รหัสหน่วยอำเภอ ตามลำดับ
ตั้งแต่ A2 เป็นต้นไปเป็นรหัสตามที่เราได้มา
ตั้งแต่ B2 เป็นต้นไปรหัส 3206 หรือรหัสใด ๆ ตามที่กรอกมา

จากนั้นปรับ Code ที่ผมช่วยปรับไปให้คือ

Code: Select all

Set cra = Sheet5.Range("A1", Sheet5.Range("A60000").End(xlUp))
ก็เปลี่ยนเป็น

Code: Select all

Set cra = Sheet5.Range("A1", Sheet5.Range("A60000").End(xlUp)).resize(,2)
คือปรับให้เป็น 2 คอลัมน์แล้วลอง Run Code ใหม่ > สังเกตผลลัพธ์ที่ได้

อันนี้เป็นแนวทางในการใช้ Advanced Filter เข้าไปช่วยเพื่อสามารถเพิ่มเงื่อนไขได้ตามต้องการ ลองทดสอบดู ติดตรงไหนสามารถถามมาได้เรือย ๆ ครับ
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การค้นหาและแทนค่า

#16

Post by Bafnet »

ขอบคุณมากครับสำหรับคำแนะนำ
พอเห็นอาจรย์พูดถึง
resize(,2)
ก็ทำให้นึกถึงสิ่งที่อาจารย์เคยสอน ในเรื่องของการดึงข้อมูลทั้งแถวที่บันทึกไว้
การส่งข้อมูลที่แก้ไขกลับไปบันทึกในตำแหน่งเดิม
เรื่องของ
lng = Application.Match(Sheet10.Range("S41"), .Range("C:C"), 0)
Set rt = .Range("C" & lng).Resize(, 14)
Set rs = Sheet10.Range("S41:AF41")
ประมาณนี้ ถ้าใช่อย่างที่ผมเข้าใจ
Set cra = Sheet5.Range("A1", Sheet5.Range("A60000").End(xlUp)).resize(,2)
หัวใจหลักคือการเรียงหัวข้อคอลัมน์ ต้องเหมือนกันทั้งที่ชีท Rest และ LN001
เพราะมันเอาข้อมูลที่ A1:A60000 และข้อมูลในคอลัมน์ถัดไปนั้นคือคอลัมน์ B
...คิดว่าน่าจะเข้าใจถูก...รึเปล่า
ขอบคุณมากครับ..หากพบปัญหาคงต้องรบกวนอาจารย์อีก
ขอบคุณมากๆครับ :cp:
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การค้นหาและแทนค่า

#17

Post by snasui »

:D เข้าใจถูกแล้วว่าต้องมีหัวคอลัมน์เหมือนกัน แต่ไม่จำเป็นต้องเรียงลำดับเหมือนกัน จะเรียงสับไปสับมาก็ไม่เป็นไร แต่หัวคอลัมน์จะต้องมีค่าที่เหมือนกัน จะต่างกันไม่ได้ครับ
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การค้นหาและแทนค่า

#18

Post by Bafnet »

สวัสดีครับอาจารย์
มีเรื่องให้ช่วยหน่อยครับ :roll:
ผมจะซ้อนคำสั่งอย่างไรดี
ทำแล้วไม่ได้ผล
'หนี้ค้างสวัสดิการ
If OptionButton20.Value = True And TextBox21.Value = "" And TextBox22.Value = "" And TextBox23.Value = "" And TextBox24.Value = "" Then 'หนี้ค้างสวัสดิการทั้งสาขา
On Error Resume Next
With Workbooks("CIM.xlsm").Worksheets("LN001")
Set ri = .Range(.Range("A1"), .Range("AD65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
With Workbooks("CIM.xlsm").Worksheets("Report")
Set ry = Workbooks("CIM.xlsm").Worksheets("Report").Range("A1")
End With
'เขียนแบบนี้ก็ไม่ได้ผล
Sheet6.Activate
Sheet6.Activate
Sheet6.Range("A:AD").AutoFilter
Sheet6.Range("A:AD").AutoFilter Field:=13, Criteria1:="=1638-โครงการสินเชื่อสวัสดิการบุคลากรภาครัฐ ที่อยู่อาศัย", Operator:=xlAnd, Criteria2:="=1639-โครงการสินเชื่อสวัสดิการบุคลากรภาครัฐอเนกประสงค์", Operator:=xlAnd, Criteria3:="=1663-สินเชื่อเพื่อที่อยู่อาศัย", Operator:=xlAnd, Criteria4:="=1669-สินเชื่อเอนกประสงค์"
Sheet6.Range("A:AD").AutoFilter Field:=18, Criteria1:="<>0"

'เขียนแบบนี้ก็ไม่ได้ผล
Sheet6.Activate
Sheet6.Activate
Sheet6.Range("A:AD").AutoFilter
Sheet6.Range("A:AD").AutoFilter Field:=13, Criteria1:="=1638-โครงการสินเชื่อสวัสดิการบุคลากรภาครัฐ ที่อยู่อาศัย"
'Sheet6.Range("A:AD").AutoFilter Field:=13, Criteria1:="=1639-โครงการสินเชื่อสวัสดิการบุคลากรภาครัฐ ที่อยู่อาศัย"
'Sheet6.Range("A:AD").AutoFilter Field:=13, Criteria1:="=1663-สินเชื่อเพื่อที่อยู่อาศัย"
'Sheet6.Range("A:AD").AutoFilter Field:=13, Criteria1:="=1669-สินเชื่อเอนกประสงค์"
'Sheet6.Range("A:AD").AutoFilter Field:=18, Criteria1:="<>0"

วัตุประสงค์คือ พยายามจะกรองข้อมูลหนี้ตามประเภทโครงการที่ระบุ และมียอดค้าง <>0

การเขียน Criteria ทำอย่างไรจึงจะได้ผล
ผมลอง
Set cra = Sheet5.Range("A1", Sheet5.Range("A60000").End(xlUp)).resize(,2)
แต่ติดปัญหาที่ โครงการผมทราบ แต่ ตัวเลขที่ค้างเท่าไรผมไม่ทราบ ผมต้องการที่มียอดค้าง <> 0 เท่านั้น
ไปไม่ถูกแล้วครับ :roll:
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การค้นหาและแทนค่า

#19

Post by snasui »

:D แนบไฟล์ตัวอย่างมาด้วยครับ
Post Reply