Lọc dữ liệu cả dạng text và số

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Nhật Anh 9x

Thành viên chính thức
Tham gia
21/10/22
Bài viết
72
Được thích
3
Em chào anh chị!

Em đang muốn lọc dữ liệu bằng code VBA nhưng em đang vướng phải một vấn đề là khi em lọc thì ô có giá trị dạng text được lọc ra còn
ô có giá trị dạng số thì lại không lọc ra được
Giả sử em gõ 42 vào Textbox ở cột I thì lại chỉ ra kết quả 6742 dạng text à I80. còn I79 lại không được lọc ra. đây là đoạn code của em ạ!
Kính mong anh chị chỉ dạy cho em với ạ!
Em xin cảm ơn!

Private Sub Ma_Hang_Change()
Dim FilterRange As Range
Dim Timkiem As Variant, Lr As Long

Lr = ActiveWorkbook.Sheets("SO_KHO").Range("I" & Rows.Count).End(xlUp).Row

Set FilterRange = ActiveWorkbook.Sheets("SO_KHO").Range("A6:S" & Lr) 'vung du lieu can loc

Timkiem = Me.Ma_Hang.Value 'gia tri nhap vao textbox

If Len(Timkiem) > 0 Then 'kiem tra xem textbox co gia tri khong

FilterRange.AutoFilter Field:=9, Criteria1:=Timkiem, Operator:=xlOr, Criteria2:="*" & Timkiem & "*"

Else

FilterRange.AutoFilter Field:=9 'neu textbox trong thi bo loc

End If
End Sub

1712296768129.png
 

File đính kèm

  • So_Kho.xlsm
    40.6 KB · Đọc: 4
Em chào anh chị!

Em đang muốn lọc dữ liệu bằng code VBA nhưng em đang vướng phải một vấn đề là khi em lọc thì ô có giá trị dạng text được lọc ra còn
ô có giá trị dạng số thì lại không lọc ra được
Giả sử em gõ 42 vào Textbox ở cột I thì lại chỉ ra kết quả 6742 dạng text à I80. còn I79 lại không được lọc ra. đây là đoạn code của em ạ!
Kính mong anh chị chỉ dạy cho em với ạ!
Em xin cảm ơn!

Private Sub Ma_Hang_Change()
Dim FilterRange As Range
Dim Timkiem As Variant, Lr As Long

Lr = ActiveWorkbook.Sheets("SO_KHO").Range("I" & Rows.Count).End(xlUp).Row

Set FilterRange = ActiveWorkbook.Sheets("SO_KHO").Range("A6:S" & Lr) 'vung du lieu can loc

Timkiem = Me.Ma_Hang.Value 'gia tri nhap vao textbox

If Len(Timkiem) > 0 Then 'kiem tra xem textbox co gia tri khong

FilterRange.AutoFilter Field:=9, Criteria1:=Timkiem, Operator:=xlOr, Criteria2:="*" & Timkiem & "*"

Else

FilterRange.AutoFilter Field:=9 'neu textbox trong thi bo loc

End If
End Sub

View attachment 300020
Chào bạn, vấn đề bạn đang gặp phải có thể là do cách mà VBA xử lý các giá trị dạng số và dạng text. Khi bạn sử dụng `AutoFilter`, VBA sẽ tìm kiếm chính xác giá trị bạn nhập vào từ `Textbox`, nếu giá trị đó là dạng text thì nó sẽ không tìm thấy các ô chỉ chứa số.

Để giải quyết vấn đề này, bạn có thể thử chuyển đổi giá trị nhập vào thành dạng text trước khi lọc. Dưới đây là đoạn code đã được chỉnh sửa:

Mã:
Private Sub Ma_Hang_Change()
Dim FilterRange As Range
Dim Timkiem As String, Lr As Long

Lr = ActiveWorkbook.Sheets("SO_KHO").Range("I" & Rows.Count).End(xlUp).Row

Set FilterRange = ActiveWorkbook.Sheets("SO_KHO").Range("A6:S" & Lr) 'vung du lieu can loc

Timkiem = CStr(Me.Ma_Hang.Value) 'chuyen doi gia tri nhap vao textbox thanh chuoi

If Len(Timkiem) > 0 Then 'kiem tra xem textbox co gia tri khong

    'Su dung Wildcard * de loc cac gia tri chua chuoi Timkiem
    FilterRange.AutoFilter Field:=9, Criteria1:="=" & "*" & Timkiem & "*", Operator:=xlAnd

Else

    FilterRange.AutoFilter Field:=9 'neu textbox trong thi bo loc

End If
End Sub

Trong đoạn code trên, `CStr` được sử dụng để chuyển đổi giá trị nhập vào thành chuỗi, và `Wildcard *` được thêm vào để lọc bất kỳ ô nào chứa chuỗi tìm kiếm, bất kể giá trị đó là số hay text.

Hy vọng rằng điều này sẽ giúp bạn giải quyết vấn đề. Chúc bạn thành công!
 
Upvote 0
Chào bạn, vấn đề bạn đang gặp phải có thể là do cách mà VBA xử lý các giá trị dạng số và dạng text. Khi bạn sử dụng `AutoFilter`, VBA sẽ tìm kiếm chính xác giá trị bạn nhập vào từ `Textbox`, nếu giá trị đó là dạng text thì nó sẽ không tìm thấy các ô chỉ chứa số.

Để giải quyết vấn đề này, bạn có thể thử chuyển đổi giá trị nhập vào thành dạng text trước khi lọc. Dưới đây là đoạn code đã được chỉnh sửa:

Mã:
Private Sub Ma_Hang_Change()
Dim FilterRange As Range
Dim Timkiem As String, Lr As Long

Lr = ActiveWorkbook.Sheets("SO_KHO").Range("I" & Rows.Count).End(xlUp).Row

Set FilterRange = ActiveWorkbook.Sheets("SO_KHO").Range("A6:S" & Lr) 'vung du lieu can loc

Timkiem = CStr(Me.Ma_Hang.Value) 'chuyen doi gia tri nhap vao textbox thanh chuoi

If Len(Timkiem) > 0 Then 'kiem tra xem textbox co gia tri khong

    'Su dung Wildcard * de loc cac gia tri chua chuoi Timkiem
    FilterRange.AutoFilter Field:=9, Criteria1:="=" & "*" & Timkiem & "*", Operator:=xlAnd

Else

    FilterRange.AutoFilter Field:=9 'neu textbox trong thi bo loc

End If
End Sub

Trong đoạn code trên, `CStr` được sử dụng để chuyển đổi giá trị nhập vào thành chuỗi, và `Wildcard *` được thêm vào để lọc bất kỳ ô nào chứa chuỗi tìm kiếm, bất kể giá trị đó là số hay text.

Hy vọng rằng điều này sẽ giúp bạn giải quyết vấn đề. Chúc bạn thành công!
Em cảm ơn Anh. Nhưng kết quả vẫn chưa được anh ạ

1712364392058.png

Khi em lọc theo textbox thì kết quả vẫn chỉ ra 1 ô I79 ở dạng text thôi ạ

1712364463623.png
 
Upvote 0
Em chào anh chị!

Em đang muốn lọc dữ liệu bằng code VBA nhưng em đang vướng phải một vấn đề là khi em lọc thì ô có giá trị dạng text được lọc ra còn
ô có giá trị dạng số thì lại không lọc ra được
Giả sử em gõ 42 vào Textbox ở cột I thì lại chỉ ra kết quả 6742 dạng text à I80. còn I79 lại không được lọc ra. đây là đoạn code của em ạ!
Kính mong anh chị chỉ dạy cho em với ạ!
Em xin cảm ơn!

Private Sub Ma_Hang_Change()
Dim FilterRange As Range
Dim Timkiem As Variant, Lr As Long

Lr = ActiveWorkbook.Sheets("SO_KHO").Range("I" & Rows.Count).End(xlUp).Row

Set FilterRange = ActiveWorkbook.Sheets("SO_KHO").Range("A6:S" & Lr) 'vung du lieu can loc

Timkiem = Me.Ma_Hang.Value 'gia tri nhap vao textbox

If Len(Timkiem) > 0 Then 'kiem tra xem textbox co gia tri khong

FilterRange.AutoFilter Field:=9, Criteria1:=Timkiem, Operator:=xlOr, Criteria2:="*" & Timkiem & "*"

Else

FilterRange.AutoFilter Field:=9 'neu textbox trong thi bo loc

End If
End Sub

View attachment 300020
Thử file này xem sao
 

File đính kèm

  • So_Kho.xlsm
    41.6 KB · Đọc: 6
Upvote 0
Web KT
Back
Top Bottom