EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)Code: Select all
Sub SelectUsableLot5()
Dim lngLastRow As Long
Dim lngLastRowSource As Long
Dim StrFilterRange As String
Sheets("Data").Select
lngLastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row ' Get the last Target
StrFilterRange = "$A$1:$H$" & CStr(lngLastRow)
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.AutoFilter
ActiveSheet.Range(StrFilterRange).AutoFilter Field:=1, Criteria1:=Array("1", "2", _
"4"), _
Operator:=xlFilterValues
End Sub
Code: Select all
Sub Filter()
With Worksheets("Data")
.AutoFilterMode = False
With .Range("A1:H13")
.AutoFilter
.AutoFilter Field:=1, Criteria1:=Worksheets("Procedures").Range("C11:C13").Value
End With
End With
End Sub
Code: Select all
Sub test0()
Dim rAllCri As Range, rc As Range
Dim rt As Range, f As Boolean
With Sheets("Procedures")
Set rAllCri = .Range("c11", .Range("c" & .Rows.Count).End(xlUp))
End With
With Sheets("Data")
.UsedRange.EntireRow.Hidden = False
For Each rt In .Range("a2", .Range("a" & Rows.Count).End(xlUp))
For Each rc In rAllCri
f = False
If rt.Value Like "*" & rc.Value & "*" Then
f = True
Exit For
End If
Next rc
If Not f Then
rt.EntireRow.Hidden = True
End If
Next rt
End With
End Sub
โดยหลักการ Search จะมีแบบตรงตัวหรือใกล้เคียง Code ที่ผมเขียนเป็นตัวอย่างไปนั้นเป็นการค้นหาแบบใกล้เคียง หากต้องการแบบตรงตัวจะต้องเพิ่ม Option ให้ผู้ใช้เลือก แล้วค่อยค้นหาตาม Option นั้น ในกรณีนี้จำเป็นต้องเขียนมาเองก่อน ติดตรงไหนค่อยถามกันต่อครับknightking9 wrote:อาจารย์ครับ แล้วเช่น ต้องการกรองค่า 1 ทีนี้จะได้ค่า 15มาด้วย หรือ 2 จะได้ค่า 32มาด้วยแบบนี้หน่ะครับ ตรงนี้พอจะมีแนวทางรึป่าวครับอาจารย์ ขอบคุณครับ
สามารถทำได้ ลองปรับมาเองก่อน ติดแล้วค่อยถามกันต่อครับknightking9 wrote:กับการ search แบบนี้ ถ้าผมต้องการลบค่าอื่นไปเลยเพื่อลดขนาดไฟล์ลง สามารถทำได้รึป่าวครับอาจารย์ ถ้าตามโค๊ดของอาจารย์ผมลองนำมาปรับใช้แล้ว เหมือนจะเป็นประมาณการเลือกเฉพาะค่าที่ผมกรอกลงไปเพื่อแสดงออกมา แต่ค่าอื่น จริงๆก็ยังซ่อนไว้อยู่หน่ะครับ ขอบคุณครับ
Code: Select all
Sub test0()
Dim rAllCri As Range, rc As Range
Dim rt As Range, f As Boolean
Dim rAllData As Range
With Sheets("Procedures")
Set rAllCri = .Range("c11", .Range("c" & .Rows.Count).End(xlUp))
End With
With Sheets("Data")
Set rAllData = .Range("a2", .Range("a" & Rows.Count).End(xlUp))
.UsedRange.EntireRow.Hidden = False
For Each rt In .Range("a2", .Range("a" & Rows.Count).End(xlUp))
For Each rc In rAllCri
f = False
If rt.Value Like "*" & rc.Value & "*" Then
f = True
Exit For
End If
Next rc
If Not f Then
rt.ClearContents
End If
Next
rAllData.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End Sub
Code: Select all
Sub test0()
Dim rAllCri As Range, rc As Range
Dim rt As Range, f As Boolean
Dim rAllData As Range
Dim m As Long
With Sheets("Procedures")
Set rAllCri = .Range("c11", .Range("c" & .Rows.Count).End(xlUp))
End With
With Sheets("Data")
Set rAllData = .Range("a2", .Range("a" & Rows.Count).End(xlUp))
.UsedRange.EntireRow.Hidden = False
For Each rt In .Range("a2", .Range("a" & Rows.Count).End(xlUp))
For Each rc In rAllCri
f = False
If Application.CountIf(rAllCri, rt) > 0 Then
m = Application.Match(rt, rAllCri, 0)
f = True
Exit For
End If
Next rc
If Not f Then
rt.ClearContents
End If
Next
rAllData.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End Sub